[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