forked from OSchip/llvm-project
[AArch64][GlobalISel] Implement selection for the llvm.trap intrinsic.
rdar://38674040 llvm-svn: 330831
This commit is contained in:
parent
f6e44a0bdf
commit
1f5d994119
|
@ -1466,6 +1466,15 @@ bool AArch64InstructionSelector::select(MachineInstr &I,
|
|||
case TargetOpcode::G_VASTART:
|
||||
return STI.isTargetDarwin() ? selectVaStartDarwin(I, MF, MRI)
|
||||
: selectVaStartAAPCS(I, MF, MRI);
|
||||
case TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS:
|
||||
if (!I.getOperand(0).isIntrinsicID())
|
||||
return false;
|
||||
if (I.getOperand(0).getIntrinsicID() != Intrinsic::trap)
|
||||
return false;
|
||||
BuildMI(MBB, I, I.getDebugLoc(), TII.get(AArch64::BRK))
|
||||
.addImm(1);
|
||||
I.eraseFromParent();
|
||||
return true;
|
||||
case TargetOpcode::G_IMPLICIT_DEF:
|
||||
I.setDesc(TII.get(TargetOpcode::IMPLICIT_DEF));
|
||||
const LLT DstTy = MRI.getType(I.getOperand(0).getReg());
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||
# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s
|
||||
--- |
|
||||
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
|
||||
target triple = "aarch64"
|
||||
|
||||
; Function Attrs: noreturn nounwind
|
||||
declare void @llvm.trap() #0
|
||||
|
||||
define void @foo() {
|
||||
call void @llvm.trap()
|
||||
ret void
|
||||
}
|
||||
|
||||
attributes #0 = { noreturn nounwind }
|
||||
|
||||
...
|
||||
---
|
||||
name: foo
|
||||
alignment: 2
|
||||
legalized: true
|
||||
regBankSelected: true
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.1 (%ir-block.0):
|
||||
; CHECK-LABEL: name: foo
|
||||
; CHECK: BRK 1
|
||||
; CHECK: RET_ReallyLR
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
|
||||
RET_ReallyLR
|
||||
|
||||
...
|
Loading…
Reference in New Issue