From b3397bacfb85aa824e1257085500551d3026d49a Mon Sep 17 00:00:00 2001 From: z Date: Fri, 11 Apr 2025 15:26:55 +0800 Subject: [CodeGen][LLVM] Fix MachineOperand::print crash when TII is nullptr. (#135170) This crash will caused if run this testcase: llvm/test/CodeGen/AMDGPU/llvm.amdgcn.ds.gws.barrier-fastregalloc.ll When build the SDNode, precisely build the SDNode for this ir: ```ir call void @llvm.amdgcn.ds.gws.barrier(i32 %val, i32 0) ``` If want call the dump function of the new SDNode in the gdb environment like this: ```gdb p N->dump() ``` The llvm will crash. All of these is because calling ```dump()``` will cause the calling```MachineMemOperand::print()``` with the argument value for the```TII``` is nullptr. And the llvm/lib/CodeGen/MachineOperand.cpp#L1235 is a derefrence of TII. Signed-off-by: fanfuqiang --- llvm/lib/CodeGen/MachineOperand.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'llvm/lib/CodeGen') diff --git a/llvm/lib/CodeGen/MachineOperand.cpp b/llvm/lib/CodeGen/MachineOperand.cpp index 231d666..0d25169 100644 --- a/llvm/lib/CodeGen/MachineOperand.cpp +++ b/llvm/lib/CodeGen/MachineOperand.cpp @@ -1232,13 +1232,17 @@ void MachineMemOperand::print(raw_ostream &OS, ModuleSlotTracker &MST, OS, cast(PVal)->getSymbol()); break; default: { - const MIRFormatter *Formatter = TII->getMIRFormatter(); // FIXME: This is not necessarily the correct MIR serialization format for // a custom pseudo source value, but at least it allows // MIR printing to work on a target with custom pseudo source // values. OS << "custom \""; - Formatter->printCustomPseudoSourceValue(OS, MST, *PVal); + if (TII) { + const MIRFormatter *Formatter = TII->getMIRFormatter(); + Formatter->printCustomPseudoSourceValue(OS, MST, *PVal); + } else { + PVal->printCustom(OS); + } OS << '\"'; break; } -- cgit v1.1