diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Target/Sparc/SparcISelLowering.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Target/Sparc/SparcInstrInfo.td | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/SPARC/trap.ll | 11 |
3 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/llvm/lib/Target/Sparc/SparcISelLowering.cpp index 32c278b6689..2ac5b7e8c22 100644 --- a/llvm/lib/Target/Sparc/SparcISelLowering.cpp +++ b/llvm/lib/Target/Sparc/SparcISelLowering.cpp @@ -1567,6 +1567,8 @@ SparcTargetLowering::SparcTargetLowering(TargetMachine &TM) // 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); diff --git a/llvm/lib/Target/Sparc/SparcInstrInfo.td b/llvm/lib/Target/Sparc/SparcInstrInfo.td index 94d2719d20e..ae10ca0bd41 100644 --- a/llvm/lib/Target/Sparc/SparcInstrInfo.td +++ b/llvm/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", []>; diff --git a/llvm/test/CodeGen/SPARC/trap.ll b/llvm/test/CodeGen/SPARC/trap.ll new file mode 100644 index 00000000000..b72a63caeeb --- /dev/null +++ b/llvm/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() |