This is an archive of the discontinued LLVM Phabricator instance.

Re-land "[AMDGPU] Define data layout entries for buffers""
ClosedPublic

Authored by krzysz00 on May 3 2023, 11:52 AM.

Details

Summary

Re-land D145441 with data layout upgrade code fixed to not break OpenMP.

This reverts commit 3f2fbe92d0f40bcb46db7636db9ec3f7e7899b27.

Diff Detail

Event Timeline

krzysz00 created this revision.May 3 2023, 11:52 AM
krzysz00 requested review of this revision.May 3 2023, 11:52 AM
Herald added a reviewer: sstefan1. · View Herald Transcript
Herald added projects: Restricted Project, Restricted Project. · View Herald Transcript
This revision was not accepted when it landed; it landed in state Needs Review.May 3 2023, 12:44 PM
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
foad added a comment.May 5 2023, 8:46 AM

Hi, with the new datalayout we're hitting this crash:

; RUN: opt -passes=indvars -S < %s

target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8"
target triple = "amdgcn--amdpal"

define void @f(ptr addrspace(7) %arg) {
bb:
  br label %bb1
bb1:
  %i = getelementptr i32, ptr addrspace(7) %arg, i32 2
  br i1 false, label %bb2, label %bb1
bb2:
  br label %bb3
bb3:
  %i4 = load i32, ptr addrspace(7) %i, align 4
  br label %bb3
}
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /home/jayfoad2/llvm-release/bin/opt -passes=indvars -S
 #0 0x00000000063a25e7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/jayfoad2/llvm-release/bin/opt+0x63a25e7)
 #1 0x00000000063a049e llvm::sys::RunSignalHandlers() (/home/jayfoad2/llvm-release/bin/opt+0x63a049e)
 #2 0x00000000063a2c8a SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fdb0be42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x0000000005b0b80f llvm::EVT::isExtendedVector() const (/home/jayfoad2/llvm-release/bin/opt+0x5b0b80f)
 #5 0x0000000005a59bf9 llvm::TargetLoweringBase::getTypeConversion(llvm::LLVMContext&, llvm::EVT) const (/home/jayfoad2/llvm-release/bin/opt+0x5a59bf9)
 #6 0x000000000423cf63 llvm::BasicTTIImplBase<llvm::GCNTTIImpl>::getTypeLegalizationCost(llvm::Type*) const AMDGPUTargetMachine.cpp:0:0
 #7 0x0000000004305117 llvm::GCNTTIImpl::getArithmeticInstrCost(unsigned int, llvm::Type*, llvm::TargetTransformInfo::TargetCostKind, llvm::TargetTransformInfo::OperandValueInfo, llvm::TargetTransformInfo::OperandValueInfo, llvm::ArrayRef<llvm::Value const*>, llvm::Instruction const*) AMDGPUTargetTransformInfo.cpp:0:0
 #8 0x0000000005549453 llvm::TargetTransformInfo::getArithmeticInstrCost(unsigned int, llvm::Type*, llvm::TargetTransformInfo::TargetCostKind, llvm::TargetTransformInfo::OperandValueInfo, llvm::TargetTransformInfo::OperandValueInfo, llvm::ArrayRef<llvm::Value const*>, llvm::Instruction const*) const (/home/jayfoad2/llvm-release/bin/opt+0x5549453)
 #9 0x00000000064b5695 llvm::SCEVExpander::isHighCostExpansionHelper(llvm::SCEVOperand const&, llvm::Loop*, llvm::Instruction const&, llvm::InstructionCost&, unsigned int, llvm::TargetTransformInfo const&, llvm::SmallPtrSetImpl<llvm::SCEV const*>&, llvm::SmallVectorImpl<llvm::SCEVOperand>&) (/home/jayfoad2/llvm-release/bin/opt+0x64b5695)
#10 0x0000000006475d2b llvm::SCEVExpander::isHighCostExpansion(llvm::ArrayRef<llvm::SCEV const*>, llvm::Loop*, unsigned int, llvm::TargetTransformInfo const*, llvm::Instruction const*) LoopUnrollRuntime.cpp:0:0
#11 0x00000000064813ab llvm::rewriteLoopExitValues(llvm::Loop*, llvm::LoopInfo*, llvm::TargetLibraryInfo*, llvm::ScalarEvolution*, llvm::TargetTransformInfo const*, llvm::SCEVExpander&, llvm::DominatorTree*, llvm::ReplaceExitVal, llvm::SmallVector<llvm::WeakTrackingVH, 16u>&) (/home/jayfoad2/llvm-release/bin/opt+0x64813ab)
#12 0x0000000006a71b09 (anonymous namespace)::IndVarSimplify::run(llvm::Loop*) IndVarSimplify.cpp:0:0
#13 0x0000000006a70000 llvm::IndVarSimplifyPass::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/home/jayfoad2/llvm-release/bin/opt+0x6a70000)
#14 0x00000000065bef0d llvm::detail::PassModel<llvm::Loop, llvm::IndVarSimplifyPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) PassBuilder.cpp:0:0
#15 0x000000000679b933 std::optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::Loop, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>>(llvm::Loop&, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) (/home/jayfoad2/llvm-release/bin/opt+0x679b933)
#16 0x000000000679b5a2 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithoutLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/home/jayfoad2/llvm-release/bin/opt+0x679b5a2)
#17 0x000000000679ab88 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/home/jayfoad2/llvm-release/bin/opt+0x679ab88)
#18 0x000000000659ddbd llvm::detail::PassModel<llvm::Loop, llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) PassBuilder.cpp:0:0
#19 0x000000000679c97f llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/jayfoad2/llvm-release/bin/opt+0x679c97f)
#20 0x00000000065be45d llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#21 0x0000000005d408a4 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/jayfoad2/llvm-release/bin/opt+0x5d408a4)
#22 0x000000000423519d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) AMDGPUTargetMachine.cpp:0:0
#23 0x0000000005d4473e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/jayfoad2/llvm-release/bin/opt+0x5d4473e)
#24 0x0000000004234f4d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) AMDGPUTargetMachine.cpp:0:0
#25 0x0000000005d3fab4 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/jayfoad2/llvm-release/bin/opt+0x5d3fab4)
#26 0x0000000003dc9b1b llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/home/jayfoad2/llvm-release/bin/opt+0x3dc9b1b)
#27 0x0000000003dd9149 main (/home/jayfoad2/llvm-release/bin/opt+0x3dd9149)
#28 0x00007fdb0be29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#29 0x00007fdb0be29e40 call_init ./csu/../csu/libc-start.c:128:20
#30 0x00007fdb0be29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#31 0x0000000003dc2ee5 _start (/home/jayfoad2/llvm-release/bin/opt+0x3dc2ee5)
Segmentation fault (core dumped)

From a quick skim of the backtrace, I think this comes down to the fact that there isn't a defined way to stick a p7 into registers (or, equivalently, there's no MVT::i160) and that getting said pointers to that point was supposed to never happen (in that they were meant to expand to {ptr addrspace(8), i32} or similar at the IR level.)

It looks like there's code up in opt that's actually querying those same hooks that I didn't know about. I'll go looking for a workaround.