diff options
| author | Nate Begeman <natebegeman@mac.com> | 2004-10-07 22:26:12 +0000 |
|---|---|---|
| committer | Nate Begeman <natebegeman@mac.com> | 2004-10-07 22:26:12 +0000 |
| commit | c6b63cd2edde5b06c924faa718c1ff5053a6c9cf (patch) | |
| tree | 7304e4d827b9323809342852d53a1f33fd2af9d3 /llvm/lib/Target/PowerPC | |
| parent | 70a9d9c0b18fc3643d6df997b9146101630e5c39 (diff) | |
| download | bcm5719-llvm-c6b63cd2edde5b06c924faa718c1ff5053a6c9cf.tar.gz bcm5719-llvm-c6b63cd2edde5b06c924faa718c1ff5053a6c9cf.zip | |
Add ori reg, reg, 0 as a move instruction. This can be generated from
loading a 32bit constant into a register whose low halfword is all zeroes.
We now omit the ori after the lis for the following C code:
int bar(int y) { return y * 0x00F0000; }
_bar:
.LBB_bar_0: ; entry
; IMPLICIT_DEF
lis r2, 15
mullw r3, r3, r2
blr
llvm-svn: 16825
Diffstat (limited to 'llvm/lib/Target/PowerPC')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPC32InstrInfo.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPC32InstrInfo.cpp b/llvm/lib/Target/PowerPC/PPC32InstrInfo.cpp index ceb4d5044f4..ec25239721d 100644 --- a/llvm/lib/Target/PowerPC/PPC32InstrInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPC32InstrInfo.cpp @@ -46,6 +46,17 @@ bool PPC32InstrInfo::isMoveInstr(const MachineInstr& MI, destReg = MI.getOperand(0).getReg(); return true; } + } else if (oc == PPC::ORI) { // ori r1, r2, 0 + assert(MI.getNumOperands() == 3 && + MI.getOperand(0).isRegister() && + MI.getOperand(1).isRegister() && + MI.getOperand(2).isImmediate() && + "invalid PPC ORI instruction!"); + if (MI.getOperand(2).getImmedValue()==0) { + sourceReg = MI.getOperand(1).getReg(); + destReg = MI.getOperand(0).getReg(); + return true; + } } else if (oc == PPC::FMR) { // fmr r1, r2 assert(MI.getNumOperands() == 2 && MI.getOperand(0).isRegister() && |

