diff options
Diffstat (limited to 'contrib/llvm/patches/patch-r262265-llvm-r201718-sparc.diff')
-rw-r--r-- | contrib/llvm/patches/patch-r262265-llvm-r201718-sparc.diff | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-r262265-llvm-r201718-sparc.diff b/contrib/llvm/patches/patch-r262265-llvm-r201718-sparc.diff new file mode 100644 index 0000000..d9ca427 --- /dev/null +++ b/contrib/llvm/patches/patch-r262265-llvm-r201718-sparc.diff @@ -0,0 +1,40 @@ +Pull in r201718 from upstream llvm trunk (by Roman Divacky): + + Expand 64bit {SHL,SHR,SRA}_PARTS on sparcv9. + +Introduced here: http://svn.freebsd.org/changeset/base/262265 + +Index: test/CodeGen/SPARC/parts.ll +=================================================================== +--- test/CodeGen/SPARC/parts.ll ++++ test/CodeGen/SPARC/parts.ll +@@ -0,0 +1,14 @@ ++; RUN: llc < %s -march=sparcv9 | FileCheck %s ++ ++; CHECK-LABEL: test ++; CHECK: srl %i1, 0, %o2 ++; CHECK-NEXT: or %g0, %i2, %o0 ++; CHECK-NEXT: call __ashlti3 ++; CHECK-NEXT: or %g0, %i3, %o1 ++; CHECK-NEXT: or %g0, %o0, %i0 ++ ++define i128 @test(i128 %a, i128 %b) { ++entry: ++ %tmp = shl i128 %b, %a ++ ret i128 %tmp ++} +Index: lib/Target/Sparc/SparcISelLowering.cpp +=================================================================== +--- lib/Target/Sparc/SparcISelLowering.cpp ++++ lib/Target/Sparc/SparcISelLowering.cpp +@@ -1554,6 +1554,10 @@ SparcTargetLowering::SparcTargetLowering(TargetMac + + setOperationAction(ISD::UMULO, MVT::i64, Custom); + setOperationAction(ISD::SMULO, MVT::i64, Custom); ++ ++ setOperationAction(ISD::SHL_PARTS, MVT::i64, Expand); ++ setOperationAction(ISD::SRA_PARTS, MVT::i64, Expand); ++ setOperationAction(ISD::SRL_PARTS, MVT::i64, Expand); + } + + // VASTART needs to be custom lowered to use the VarArgsFrameIndex. |