diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-11-13 02:25:14 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-11-13 02:25:14 +0000 |
commit | 2bcb8daa44d09221981a3e24e68239ab83e12e9d (patch) | |
tree | 31c6a660e7c99653be20491c3bb8b6a42044b361 /llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp | |
parent | 988ffb7a117b11fd39e77d7974382db5acf9a43b (diff) | |
download | llvm-2bcb8daa44d09221981a3e24e68239ab83e12e9d.zip llvm-2bcb8daa44d09221981a3e24e68239ab83e12e9d.tar.gz llvm-2bcb8daa44d09221981a3e24e68239ab83e12e9d.tar.bz2 |
Add conditional move of large immediate.
llvm-svn: 118968
Diffstat (limited to 'llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp b/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp index b252fd2..f38c452 100644 --- a/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp +++ b/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp @@ -691,15 +691,19 @@ bool ARMExpandPseudo::ExpandMBB(MachineBasicBlock &MBB) { } case ARM::MOVi32imm: - case ARM::t2MOVi32imm: { + case ARM::MOVCCi32imm: + case ARM::t2MOVi32imm: + case ARM::t2MOVCCi32imm: { unsigned PredReg = 0; ARMCC::CondCodes Pred = llvm::getInstrPredicate(&MI, PredReg); unsigned DstReg = MI.getOperand(0).getReg(); bool DstIsDead = MI.getOperand(0).isDead(); - const MachineOperand &MO = MI.getOperand(1); + bool isCC = Opcode == ARM::MOVCCi32imm || Opcode == ARM::t2MOVCCi32imm; + const MachineOperand &MO = MI.getOperand(isCC ? 2 : 1); MachineInstrBuilder LO16, HI16; - if (Opcode == ARM::MOVi32imm && !STI->hasV6T2Ops()) { + if (!STI->hasV6T2Ops() && + (Opcode == ARM::MOVi32imm || Opcode == ARM::MOVCCi32imm)) { // Expand into a movi + orr. LO16 = BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(ARM::MOVi), DstReg); HI16 = BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(ARM::ORRri)) |