[llvm] [SelectionDAG] Treat CopyFromReg as freezing the value (PR #85932)

David Spickett via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 29 01:51:11 PDT 2024


DavidSpickett wrote:

I have had to revert this due to a test suite failure when compiling for AArch64 Scalable Vectors (SVE), for both specific vector lengths and length agnostic code.

```
clang: ../llvm/llvm/include/llvm/CodeGen/ValueTypes.h:307: MVT llvm::EVT::getSimpleVT() const: Assertion `isSimple() && "Expected a SimpleValueType!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.  Program arguments: /home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang -DNDEBUG -mcpu=neoverse-512tvb -mllvm -scalable-vectorization=preferred -mllvm -treat-scalable-fixed-error-as-warning=false -O3 -Wno-implicit-int -Wno-int-conversion -Wno-implicit-function-declaration -w -MD -MT SingleSource/Regression/C/gcc-c-torture/execute/CMakeFiles/GCC-C-execute-regstack-1.dir/regstack-1.c.o -MF CMakeFiles/GCC-C-execute-regstack-1.dir/regstack-1.c.o.d -o CMakeFiles/GCC-C-execute-regstack-1.dir/regstack-1.c.o -c /home/tcwg-buildbot/worker/clang-aarch64-sve-vla/test/test-suite/SingleSource/Regression/C/gcc-c-torture/execute/regstack-1.c
1.  <eof> parser at end of file
2.  Code generation
3.  Running pass 'Function Pass Manager' on module '/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/test/test-suite/SingleSource/Regression/C/gcc-c-torture/execute/regstack-1.c'.
4.  Running pass 'AArch64 Instruction Selection' on function '@main'
<...>
#10 0x0000aaaac4fa66e4 (anonymous namespace)::DAGCombiner::combine(llvm::SDNode*) DAGCombiner.cpp:0:0
#11 0x0000aaaac4fa40b0 llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::AAResults*, llvm::CodeGenOptLevel) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x87140b0)
#12 0x0000aaaac5110e18 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x8880e18)
#13 0x0000aaaac510f84c llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x887f84c)
#14 0x0000aaaac510c8cc llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x887c8cc)
#15 0x0000aaaac3532350 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x6ca2350)
#16 0x0000aaaac3a526e4 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x71c26e4)
#17 0x0000aaaac3a5a48c llvm::FPPassManager::runOnModule(llvm::Module&) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x71ca48c)
#18 0x0000aaaac3a53080 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x71c3080)
#19 0x0000aaaac4794410 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x7f04410)
#20 0x0000aaaac47b8a50 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1.install/bin/clang+0x7f28a50)
```
Reproducer: [sve_repro.tar.gz](https://github.com/llvm/llvm-project/files/15146873/sve_repro.tar.gz)

This should reproduce on any machine as long as you target AArch64 with SVE. Our AArch64 builder without SVE did not have this problem.


https://github.com/llvm/llvm-project/pull/85932


More information about the llvm-commits mailing list