diff options
author | z <feqin1023@gmail.com> | 2025-04-11 15:26:55 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-11 15:26:55 +0800 |
commit | b3397bacfb85aa824e1257085500551d3026d49a (patch) | |
tree | b0dae71291ff0727179eaa915f75be43a0b18bb7 /llvm/lib/CodeGen/MachineOperand.cpp | |
parent | c3eb6b7e61356aca7ffbcaf962544d3d8fb3713d (diff) | |
download | llvm-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.cpp | 8 |
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; } |