@@ -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+
70487073bool AMDGPULegalizerInfo::legalizeBVHIntersectRayIntrinsic (
70497074 MachineInstr &MI, MachineIRBuilder &B) const {
70507075 MachineRegisterInfo &MRI = *B.getMRI ();
0 commit comments