[llvm] [AMDGPU][Scheduler] Refactor ArchVGPR rematerialization during scheduling (PR #125885)
Jorge Gorbe Moya via llvm-commits
llvm-commits at lists.llvm.org
Fri May 9 17:01:06 PDT 2025
slackito wrote:
I get sanitizer errors when building at this commit with `-DLLVM_USE_SANITIZER=Address` and then running `ninja check-llvm-codegen-amdgpu`.
Here's the asan error:
```
==3331703==ERROR: AddressSanitizer: use-after-poison on address 0x7d39064ec8d4 at pc 0x55b90dc9ac25 bp 0x7ffff9c71550 sp 0x7ffff9c71548 16:55:29 [69/2503]
READ of size 4 at 0x7d39064ec8d4 thread T0
#0 0x55b90dc9ac24 in llvm::MachineInstr::getFlag(llvm::MachineInstr::MIFlag) const /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/CodeGen/MachineInstr.h:409:12
#1 0x55b90dc9ac24 in llvm::MachineInstr::isBundledWithPred() const /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/CodeGen/MachineInstr.h:487:43
#2 0x55b90dc9ac24 in llvm::SlotIndexes::removeMachineInstrFromMaps(llvm::MachineInstr&, bool) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/SlotIndexes.cpp:129:3
#3 0x55b909936baa in llvm::LiveIntervals::RemoveMachineInstrFromMaps(llvm::MachineInstr&) /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/CodeGen/LiveIntervals.h:296:14
#4 0x55b909936baa in llvm::PreRARematStage::rematerialize() /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp:2090:14
#5 0x55b9099314ef in llvm::PreRARematStage::initGCNSchedStage() /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp:1117:3
#6 0x55b90992e90a in llvm::GCNScheduleDAGMILive::runSchedStages() /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp:966:17
#7 0x55b90d79d811 in llvm::impl_detail::MachineSchedulerBase::scheduleRegions(llvm::ScheduleDAGInstrs&, bool) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/MachineScheduler.cpp:825:13
#8 0x55b90d79b8f3 in llvm::impl_detail::MachineSchedulerImpl::run(llvm::MachineFunction&, llvm::TargetMachine const&, llvm::impl_detail::MachineSchedulerImpl::RequiredAnalyses const&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/
MachineScheduler.cpp:484:3
#9 0x55b90d7cdd43 in (anonymous namespace)::MachineSchedulerLegacy::runOnMachineFunction(llvm::MachineFunction&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/MachineScheduler.cpp:576:15
#10 0x55b90d5d5377 in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:10
#11 0x55b90e2d524a in llvm::FPPassManager::runOnFunction(llvm::Function&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/IR/LegacyPassManager.cpp:1406:27
#12 0x55b90c933051 in (anonymous namespace)::CGPassManager::RunPassOnSCC(llvm::Pass*, llvm::CallGraphSCC&, llvm::CallGraph&, bool&, bool&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Analysis/CallGraphSCCPass.cpp:180:25
#13 0x55b90c933051 in (anonymous namespace)::CGPassManager::RunAllPassesOnSCC(llvm::CallGraphSCC&, llvm::CallGraph&, bool&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Analysis/CallGraphSCCPass.cpp:469:9
#14 0x55b90c933051 in (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Analysis/CallGraphSCCPass.cpp:534:18
#15 0x55b90e2d61be in (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/IR/LegacyPassManager.cpp:1521:27
#16 0x55b90e2d61be in llvm::legacy::PassManagerImpl::run(llvm::Module&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/IR/LegacyPassManager.cpp:539:44
#17 0x55b90870ff3e in compileModule(char**, llvm::LLVMContext&) /usr/local/google/home/jgorbe/code/llvm/llvm/tools/llc/llc.cpp:753:8
#18 0x55b90870af9e in main /usr/local/google/home/jgorbe/code/llvm/llvm/tools/llc/llc.cpp:400:22
#19 0x7f2907033ca7 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#20 0x7f2907033d64 in __libc_start_main csu/../csu/libc-start.c:360:3
#21 0x55b908622930 in _start (/dev/shm/jgorbe-code/lldb-build/bin/llc+0x905b930)
0x7d39064ec8d4 is located 4052 bytes inside of 4096-byte region [0x7d39064eb900,0x7d39064ec900)
allocated by thread T0 here:
#0 0x55b908709712 in operator new(unsigned long, std::align_val_t, std::nothrow_t const&) /usr/local/google/home/jgorbe/forks/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:104:3
#1 0x55b90faa24af in llvm::allocate_buffer(unsigned long, unsigned long) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Support/MemAlloc.cpp:16:18
#2 0x55b908bef425 in llvm::MallocAllocator::Allocate(unsigned long, unsigned long) /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/Support/AllocatorBase.h:92:12
#3 0x55b908bef425 in llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul, 128ul>::StartNewSlab() /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/Support/Allocator.h:346:42
#4 0x55b908bef1a9 in llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul, 128ul>::AllocateSlow(unsigned long, unsigned long, llvm::Align) /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/Support/Allocator.h:202:5
#5 0x55b90d5b6625 in llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul, 128ul>::Allocate(unsigned long, unsigned long) /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/Support/Allocator.h:216:12
#6 0x55b90d5b6625 in llvm::MachineInstr* llvm::Recycler<llvm::MachineInstr, 80ul, 8ul>::Allocate<llvm::MachineInstr, llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul, 128ul>>(llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator,
4096ul, 4096ul, 128ul>&) /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/Support/Recycler.h:95:57
#7 0x55b90d5b6625 in llvm::MachineFunction::CreateMachineInstr(llvm::MCInstrDesc const&, llvm::DebugLoc, bool) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/MachineFunction.cpp:429:35
#8 0x55b908ca3454 in llvm::BuildMI(llvm::MachineBasicBlock&, llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, llvm::MIMetadata const&, llvm::MCInstrDesc const&, llvm::Register) /usr/local/google/home/jgorbe/code/llvm/llvm/include
/llvm/CodeGen/MachineInstrBuilder.h:397:25
#9 0x55b90f3f0a78 in llvm::BuildMI(llvm::MachineBasicBlock*, llvm::MIMetadata const&, llvm::MCInstrDesc const&, llvm::Register) /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/CodeGen/MachineInstrBuilder.h:498:10
#10 0x55b90f3f0a78 in llvm::FunctionLoweringInfo::set(llvm::Function const&, llvm::MachineFunction&, llvm::SelectionDAG*) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp:307:11
#11 0x55b90f6afb74 in llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:579:13
#12 0x55b9094a470a in llvm::AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp:128:28
#13 0x55b90f6a9adf in llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:374:20
#14 0x55b90d5d5377 in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:10
#15 0x55b90e2d524a in llvm::FPPassManager::runOnFunction(llvm::Function&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/IR/LegacyPassManager.cpp:1406:27
#16 0x55b90c933051 in (anonymous namespace)::CGPassManager::RunPassOnSCC(llvm::Pass*, llvm::CallGraphSCC&, llvm::CallGraph&, bool&, bool&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Analysis/CallGraphSCCPass.cpp:180:25
#17 0x55b90c933051 in (anonymous namespace)::CGPassManager::RunAllPassesOnSCC(llvm::CallGraphSCC&, llvm::CallGraph&, bool&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Analysis/CallGraphSCCPass.cpp:469:9
#18 0x55b90c933051 in (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/Analysis/CallGraphSCCPass.cpp:534:18
#19 0x55b90e2d61be in (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/IR/LegacyPassManager.cpp:1521:27
#20 0x55b90e2d61be in llvm::legacy::PassManagerImpl::run(llvm::Module&) /usr/local/google/home/jgorbe/code/llvm/llvm/lib/IR/LegacyPassManager.cpp:539:44
#21 0x55b90870ff3e in compileModule(char**, llvm::LLVMContext&) /usr/local/google/home/jgorbe/code/llvm/llvm/tools/llc/llc.cpp:753:8
#22 0x55b90870af9e in main /usr/local/google/home/jgorbe/code/llvm/llvm/tools/llc/llc.cpp:400:22
#23 0x7f2907033ca7 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
SUMMARY: AddressSanitizer: use-after-poison /usr/local/google/home/jgorbe/code/llvm/llvm/include/llvm/CodeGen/MachineInstr.h:409:12 in llvm::MachineInstr::getFlag(llvm::MachineInstr::MIFlag) const
Shadow bytes around the buggy address:
0x7d39064ec600: f7 00 00 00 00 00 00 00 00 00 00 f7 00 00 00 00
0x7d39064ec680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x7d39064ec700: 00 00 00 00 00 00 00 00 00 00 00 00 f7 00 00 00
0x7d39064ec780: 00 00 00 00 00 00 00 f7 00 00 00 00 00 00 00 00
0x7d39064ec800: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 00 00 00 00
=>0x7d39064ec880: 00 00 00 00 f7 f7 f7 f7 f7 f7[f7]f7 f7 f7 f7 f7
0x7d39064ec900: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x7d39064ec980: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x7d39064eca00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x7d39064eca80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x7d39064ecb00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==3331703==ABORTING
FileCheck error: '<stdin>' is empty.
FileCheck command line: /dev/shm/jgorbe-code/lldb-build/bin/FileCheck -check-prefix=GCN -check-prefix=SI /dev/shm/jgorbe-code/llvm/llvm/test/CodeGen/AMDGPU/vgpr-spill-emergency-stack-slot.ll
```
https://github.com/llvm/llvm-project/pull/125885
More information about the llvm-commits
mailing list