Use the right floating point load/store instructions in PPCInstrInfo::foldMemoryOpera...
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 26 Feb 2010 21:09:24 +0000 (21:09 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 26 Feb 2010 21:09:24 +0000 (21:09 +0000)
commit243296690ec78fc918762bd73896b09e26537f47
tree8a23599601a9c8aefda513f6e88dbffac33aa63a
parent66df66c5fb4ef0aedd8fcae152f58e9baa0bb017
Use the right floating point load/store instructions in PPCInstrInfo::foldMemoryOperandImpl().

The PowerPC floating point registers can represent both f32 and f64 via the
two register classes F4RC and F8RC. F8RC is considered a subclass of F4RC to
allow cross-class coalescing. This coalescing only affects whether registers
are spilled as f32 or f64.

Spill slots must be accessed with load/store instructions corresponding to the
class of the spilled register. PPCInstrInfo::foldMemoryOperandImpl was looking
at the instruction opcode which is wrong.

X86 has similar floating point register classes, but doesn't try to fold
memory operands, so there is no problem there.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97262 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/VirtRegMap.cpp
lib/Target/PowerPC/PPCInstrInfo.cpp
test/CodeGen/PowerPC/2010-02-26-FoldFloats.ll [new file with mode: 0644]