diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-05-11 07:26:32 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-05-11 07:26:32 +0000 |
commit | 2fa5a7e7e4f7843c07941c1e85d74e610f46dbfb (patch) | |
tree | 95aa2579d12bc271359876d8e382782d77a81bff | |
parent | 10dc8aa581f6fa804320296414a737105a4c9275 (diff) | |
download | llvm-2fa5a7e7e4f7843c07941c1e85d74e610f46dbfb.zip llvm-2fa5a7e7e4f7843c07941c1e85d74e610f46dbfb.tar.gz llvm-2fa5a7e7e4f7843c07941c1e85d74e610f46dbfb.tar.bz2 |
Select @llvm.trap to the special B with 1111 condition (i.e. trap) instruction.
llvm-svn: 103459
-rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Target/ARM/ARMInstrInfo.td | 4 | ||||
-rw-r--r-- | llvm/lib/Target/ARM/ARMInstrThumb.td | 5 | ||||
-rw-r--r-- | llvm/test/CodeGen/ARM/trap.ll | 12 | ||||
-rw-r--r-- | llvm/test/CodeGen/Thumb/trap.ll | 12 |
5 files changed, 31 insertions, 4 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index 7a637b6..308ea16 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -384,6 +384,8 @@ ARMTargetLowering::ARMTargetLowering(TargetMachine &TM) setOperationAction(ISD::GlobalTLSAddress, MVT::i32, Custom); setOperationAction(ISD::BlockAddress, MVT::i32, Custom); + setOperationAction(ISD::TRAP, MVT::Other, Legal); + // Use the default implementation. setOperationAction(ISD::VASTART, MVT::Other, Custom); setOperationAction(ISD::VAARG, MVT::Other, Expand); diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td index 6540497..29c4747 100644 --- a/llvm/lib/Target/ARM/ARMInstrInfo.td +++ b/llvm/lib/Target/ARM/ARMInstrInfo.td @@ -791,8 +791,8 @@ def DBG : AI<(outs), (ins i32imm:$opt), MiscFrm, NoItinerary, "dbg", "\t$opt", } // A5.4 Permanently UNDEFINED instructions. -def TRAP : AI<(outs), (ins), MiscFrm, NoItinerary, "trap", "", - [/* For disassembly only; pattern left blank */]>, +let isBarrier = 1, isTerminator = 1 in +def TRAP : AXI<(outs), (ins), MiscFrm, NoItinerary, "trap", [(trap)]>, Requires<[IsARM]> { let Inst{27-25} = 0b011; let Inst{24-20} = 0b11111; diff --git a/llvm/lib/Target/ARM/ARMInstrThumb.td b/llvm/lib/Target/ARM/ARMInstrThumb.td index e3ca536..f62de94 100644 --- a/llvm/lib/Target/ARM/ARMInstrThumb.td +++ b/llvm/lib/Target/ARM/ARMInstrThumb.td @@ -417,9 +417,10 @@ def tSVC : T1pI<(outs), (ins i32imm:$svc), IIC_Br, "svc", "\t$svc", []>, } } -// A8.6.16 B: Encoding T1 -- for disassembly only +// A8.6.16 B: Encoding T1 // If Inst{11-8} == 0b1110 then UNDEFINED -def tTRAP : T1I<(outs), (ins), IIC_Br, "trap", []>, Encoding16 { +let isBarrier = 1, isTerminator = 1 in +def tTRAP : TI<(outs), (ins), IIC_Br, "trap", [(trap)]>, Encoding16 { let Inst{15-12} = 0b1101; let Inst{11-8} = 0b1110; } diff --git a/llvm/test/CodeGen/ARM/trap.ll b/llvm/test/CodeGen/ARM/trap.ll new file mode 100644 index 0000000..763dff3 --- /dev/null +++ b/llvm/test/CodeGen/ARM/trap.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s -march=arm | FileCheck %s +; rdar://7961298 + +define arm_apcscc void @t() nounwind { +entry: +; CHECK: t: +; CHECK: trap + call void @llvm.trap() + unreachable +} + +declare void @llvm.trap() nounwind diff --git a/llvm/test/CodeGen/Thumb/trap.ll b/llvm/test/CodeGen/Thumb/trap.ll new file mode 100644 index 0000000..76a0589 --- /dev/null +++ b/llvm/test/CodeGen/Thumb/trap.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s -march=thumb | FileCheck %s +; rdar://7961298 + +define arm_apcscc void @t() nounwind { +entry: +; CHECK: t: +; CHECK: trap + call void @llvm.trap() + unreachable +} + +declare void @llvm.trap() nounwind |