Skip to content

Commit 515510f

Browse files
author
Aman Sharma
committed
[AMDGPU] Added G_UBSANTRAP GlobalISel
1 parent 44923d8 commit 515510f

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2103,7 +2103,7 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_,
21032103
getActionDefinitionsBuilder({G_MEMCPY, G_MEMCPY_INLINE, G_MEMMOVE, G_MEMSET})
21042104
.lower();
21052105

2106-
getActionDefinitionsBuilder({G_TRAP, G_DEBUGTRAP}).custom();
2106+
getActionDefinitionsBuilder({G_TRAP, G_DEBUGTRAP, G_UBSANTRAP}).custom();
21072107

21082108
getActionDefinitionsBuilder({G_VASTART, G_VAARG, G_BRJT, G_JUMP_TABLE,
21092109
G_INDEXED_LOAD, G_INDEXED_SEXTLOAD,
@@ -2222,6 +2222,8 @@ bool AMDGPULegalizerInfo::legalizeCustom(
22222222
return legalizeTrap(MI, MRI, B);
22232223
case TargetOpcode::G_DEBUGTRAP:
22242224
return legalizeDebugTrap(MI, MRI, B);
2225+
case TargetOpcode::G_UBSANTRAP:
2226+
return legalizeUbsanTrap(MI, MRI, B);
22252227
default:
22262228
return false;
22272229
}
@@ -7045,6 +7047,29 @@ bool AMDGPULegalizerInfo::legalizeDebugTrap(MachineInstr &MI,
70457047
return true;
70467048
}
70477049

7050+
7051+
bool AMDGPULegalizerInfo::legalizeUbsanTrap(MachineInstr &MI,
7052+
MachineRegisterInfo &MRI,
7053+
MachineIRBuilder &B) const {
7054+
// Is non-HSA path or trap-handler disabled? Then, report a warning
7055+
// accordingly
7056+
if (!ST.isTrapHandlerEnabled() ||
7057+
ST.getTrapHandlerAbi() != GCNSubtarget::TrapHandlerAbi::AMDHSA) {
7058+
DiagnosticInfoUnsupported NoTrap(B.getMF().getFunction(),
7059+
"ubsantrap handler not supported",
7060+
MI.getDebugLoc(), DS_Warning);
7061+
LLVMContext &Ctx = B.getMF().getFunction().getContext();
7062+
Ctx.diagnose(NoTrap);
7063+
} else {
7064+
// Insert trap instruction
7065+
B.buildInstr(AMDGPU::S_TRAP)
7066+
.addImm(static_cast<unsigned>(GCNSubtarget::TrapID::LLVMAMDHSATrap));
7067+
}
7068+
7069+
MI.eraseFromParent();
7070+
return true;
7071+
}
7072+
70487073
bool AMDGPULegalizerInfo::legalizeBVHIntersectRayIntrinsic(
70497074
MachineInstr &MI, MachineIRBuilder &B) const {
70507075
MachineRegisterInfo &MRI = *B.getMRI();

llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@ class AMDGPULegalizerInfo final : public LegalizerInfo {
244244
bool legalizeDebugTrap(MachineInstr &MI, MachineRegisterInfo &MRI,
245245
MachineIRBuilder &B) const;
246246

247+
248+
bool legalizeUbsanTrap(MachineInstr &MI, MachineRegisterInfo &MRI,
249+
MachineIRBuilder &B) const;
250+
251+
247252
bool legalizeIntrinsic(LegalizerHelper &Helper,
248253
MachineInstr &MI) const override;
249254
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -global-isel < %s
2+
; LLVM ERROR: cannot select: G_UBSANTRAP 0 (in function: ubsan_trap)
3+
4+
define void @ubsan_trap() {
5+
call void @llvm.ubsantrap(i8 0)
6+
ret void
7+
}

0 commit comments

Comments
 (0)