aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineOperand.cpp
diff options
context:
space:
mode:
authorz <feqin1023@gmail.com>2025-04-11 15:26:55 +0800
committerGitHub <noreply@github.com>2025-04-11 15:26:55 +0800
commitb3397bacfb85aa824e1257085500551d3026d49a (patch)
treeb0dae71291ff0727179eaa915f75be43a0b18bb7 /llvm/lib/CodeGen/MachineOperand.cpp
parentc3eb6b7e61356aca7ffbcaf962544d3d8fb3713d (diff)
downloadllvm-b3397bacfb85aa824e1257085500551d3026d49a.zip
llvm-b3397bacfb85aa824e1257085500551d3026d49a.tar.gz
llvm-b3397bacfb85aa824e1257085500551d3026d49a.tar.bz2
[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 <fuqiang.fan@mthreads.com>
Diffstat (limited to 'llvm/lib/CodeGen/MachineOperand.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineOperand.cpp8
1 files changed, 6 insertions, 2 deletions
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<ExternalSymbolPseudoSourceValue>(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;
}