diff options
| author | Nate Begeman <natebegeman@mac.com> | 2005-08-16 19:49:35 +0000 |
|---|---|---|
| committer | Nate Begeman <natebegeman@mac.com> | 2005-08-16 19:49:35 +0000 |
| commit | 371e49515dbdeadc01eb22be431fa7e00ba351fa (patch) | |
| tree | 17fc6b4fe1b6c6a031f130d2a108fe431ab5983a /llvm/lib/Target | |
| parent | bc892265271c009945f0c481f1716ef22febc284 (diff) | |
| download | bcm5719-llvm-371e49515dbdeadc01eb22be431fa7e00ba351fa.tar.gz bcm5719-llvm-371e49515dbdeadc01eb22be431fa7e00ba351fa.zip | |
Implement BR_CC and BRTWOWAY_CC. This allows the removal of a rather nasty
fixme from the PowerPC backend. Emit slightly better code for legalizing
select_cc.
llvm-svn: 22805
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/Alpha/AlphaISelPattern.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/IA64/IA64ISelPattern.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp | 25 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/SparcV8/SparcV8ISelPattern.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelPattern.cpp | 1 |
6 files changed, 15 insertions, 18 deletions
diff --git a/llvm/lib/Target/Alpha/AlphaISelPattern.cpp b/llvm/lib/Target/Alpha/AlphaISelPattern.cpp index e898916f805..c0ae2acf97c 100644 --- a/llvm/lib/Target/Alpha/AlphaISelPattern.cpp +++ b/llvm/lib/Target/Alpha/AlphaISelPattern.cpp @@ -90,6 +90,7 @@ namespace { addRegisterClass(MVT::f32, Alpha::FPRCRegisterClass); setOperationAction(ISD::BRCONDTWOWAY, MVT::Other, Expand); + setOperationAction(ISD::BRTWOWAY_CC, MVT::Other, Expand); setOperationAction(ISD::EXTLOAD, MVT::i1, Promote); setOperationAction(ISD::EXTLOAD, MVT::f32, Expand); diff --git a/llvm/lib/Target/IA64/IA64ISelPattern.cpp b/llvm/lib/Target/IA64/IA64ISelPattern.cpp index 5428a8b9ed9..f4231a3f853 100644 --- a/llvm/lib/Target/IA64/IA64ISelPattern.cpp +++ b/llvm/lib/Target/IA64/IA64ISelPattern.cpp @@ -57,6 +57,7 @@ namespace { addRegisterClass(MVT::i1, IA64::PRRegisterClass); setOperationAction(ISD::BRCONDTWOWAY , MVT::Other, Expand); + setOperationAction(ISD::BRTWOWAY_CC , MVT::Other, Expand); setOperationAction(ISD::FP_ROUND_INREG , MVT::f32 , Expand); setSetCCResultType(MVT::i1); diff --git a/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp b/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp index 75f568f349a..4e674dc5690 100644 --- a/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp +++ b/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp @@ -713,22 +713,11 @@ unsigned ISel::SelectAddr(SDOperand N, unsigned& Reg, int& offset) void ISel::SelectBranchCC(SDOperand N) { MachineBasicBlock *Dest = - cast<BasicBlockSDNode>(N.getOperand(2))->getBasicBlock(); + cast<BasicBlockSDNode>(N.getOperand(4))->getBasicBlock(); Select(N.getOperand(0)); //chain - - // FIXME: Until we have Branch_CC and Branch_Twoway_CC, we're going to have to - // Fake it up by hand by checking to see if op 1 is a SetCC, or a boolean. - unsigned CCReg; - ISD::CondCode CC; - SDOperand Cond = N.getOperand(1); - if (Cond.getOpcode() == ISD::SETCC) { - CC = cast<CondCodeSDNode>(Cond.getOperand(2))->get(); - CCReg = SelectCC(Cond.getOperand(0), Cond.getOperand(1), CC); - } else { - CC = ISD::SETNE; - CCReg = SelectCC(Cond, ISelDAG->getConstant(0, Cond.getValueType()), CC); - } + ISD::CondCode CC = cast<CondCodeSDNode>(N.getOperand(1))->get(); + unsigned CCReg = SelectCC(N.getOperand(2), N.getOperand(3), CC); unsigned Opc = getBCCForSetCC(CC); // Iterate to the next basic block @@ -739,9 +728,9 @@ void ISel::SelectBranchCC(SDOperand N) // and build a PowerPC branch pseudo-op, suitable for long branch conversion // if necessary by the branch selection pass. Otherwise, emit a standard // conditional branch. - if (N.getOpcode() == ISD::BRCONDTWOWAY) { + if (N.getOpcode() == ISD::BRTWOWAY_CC) { MachineBasicBlock *Fallthrough = - cast<BasicBlockSDNode>(N.getOperand(3))->getBasicBlock(); + cast<BasicBlockSDNode>(N.getOperand(5))->getBasicBlock(); if (Dest != It) { BuildMI(BB, PPC::COND_BRANCH, 4).addReg(CCReg).addImm(Opc) .addMBB(Dest).addMBB(Fallthrough); @@ -1882,8 +1871,8 @@ void ISel::Select(SDOperand N) { BuildMI(BB, PPC::B, 1).addMBB(Dest); return; } - case ISD::BRCOND: - case ISD::BRCONDTWOWAY: + case ISD::BR_CC: + case ISD::BRTWOWAY_CC: SelectBranchCC(N); return; case ISD::CopyToReg: diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index d06542d6b11..cd2fc16d09e 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -66,6 +66,10 @@ PPC32TargetLowering::PPC32TargetLowering(TargetMachine &TM) setOperationAction(ISD::SELECT, MVT::i32, Expand); setOperationAction(ISD::SELECT, MVT::f32, Expand); setOperationAction(ISD::SELECT, MVT::f64, Expand); + + // PowerPC does not have BRCOND* which requires SetCC + setOperationAction(ISD::BRCOND, MVT::Other, Expand); + setOperationAction(ISD::BRCONDTWOWAY, MVT::Other, Expand); // PowerPC does not have FP_TO_UINT setOperationAction(ISD::FP_TO_UINT, MVT::i32, Expand); diff --git a/llvm/lib/Target/SparcV8/SparcV8ISelPattern.cpp b/llvm/lib/Target/SparcV8/SparcV8ISelPattern.cpp index 346f058cdcf..754c16b6ef5 100644 --- a/llvm/lib/Target/SparcV8/SparcV8ISelPattern.cpp +++ b/llvm/lib/Target/SparcV8/SparcV8ISelPattern.cpp @@ -55,6 +55,7 @@ namespace { addRegisterClass(MVT::f32, V8::FPRCRegisterClass); setOperationAction(ISD::BRCONDTWOWAY, MVT::Other, Expand); + setOperationAction(ISD::BRTWOWAY_CC, MVT::Other, Expand); setOperationAction(ISD::EXTLOAD, MVT::i1, Promote); setOperationAction(ISD::EXTLOAD, MVT::f32, Promote); diff --git a/llvm/lib/Target/X86/X86ISelPattern.cpp b/llvm/lib/Target/X86/X86ISelPattern.cpp index db95e918644..6ff8c723f5f 100644 --- a/llvm/lib/Target/X86/X86ISelPattern.cpp +++ b/llvm/lib/Target/X86/X86ISelPattern.cpp @@ -152,6 +152,7 @@ namespace { setOperationAction(ISD::FP_TO_SINT , MVT::i16 , Promote); setOperationAction(ISD::BRCONDTWOWAY , MVT::Other, Expand); + setOperationAction(ISD::BRTWOWAY_CC , MVT::Other, Expand); setOperationAction(ISD::MEMMOVE , MVT::Other, Expand); setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i16 , Expand); setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i1 , Expand); |

