mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-25 04:39:51 +00:00
Implement MipsTargetLowering::LowerSELECT_CC to custom lower SELECT_CC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160064 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
875913439c
commit
3fef29d881
@ -152,6 +152,8 @@ MipsTargetLowering(MipsTargetMachine &TM)
|
||||
setOperationAction(ISD::SELECT, MVT::f32, Custom);
|
||||
setOperationAction(ISD::SELECT, MVT::f64, Custom);
|
||||
setOperationAction(ISD::SELECT, MVT::i32, Custom);
|
||||
setOperationAction(ISD::SELECT_CC, MVT::f32, Custom);
|
||||
setOperationAction(ISD::SELECT_CC, MVT::f64, Custom);
|
||||
setOperationAction(ISD::SETCC, MVT::f32, Custom);
|
||||
setOperationAction(ISD::SETCC, MVT::f64, Custom);
|
||||
setOperationAction(ISD::BRCOND, MVT::Other, Custom);
|
||||
@ -263,9 +265,6 @@ MipsTargetLowering(MipsTargetMachine &TM)
|
||||
|
||||
setInsertFencesForAtomic(true);
|
||||
|
||||
if (Subtarget->isSingleFloat())
|
||||
setOperationAction(ISD::SELECT_CC, MVT::f64, Expand);
|
||||
|
||||
if (!Subtarget->hasSEInReg()) {
|
||||
setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i8, Expand);
|
||||
setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i16, Expand);
|
||||
@ -801,6 +800,7 @@ LowerOperation(SDValue Op, SelectionDAG &DAG) const
|
||||
case ISD::GlobalTLSAddress: return LowerGlobalTLSAddress(Op, DAG);
|
||||
case ISD::JumpTable: return LowerJumpTable(Op, DAG);
|
||||
case ISD::SELECT: return LowerSELECT(Op, DAG);
|
||||
case ISD::SELECT_CC: return LowerSELECT_CC(Op, DAG);
|
||||
case ISD::SETCC: return LowerSETCC(Op, DAG);
|
||||
case ISD::VASTART: return LowerVASTART(Op, DAG);
|
||||
case ISD::FCOPYSIGN: return LowerFCOPYSIGN(Op, DAG);
|
||||
@ -1576,6 +1576,19 @@ LowerSELECT(SDValue Op, SelectionDAG &DAG) const
|
||||
Op.getDebugLoc());
|
||||
}
|
||||
|
||||
SDValue MipsTargetLowering::
|
||||
LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const
|
||||
{
|
||||
DebugLoc DL = Op.getDebugLoc();
|
||||
EVT Ty = Op.getOperand(0).getValueType();
|
||||
SDValue Cond = DAG.getNode(ISD::SETCC, DL, getSetCCResultType(Ty),
|
||||
Op.getOperand(0), Op.getOperand(1),
|
||||
Op.getOperand(4));
|
||||
|
||||
return DAG.getNode(ISD::SELECT, DL, Op.getValueType(), Cond, Op.getOperand(2),
|
||||
Op.getOperand(3));
|
||||
}
|
||||
|
||||
SDValue MipsTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue Cond = CreateFPCmp(DAG, Op);
|
||||
|
||||
|
@ -138,6 +138,7 @@ namespace llvm {
|
||||
SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const;
|
||||
|
25
test/CodeGen/Mips/selectcc.ll
Normal file
25
test/CodeGen/Mips/selectcc.ll
Normal file
@ -0,0 +1,25 @@
|
||||
; RUN: llc -march=mipsel < %s
|
||||
|
||||
@gd0 = external global double
|
||||
@gd1 = external global double
|
||||
|
||||
define double @select_cc_f32(float %a, float %b) nounwind {
|
||||
entry:
|
||||
store double 0.000000e+00, double* @gd0, align 8
|
||||
store double 1.000000e+00, double* @gd1, align 8
|
||||
%cmp = fcmp olt float %a, %b
|
||||
%conv = zext i1 %cmp to i32
|
||||
%conv1 = sitofp i32 %conv to double
|
||||
ret double %conv1
|
||||
}
|
||||
|
||||
define double @select_cc_f64(double %a, double %b) nounwind {
|
||||
entry:
|
||||
store double 0.000000e+00, double* @gd0, align 8
|
||||
store double 1.000000e+00, double* @gd1, align 8
|
||||
%cmp = fcmp olt double %a, %b
|
||||
%conv = zext i1 %cmp to i32
|
||||
%conv1 = sitofp i32 %conv to double
|
||||
ret double %conv1
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user