[mips][fp64] Add an implicit def to MFHC1 claiming that it reads the lower 32-bits...
authorDaniel Sanders <daniel.sanders@imgtec.com>
Mon, 10 Mar 2014 15:01:57 +0000 (15:01 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Mon, 10 Mar 2014 15:01:57 +0000 (15:01 +0000)
commite1820a6a4e5cfd1a41bd40ce6c21635d04289fec
tree19b87bbe2f524a4e358ee507bca26f4129e538a5
parent7d4afb2711974795e655688c1f7964cd60f3cb96
[mips][fp64] Add an implicit def to MFHC1 claiming that it reads the lower 32-bits of 64-bit FPR

Summary:
This is a white lie to workaround a widespread bug in the -mfp64
implementation.

The problem is that none of the 32-bit fpu ops mention the fact that they
clobber the upper 32-bits of the 64-bit FPR. This allows MFHC1 to be
scheduled on the wrong side of most 32-bit FPU ops. Fixing that requires a
major overhaul of the FPU implementation which can't be done right now due to
time constraints.

MFHC1 is one of two affected instructions. These instructions are the only
FPU instructions that don't read or write the lower 32-bits. We therefore
pretend that it reads the bottom 32-bits to artificially create a dependency and
prevent the scheduler changing the behaviour of the code.
The other instruction is MTHC1 which will be fixed once I've have found a failing
test case for it.

The testcase is test-suite/SingleSource/UnitTests/Vector/simple.c when
given TARGET_CFLAGS="-mips32r2 -mfp64 -mmsa".

Reviewers: jacksprat, matheusalmeida

Reviewed By: jacksprat

Differential Revision: http://llvm-reviews.chandlerc.com/D2966

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203464 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/Mips/MipsSEInstrInfo.cpp