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