mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-21 03:05:26 -04:00
[MIPS GlobalISel] Select llvm.trap intrinsic
Select G_INTRINSIC_W_SIDE_EFFECTS for Intrinsic::trap for MIPS32 via legalizeIntrinsic. Differential Revision: https://reviews.llvm.org/D67180 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@371055 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -219,8 +219,16 @@ bool MipsLegalizerInfo::legalizeCustom(MachineInstr &MI,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MipsLegalizerInfo::legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
|
||||
bool MipsLegalizerInfo::legalizeIntrinsic(MachineInstr &MI,
|
||||
MachineRegisterInfo &MRI,
|
||||
MachineIRBuilder &MIRBuilder) const {
|
||||
const MipsSubtarget &ST =
|
||||
static_cast<const MipsSubtarget &>(MI.getMF()->getSubtarget());
|
||||
const MipsInstrInfo &TII = *ST.getInstrInfo();
|
||||
const MipsRegisterInfo &TRI = *ST.getRegisterInfo();
|
||||
const RegisterBankInfo &RBI = *ST.getRegBankInfo();
|
||||
MIRBuilder.setInstr(MI);
|
||||
|
||||
switch (MI.getIntrinsicID()) {
|
||||
case Intrinsic::memcpy:
|
||||
case Intrinsic::memset:
|
||||
@@ -230,6 +238,11 @@ bool MipsLegalizerInfo::legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo
|
||||
return false;
|
||||
MI.eraseFromParent();
|
||||
return true;
|
||||
case Intrinsic::trap: {
|
||||
MachineInstr *Trap = MIRBuilder.buildInstr(Mips::TRAP);
|
||||
MI.eraseFromParent();
|
||||
return constrainSelectedInstRegOperands(*Trap, TII, TRI, RBI);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||
# RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
|
||||
--- |
|
||||
|
||||
declare void @llvm.trap()
|
||||
define void @f() { ret void }
|
||||
|
||||
...
|
||||
---
|
||||
name: f
|
||||
alignment: 2
|
||||
body: |
|
||||
bb.1 (%ir-block.0):
|
||||
; MIPS32-LABEL: name: f
|
||||
; MIPS32: TRAP
|
||||
; MIPS32: RetRA
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap)
|
||||
RetRA
|
||||
|
||||
...
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32
|
||||
|
||||
declare void @llvm.trap()
|
||||
|
||||
define void @f() {
|
||||
; MIPS32-LABEL: f:
|
||||
; MIPS32: # %bb.0:
|
||||
; MIPS32-NEXT: break
|
||||
; MIPS32-NEXT: jr $ra
|
||||
; MIPS32-NEXT: nop
|
||||
call void @llvm.trap()
|
||||
ret void
|
||||
}
|
||||
Reference in New Issue
Block a user