2010-09-03 02:01:47 |
Nathan Froyd |
bug |
|
|
added bug |
2010-09-03 02:17:17 |
Nathan Froyd |
description |
#629058 points out that we could do a better job of coalescing raw-slot slot calculations. This is hard, because each RAW-INSTANCE/* vop contains logic to:
- Pull the length out of the structure instance;
- Compute the offset of the raw slot;
- Access the member question.
An all-assembly CSE pass could do the necessary coalescing, but I hope you agree that'd be rather ugly.
The better solution is to refactor the raw-slot logic to DEFKNOWN functions suitable for doing the three steps above. So you'd end up with something like:
(%RAW-INSTANCE-REF/WORD X (%RAW-SLOT-OFFSET (%INSTANCE-LENGTH X) **magic-index** 1#|nwords|#))
takes care of the first one. This is a tedious job, since it needs to be done across all backends, but it's quite straightforward and will make new ports somewhat easier. It also removes a good deal of OAOOM from */cell.lisp and might even give a nice place in *defstruct.lisp to document exactly how raw slots work.
Once the above is done, fixing #629058 boils down to "just" implementing a basic-block value numbering pass or something similar on IR2. |
#629058 points out that we could do a better job of coalescing raw-slot slot calculations. This is hard, because each RAW-INSTANCE/* vop contains logic to:
- Pull the length out of the structure instance;
- Compute the offset of the raw slot;
- Access the member question.
An all-assembly CSE pass could do the necessary coalescing, but I hope you agree that'd be rather ugly.
The better solution is to refactor the raw-slot logic to DEFKNOWN functions suitable for doing the three steps above. So you'd end up with something like:
(%RAW-INSTANCE-REF/WORD X (%RAW-SLOT-OFFSET (%INSTANCE-LENGTH X) **magic-index** 1#|nwords|#))
This is a tedious job, since it needs to be done across all backends, but it's quite straightforward and will make new ports somewhat easier. It also removes a good deal of OAOOM from */cell.lisp and might even give a nice place in *defstruct.lisp to document exactly how raw slots work.
Once the above is done, fixing #629058 boils down to "just" implementing a basic-block value numbering pass or something similar on IR2.
|
|
2010-09-03 11:57:52 |
Tobias C. Rittweiler |
description |
#629058 points out that we could do a better job of coalescing raw-slot slot calculations. This is hard, because each RAW-INSTANCE/* vop contains logic to:
- Pull the length out of the structure instance;
- Compute the offset of the raw slot;
- Access the member question.
An all-assembly CSE pass could do the necessary coalescing, but I hope you agree that'd be rather ugly.
The better solution is to refactor the raw-slot logic to DEFKNOWN functions suitable for doing the three steps above. So you'd end up with something like:
(%RAW-INSTANCE-REF/WORD X (%RAW-SLOT-OFFSET (%INSTANCE-LENGTH X) **magic-index** 1#|nwords|#))
This is a tedious job, since it needs to be done across all backends, but it's quite straightforward and will make new ports somewhat easier. It also removes a good deal of OAOOM from */cell.lisp and might even give a nice place in *defstruct.lisp to document exactly how raw slots work.
Once the above is done, fixing #629058 boils down to "just" implementing a basic-block value numbering pass or something similar on IR2.
|
Bug #629058 points out that we could do a better job of coalescing raw-slot slot calculations. This is hard, because each RAW-INSTANCE/* vop contains logic to:
- Pull the length out of the structure instance;
- Compute the offset of the raw slot;
- Access the member question.
An all-assembly CSE pass could do the necessary coalescing, but I hope you agree that'd be rather ugly.
The better solution is to refactor the raw-slot logic to DEFKNOWN functions suitable for doing the three steps above. So you'd end up with something like:
(%RAW-INSTANCE-REF/WORD X (%RAW-SLOT-OFFSET (%INSTANCE-LENGTH X) **magic-index** 1#|nwords|#))
This is a tedious job, since it needs to be done across all backends, but it's quite straightforward and will make new ports somewhat easier. It also removes a good deal of OAOOM from */cell.lisp and might even give a nice place in *defstruct.lisp to document exactly how raw slots work.
Once the above is done, fixing #629058 boils down to "just" implementing a basic-block value numbering pass or something similar on IR2.
|
|
2010-09-03 11:58:42 |
Tobias C. Rittweiler |
description |
Bug #629058 points out that we could do a better job of coalescing raw-slot slot calculations. This is hard, because each RAW-INSTANCE/* vop contains logic to:
- Pull the length out of the structure instance;
- Compute the offset of the raw slot;
- Access the member question.
An all-assembly CSE pass could do the necessary coalescing, but I hope you agree that'd be rather ugly.
The better solution is to refactor the raw-slot logic to DEFKNOWN functions suitable for doing the three steps above. So you'd end up with something like:
(%RAW-INSTANCE-REF/WORD X (%RAW-SLOT-OFFSET (%INSTANCE-LENGTH X) **magic-index** 1#|nwords|#))
This is a tedious job, since it needs to be done across all backends, but it's quite straightforward and will make new ports somewhat easier. It also removes a good deal of OAOOM from */cell.lisp and might even give a nice place in *defstruct.lisp to document exactly how raw slots work.
Once the above is done, fixing #629058 boils down to "just" implementing a basic-block value numbering pass or something similar on IR2.
|
#629058 points out that we could do a better job of coalescing raw-slot slot calculations. This is hard, because each RAW-INSTANCE/* vop contains logic to:
- Pull the length out of the structure instance;
- Compute the offset of the raw slot;
- Access the member question.
An all-assembly CSE pass could do the necessary coalescing, but I hope you agree that'd be rather ugly.
The better solution is to refactor the raw-slot logic to DEFKNOWN functions suitable for doing the three steps above. So you'd end up with something like:
(%RAW-INSTANCE-REF/WORD X (%RAW-SLOT-OFFSET (%INSTANCE-LENGTH X) **magic-index** 1#|nwords|#))
This is a tedious job, since it needs to be done across all backends, but it's quite straightforward and will make new ports somewhat easier. It also removes a good deal of OAOOM from */cell.lisp and might even give a nice place in *defstruct.lisp to document exactly how raw slots work.
Once the above is done, fixing Bug #629058 boils down to "just" implementing a basic-block value numbering pass or something similar on IR2.
|
|
2010-09-03 11:59:40 |
Tobias C. Rittweiler |
description |
#629058 points out that we could do a better job of coalescing raw-slot slot calculations. This is hard, because each RAW-INSTANCE/* vop contains logic to:
- Pull the length out of the structure instance;
- Compute the offset of the raw slot;
- Access the member question.
An all-assembly CSE pass could do the necessary coalescing, but I hope you agree that'd be rather ugly.
The better solution is to refactor the raw-slot logic to DEFKNOWN functions suitable for doing the three steps above. So you'd end up with something like:
(%RAW-INSTANCE-REF/WORD X (%RAW-SLOT-OFFSET (%INSTANCE-LENGTH X) **magic-index** 1#|nwords|#))
This is a tedious job, since it needs to be done across all backends, but it's quite straightforward and will make new ports somewhat easier. It also removes a good deal of OAOOM from */cell.lisp and might even give a nice place in *defstruct.lisp to document exactly how raw slots work.
Once the above is done, fixing Bug #629058 boils down to "just" implementing a basic-block value numbering pass or something similar on IR2.
|
Bug #629058 points out that we could do a better job of coalescing raw-slot slot calculations. This is hard, because each RAW-INSTANCE/* vop contains logic to:
- Pull the length out of the structure instance;
- Compute the offset of the raw slot;
- Access the member question.
An all-assembly CSE pass could do the necessary coalescing, but I hope you agree that'd be rather ugly.
The better solution is to refactor the raw-slot logic to DEFKNOWN functions suitable for doing the three steps above. So you'd end up with something like:
(%RAW-INSTANCE-REF/WORD X (%RAW-SLOT-OFFSET (%INSTANCE-LENGTH X) **magic-index** 1#|nwords|#))
This is a tedious job, since it needs to be done across all backends, but it's quite straightforward and will make new ports somewhat easier. It also removes a good deal of OAOOM from */cell.lisp and might even give a nice place in *defstruct.lisp to document exactly how raw slots work.
Once the above is done, fixing Bug #629058 boils down to "just" implementing a basic-block value numbering pass or something similar on IR2.
|
|
2021-10-20 15:10:03 |
Douglas Katzman |
sbcl: status |
Confirmed |
Invalid |
|