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:
|
case TargetOpcode::G_VASTART:
|
||||||
return STI.isTargetDarwin() ? selectVaStartDarwin(I, MF, MRI)
|
return STI.isTargetDarwin() ? selectVaStartDarwin(I, MF, MRI)
|
||||||
: selectVaStartAAPCS(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:
|
case TargetOpcode::G_IMPLICIT_DEF:
|
||||||
I.setDesc(TII.get(TargetOpcode::IMPLICIT_DEF));
|
I.setDesc(TII.get(TargetOpcode::IMPLICIT_DEF));
|
||||||
const LLT DstTy = MRI.getType(I.getOperand(0).getReg());
|
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