mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 17:31:50 +00:00
Emit COPY instead of FMR/FMSD instructions for floating point conversion on
PowerPC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108555 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
49669e6d3a
commit
a90c3f600d
@ -80,7 +80,7 @@ bool PPCInstrInfo::isMoveInstr(const MachineInstr& MI,
|
||||
destReg = MI.getOperand(0).getReg();
|
||||
return true;
|
||||
}
|
||||
} else if (oc == PPC::FMR || oc == PPC::FMRSD) { // fmr r1, r2
|
||||
} else if (oc == PPC::FMR) { // fmr r1, r2
|
||||
assert(MI.getNumOperands() >= 2 &&
|
||||
MI.getOperand(0).isReg() &&
|
||||
MI.getOperand(1).isReg() &&
|
||||
|
@ -1022,9 +1022,7 @@ let Uses = [RM] in {
|
||||
}
|
||||
}
|
||||
|
||||
/// FMR is split into 2 versions, one for 4/8 byte FP, and one for extending.
|
||||
///
|
||||
/// Note that these are defined as pseudo-ops on the PPC970 because they are
|
||||
/// Note that FMR is defined as pseudo-ops on the PPC970 because they are
|
||||
/// often coalesced away and we don't want the dispatch group builder to think
|
||||
/// that they will fill slots (which could cause the load of a LSU reject to
|
||||
/// sneak into a d-group with a store).
|
||||
@ -1032,10 +1030,6 @@ def FMR : XForm_26<63, 72, (outs F4RC:$frD), (ins F4RC:$frB),
|
||||
"fmr $frD, $frB", FPGeneral,
|
||||
[]>, // (set F4RC:$frD, F4RC:$frB)
|
||||
PPC970_Unit_Pseudo;
|
||||
def FMRSD : XForm_26<63, 72, (outs F8RC:$frD), (ins F4RC:$frB),
|
||||
"fmr $frD, $frB", FPGeneral,
|
||||
[(set F8RC:$frD, (fextend F4RC:$frB))]>,
|
||||
PPC970_Unit_Pseudo;
|
||||
|
||||
let PPC970_Unit = 3 in { // FPU Operations.
|
||||
// These are artificially split into two different forms, for 4/8 byte FP.
|
||||
@ -1476,10 +1470,13 @@ def : Pat<(extloadi16 iaddr:$src),
|
||||
(LHZ iaddr:$src)>;
|
||||
def : Pat<(extloadi16 xaddr:$src),
|
||||
(LHZX xaddr:$src)>;
|
||||
def : Pat<(extloadf32 iaddr:$src),
|
||||
(FMRSD (LFS iaddr:$src))>;
|
||||
def : Pat<(extloadf32 xaddr:$src),
|
||||
(FMRSD (LFSX xaddr:$src))>;
|
||||
def : Pat<(f64 (extloadf32 iaddr:$src)),
|
||||
(COPY_TO_REGCLASS (LFS iaddr:$src), F8RC)>;
|
||||
def : Pat<(f64 (extloadf32 xaddr:$src)),
|
||||
(COPY_TO_REGCLASS (LFSX xaddr:$src), F8RC)>;
|
||||
|
||||
def : Pat<(f64 (fextend F4RC:$src)),
|
||||
(COPY_TO_REGCLASS F4RC:$src, F8RC)>;
|
||||
|
||||
// Memory barriers
|
||||
def : Pat<(membarrier (i32 imm /*ll*/),
|
||||
|
Loading…
Reference in New Issue
Block a user