diff options
| author | Akira Hatanaka <ahatanak@gmail.com> | 2011-08-12 18:09:59 +0000 |
|---|---|---|
| committer | Akira Hatanaka <ahatanak@gmail.com> | 2011-08-12 18:09:59 +0000 |
| commit | 7bd6e6ebef400e39ee87a60713c3574175c7855a (patch) | |
| tree | ca37fe4540d9ed345840140f810a54bab4f33270 /llvm/lib/CodeGen | |
| parent | a585102d3eb9c8928bac0e013f3aebd8a0929e29 (diff) | |
| download | bcm5719-llvm-7bd6e6ebef400e39ee87a60713c3574175c7855a.tar.gz bcm5719-llvm-7bd6e6ebef400e39ee87a60713c3574175c7855a.zip | |
When constant double 0.0 is lowered, make sure 0 is copied directly from an
integer register to a floating point register. It is not valid to interpret
the value of a floating pointer register as part of a double precision
floating point value after a single precision floating point computational
or move instruction stores its result to the register.
- In the test case, the following code is generated before this patch is
applied:
mtc1 $zero, $f2 ; unformatted copy to $f2
mov.s $f0, $f2 ; $f0 is in single format
sdc1 $f12, 0($sp)
mov.s $f1, $f2 ; $f1 is in single format
c.eq.d $f12, $f0 ; $f0 cannot be interpreted as double
- The following code is generated after this patch is applied:
mtc1 $zero, $f0 ; unformatted copy to $f0
mtc1 $zero, $f1 ; unformatted copy to $f1
c.eq.d $f12, $f0 ; $f0 can be interpreted as double
Bhanu Chetlapalli and Chris Dearman at MIPS technologies reported this bug and
provided the test case.
llvm-svn: 137484
Diffstat (limited to 'llvm/lib/CodeGen')
0 files changed, 0 insertions, 0 deletions

