1263320SdimPull in r201994 from upstream llvm trunk (by Benjamin Kramer): 2263320Sdim 3263320Sdim SPARC: Implement TRAP lowering. Matches what GCC emits. 4263320Sdim 5263320SdimIntroduced here: http://svn.freebsd.org/changeset/base/262415 6263320Sdim 7263320SdimIndex: lib/Target/Sparc/SparcInstrInfo.td 8263320Sdim=================================================================== 9263320Sdim--- lib/Target/Sparc/SparcInstrInfo.td 10263320Sdim+++ lib/Target/Sparc/SparcInstrInfo.td 11263320Sdim@@ -312,6 +312,9 @@ let hasSideEffects = 1, mayStore = 1 in { 12263320Sdim [(flushw)]>; 13263320Sdim } 14263320Sdim 15263320Sdim+let isBarrier = 1, isTerminator = 1, rd = 0b1000, rs1 = 0, simm13 = 5 in 16263320Sdim+ def TA5 : F3_2<0b10, 0b111010, (outs), (ins), "ta 5", [(trap)]>; 17263320Sdim+ 18263320Sdim let rd = 0 in 19263320Sdim def UNIMP : F2_1<0b000, (outs), (ins i32imm:$val), 20263320Sdim "unimp $val", []>; 21263320SdimIndex: lib/Target/Sparc/SparcISelLowering.cpp 22263320Sdim=================================================================== 23263320Sdim--- lib/Target/Sparc/SparcISelLowering.cpp 24263320Sdim+++ lib/Target/Sparc/SparcISelLowering.cpp 25263320Sdim@@ -1565,6 +1565,8 @@ SparcTargetLowering::SparcTargetLowering(TargetMac 26263320Sdim // VAARG needs to be lowered to not do unaligned accesses for doubles. 27263320Sdim setOperationAction(ISD::VAARG , MVT::Other, Custom); 28263320Sdim 29263320Sdim+ setOperationAction(ISD::TRAP , MVT::Other, Legal); 30263320Sdim+ 31263320Sdim // Use the default implementation. 32263320Sdim setOperationAction(ISD::VACOPY , MVT::Other, Expand); 33263320Sdim setOperationAction(ISD::VAEND , MVT::Other, Expand); 34263320SdimIndex: test/CodeGen/SPARC/trap.ll 35263320Sdim=================================================================== 36263320Sdim--- test/CodeGen/SPARC/trap.ll 37263320Sdim+++ test/CodeGen/SPARC/trap.ll 38263320Sdim@@ -0,0 +1,11 @@ 39263320Sdim+; RUN: llc -mtriple=sparc-linux-gnu < %s -show-mc-encoding | FileCheck %s 40263320Sdim+ 41263320Sdim+define void @test1() { 42263320Sdim+ tail call void @llvm.trap() 43263320Sdim+ unreachable 44263320Sdim+ 45263320Sdim+; CHECK-LABEL: test1: 46263320Sdim+; CHECK: ta 5 ! encoding: [0x91,0xd0,0x20,0x05] 47263320Sdim+} 48263320Sdim+ 49263320Sdim+declare void @llvm.trap() 50