b9c785bd44
So the problem is thus: * The {u,}mulsidi3 generate two parallel sets which modify the upper and lower halves of the target register. * life_analysis() does not track subregister modifications -- if you don't modify the whole register with a single set, it considers the register unused. The simple, if klugy, solution to this is to stick an explicit clobber in. It seems to work. While doing this, I noticed that constant folding was not happening for 32x32->64 multiplies. This is because the parallel set generated by {u,}mulsidi3 cannot be folded at all. To solve this, I first expand to a normal multiply, and then use a define_insn_and_split to convert it to the parallel set after CSE and constant folding. This patch has also been submitted to GCC bugzilla, but who knows if I'll get a reply to that. |
||
---|---|---|
bin | ||
contrib/sys | ||
crypto | ||
dist | ||
distrib | ||
doc | ||
etc | ||
games | ||
gnu | ||
include | ||
lib | ||
libexec | ||
regress | ||
rescue | ||
sbin | ||
share | ||
sys | ||
tools | ||
usr.bin | ||
usr.sbin | ||
x11 | ||
build.sh | ||
BUILDING | ||
Makefile | ||
Makefile.inc | ||
UPDATING |