28 Oct 2003 19:51
m68k uninitialized variable warnings (patch)
Charles M. Hannum <abuse <at> spamalicious.com>
2003-10-28 18:51:09 GMT
2003-10-28 18:51:09 GMT
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.
I've built a kernel and libc with these changes, and they seem to work. The
rest of my build hasn't finished yet.
RSS Feed