diff options
Diffstat (limited to 'contrib/llvm/patches/patch-r262415-llvm-r201994-sparc.diff')
-rw-r--r-- | contrib/llvm/patches/patch-r262415-llvm-r201994-sparc.diff | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-r262415-llvm-r201994-sparc.diff b/contrib/llvm/patches/patch-r262415-llvm-r201994-sparc.diff new file mode 100644 index 0000000..4f9b916 --- /dev/null +++ b/contrib/llvm/patches/patch-r262415-llvm-r201994-sparc.diff @@ -0,0 +1,49 @@ +Pull in r201994 from upstream llvm trunk (by Benjamin Kramer): + + SPARC: Implement TRAP lowering. Matches what GCC emits. + +Introduced here: http://svn.freebsd.org/changeset/base/262415 + +Index: lib/Target/Sparc/SparcInstrInfo.td +=================================================================== +--- lib/Target/Sparc/SparcInstrInfo.td ++++ lib/Target/Sparc/SparcInstrInfo.td +@@ -312,6 +312,9 @@ let hasSideEffects = 1, mayStore = 1 in { + [(flushw)]>; + } + ++let isBarrier = 1, isTerminator = 1, rd = 0b1000, rs1 = 0, simm13 = 5 in ++ def TA5 : F3_2<0b10, 0b111010, (outs), (ins), "ta 5", [(trap)]>; ++ + let rd = 0 in + def UNIMP : F2_1<0b000, (outs), (ins i32imm:$val), + "unimp $val", []>; +Index: lib/Target/Sparc/SparcISelLowering.cpp +=================================================================== +--- lib/Target/Sparc/SparcISelLowering.cpp ++++ lib/Target/Sparc/SparcISelLowering.cpp +@@ -1565,6 +1565,8 @@ SparcTargetLowering::SparcTargetLowering(TargetMac + // VAARG needs to be lowered to not do unaligned accesses for doubles. + setOperationAction(ISD::VAARG , MVT::Other, Custom); + ++ setOperationAction(ISD::TRAP , MVT::Other, Legal); ++ + // Use the default implementation. + setOperationAction(ISD::VACOPY , MVT::Other, Expand); + setOperationAction(ISD::VAEND , MVT::Other, Expand); +Index: test/CodeGen/SPARC/trap.ll +=================================================================== +--- test/CodeGen/SPARC/trap.ll ++++ test/CodeGen/SPARC/trap.ll +@@ -0,0 +1,11 @@ ++; RUN: llc -mtriple=sparc-linux-gnu < %s -show-mc-encoding | FileCheck %s ++ ++define void @test1() { ++ tail call void @llvm.trap() ++ unreachable ++ ++; CHECK-LABEL: test1: ++; CHECK: ta 5 ! encoding: [0x91,0xd0,0x20,0x05] ++} ++ ++declare void @llvm.trap() |