Pull in r201994 from upstream llvm trunk (by Benjamin Kramer): SPARC: Implement TRAP lowering. Matches what GCC emits. Introduced here: http://svnweb.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()