2014-03-18 22:07:45 +00:00
|
|
|
Pull in r201994 from upstream llvm trunk (by Benjamin Kramer):
|
|
|
|
|
|
|
|
SPARC: Implement TRAP lowering. Matches what GCC emits.
|
|
|
|
|
2014-05-24 22:27:31 +00:00
|
|
|
Introduced here: http://svnweb.freebsd.org/changeset/base/262415
|
2014-03-18 22:07:45 +00:00
|
|
|
|
|
|
|
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()
|