diff options
| author | mycroft <mycroft@NetBSD.org> | 2003-10-29 21:25:03 +0000 |
|---|---|---|
| committer | mycroft <mycroft@NetBSD.org> | 2003-10-29 21:25:03 +0000 |
| commit | b9c785bd44c820ea2b82f64ba0897c0451fc418c (patch) | |
| tree | 8b7be2fd25f7483e60ee4d4c069b29afc88b72ed /sys/dev | |
| parent | 5eb21a140e16ae31fd18056b7923f70bc3a257a3 (diff) | |
As seen on tech-toolchain:
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.
Diffstat (limited to 'sys/dev')
0 files changed, 0 insertions, 0 deletions
