Activity log for bug #629221

Date Who What changed Old value New value Message
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