diff --git a/lib/Target/Sparc/SparcISelLowering.cpp b/lib/Target/Sparc/SparcISelLowering.cpp index 3863e2cc1ca..d470fb312dc 100644 --- a/lib/Target/Sparc/SparcISelLowering.cpp +++ b/lib/Target/Sparc/SparcISelLowering.cpp @@ -1300,6 +1300,8 @@ SparcTargetLowering::SparcTargetLowering(TargetMachine &TM) setOperationAction(ISD::SELECT_CC, MVT::f64, Custom); if (Subtarget->is64Bit()) { + setOperationAction(ISD::SELECT, MVT::i64, Expand); + setOperationAction(ISD::SETCC, MVT::i64, Expand); setOperationAction(ISD::BR_CC, MVT::i64, Custom); setOperationAction(ISD::SELECT_CC, MVT::i64, Custom); } diff --git a/test/CodeGen/SPARC/64bit.ll b/test/CodeGen/SPARC/64bit.ll index dd6cee30b15..e10237b7d8a 100644 --- a/test/CodeGen/SPARC/64bit.ll +++ b/test/CodeGen/SPARC/64bit.ll @@ -191,3 +191,13 @@ entry: } declare void @g(i8*) + +; CHECK: expand_setcc +; CHECK: subcc %i0, 1, +; CHECK: movl %xcc, 1, +define i32 @expand_setcc(i64 %a) { + %cond = icmp sle i64 %a, 0 + %cast2 = zext i1 %cond to i32 + %RV = sub i32 1, %cast2 + ret i32 %RV +}