aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2010-11-13 02:25:14 +0000
committerEvan Cheng <evan.cheng@apple.com>2010-11-13 02:25:14 +0000
commit2bcb8daa44d09221981a3e24e68239ab83e12e9d (patch)
tree31c6a660e7c99653be20491c3bb8b6a42044b361 /llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp
parent988ffb7a117b11fd39e77d7974382db5acf9a43b (diff)
downloadllvm-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.cpp10
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))