view .hgtags @ 418:3832a68d83ef

Fix internal compiler error on "var2 = var1 + 1" patterns This appears to be the correct fix. It was provided by Tormod Volden (debian.tormod@gmail.com). The final commit is substantially different from Tormod's submission mostly due to housecleaning (removing the old patches and updating the README). Tormod's comments follow. The original addhi_mem_1 "insn" instruction pattern /matches/ two memory operands, just with the /constraint/ that these are the same location. A pattern match tells the compiler "you should be able to use this, but you might have to work on it to meet the constraints". For typical constraints on registers the compiler can add "reloads", moving stuff between registers or from memory, until the constraints are met and the instruction can be used. However, in this case, no amount of reloads can make two memory locations the same if they already weren't, so the compiler breaks down and cries "unable to generate reloads". It seems this issue only appears if optimization is enabled. The proof is in gcc's reload.c and is left as an exercise to the reader. Limiting the matching pattern to identical memory operands avoids these situations, while allowing the common "var++" cases. References: The pattern/constraints difference is explained in https://gcc.gnu.org/onlinedocs/gccint/Simple-Constraints.html#index-other-register-constraints-3335
author William Astle <lost@l-w.ca>
date Tue, 29 Mar 2016 21:21:49 -0600
parents 4cf907aa634c
children d15399d94386
line wrap: on
line source

05f1a31f8f1ea8a59304f8e2a330556e39853239 lwtools-4.0
8ee33204fa7933ef68136780253b0b95645f4ace lwtools-4.2
8ee33204fa7933ef68136780253b0b95645f4ace lwtools-4.2
0000000000000000000000000000000000000000 lwtools-4.2
0000000000000000000000000000000000000000 lwtools-4.2
1cb23a4e1e7d5962a4bb93237dd25001bf40204c lwtools-4.2
d90ab253471eafe8eb02a90e67159ea909b033e9 lwtools-4.3
74b4e9f23c62e2a4d52d5880c88fb57737f80b39 lwtools-4.4
47a055c57d4ab76ef479a3d9a0241fd3b7cfdff7 lwtools-4.5
38ecb99d78dd5177873ffb5a13e25295348bad9b lwtools-4.6
65510f1574e4e729efac9f20003ef8d29118f6cf lwtools-4.7
1dcc0b174e3b340702a33182acc6cf8274ccbe4e lwtools-4.8
21ecf29b568ea6a9df18309f035be11bc5b955f8 lwtools-4.9
f3592d276aedcf0c4dd5d81349b21f8ce2ebc3d1 lwtools-4.10
fd96bb4a9c8d2451b85703e49edc136b560cd206 lwtools-4.11
d7870f1e912196d96e606f7904db3e4f940ab4b7 lwtools-4.12