-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[CodeGen][LLVM] Fix MachineOperand::print crash when TII is nullptr. #135170
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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 <[email protected]>
@llvm/pr-subscribers-backend-amdgpu Author: z (fanfuqiang) ChangesThis crash will caused if run this testcase: When build the SDNode, precisely build the SDNode for this ir:
If want call the dump function of the new SDNode in the gdb environment like this: p N->dump() The llvm will crash. All of these is because calling Full diff: https://github.com/llvm/llvm-project/pull/135170.diff 1 Files Affected:
diff --git a/llvm/lib/CodeGen/MachineOperand.cpp b/llvm/lib/CodeGen/MachineOperand.cpp
index 231d66607b700..0d251697f2567 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;
}
|
…lvm#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 <[email protected]>
…lvm#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 <[email protected]>
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:
If want call the dump function of the new SDNode in the gdb environment like this:
p N->dump()
The llvm will crash.
All of these is because calling
dump()
will cause the callingMachineMemOperand::print()
with the argument value for the
TII
is nullptr.And the llvm/lib/CodeGen/MachineOperand.cpp#L1235 is a derefrence of TII.