[llvm] [LIR][SCEVExpander] Restore original flags when aborting transform (PR #82362)

Nathan Chancellor via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 22 10:57:53 PST 2024


nathanchance wrote:

This patch causes a crash when building the Linux kernel for RISC-V. A trivial C reproducer from `cvise`, I tried to create an LLVM IR reproducer but `opt -O3 -disable-output` does not crash for me.

```c
struct altera_config {
  char action;
} altera_execute_astate;
char *altera_execute_p;
unsigned altera_execute_pc;
int altera_execute_args[3];
int altera_execute_arg_count, altera_execute_i;
void _printk(char *, ...);
int altera_execute() {
  struct altera_config aconf = altera_execute_astate;
  int opcode;
  if (aconf.action) {
    opcode = altera_execute_p[altera_execute_pc];
    _printk("", opcode);
    altera_execute_arg_count = opcode >> 6;
    for (altera_execute_i = 0; altera_execute_i < altera_execute_arg_count;
         ++altera_execute_i) {
      altera_execute_args[altera_execute_i] =
          altera_execute_p[altera_execute_pc];
      altera_execute_pc += 4;
    }
  }
  return 4;
}
```

```
$ clang --target=riscv64-linux-gnu -O2 -c -o /dev/null altera.i
While deleting: i64 %wide.trip.count
An asserting value handle still pointed to this value!
UNREACHABLE executed at /home/nathan/tmp/cvise.I0yyI2BCYW/src/llvm/lib/IR/Value.cpp:1247!
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: clang --target=riscv64-linux-gnu -O2 -c -o /dev/null altera.i
1.	<eof> parser at end of file
2.	Code generation
3.	Running pass 'Function Pass Manager' on module 'altera.i'.
4.	Running pass 'Loop Pass Manager' on function '@altera_execute'
5.	Running pass 'Loop Strength Reduction' on basic block '%for.body'
 #0 0x0000000003232e5c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3232e5c)
 #1 0x0000000003230d68 llvm::sys::RunSignalHandlers() (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3230d68)
 #2 0x00000000031b8004 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x0000ffff90cb77a0 (linux-vdso.so.1+0x7a0)
 #4 0x0000ffff90677c40 __pthread_kill_implementation (/lib64/libc.so.6+0x97c40)
 #5 0x0000ffff90625940 gsignal (/lib64/libc.so.6+0x45940)
 #6 0x0000ffff90610288 abort (/lib64/libc.so.6+0x30288)
 #7 0x00000000031be22c llvm::install_out_of_memory_new_handler() (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x31be22c)
 #8 0x0000000002e007d0 llvm::ValueHandleBase::ValueIsDeleted(llvm::Value*) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x2e007d0)
 #9 0x0000000002e00bc8 llvm::Value::~Value() (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x2e00bc8)
#10 0x0000000002e008a8 llvm::Value::deleteValue() (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x2e008a8)
#11 0x0000000002d7b01c llvm::Instruction::eraseFromParent() (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x2d7b01c)
#12 0x00000000032b6f90 llvm::RecursivelyDeleteTriviallyDeadInstructions(llvm::SmallVectorImpl<llvm::WeakTrackingVH>&, llvm::TargetLibraryInfo const*, llvm::MemorySSAUpdater*, std::function<void (llvm::Value*)>) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x32b6f90)
#13 0x00000000032b67d4 llvm::RecursivelyDeleteTriviallyDeadInstructions(llvm::Value*, llvm::TargetLibraryInfo const*, llvm::MemorySSAUpdater*, std::function<void (llvm::Value*)>) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x32b67d4)
#14 0x00000000032b7760 llvm::RecursivelyDeleteDeadPHINode(llvm::PHINode*, llvm::TargetLibraryInfo const*, llvm::MemorySSAUpdater*) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x32b7760)
#15 0x0000000003250720 llvm::DeleteDeadPHIs(llvm::BasicBlock*, llvm::TargetLibraryInfo const*, llvm::MemorySSAUpdater*) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3250720)
#16 0x00000000030be80c ReduceLoopStrength(llvm::Loop*, llvm::IVUsers&, llvm::ScalarEvolution&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::TargetTransformInfo const&, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::MemorySSA*) LoopStrengthReduce.cpp:0:0
#17 0x00000000030eae14 (anonymous namespace)::LoopStrengthReduce::runOnLoop(llvm::Loop*, llvm::LPPassManager&) LoopStrengthReduce.cpp:0:0
#18 0x000000000260d838 llvm::LPPassManager::runOnFunction(llvm::Function&) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x260d838)
#19 0x0000000002dabbf0 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x2dabbf0)
#20 0x0000000002db37b8 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x2db37b8)
#21 0x0000000002dac540 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x2dac540)
#22 0x000000000395d8ec 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/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x395d8ec)
#23 0x000000000397cc60 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x397cc60)
#24 0x0000000004af3440 clang::ParseAST(clang::Sema&, bool, bool) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x4af3440)
#25 0x0000000003cf3104 clang::FrontendAction::Execute() (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3cf3104)
#26 0x0000000003c7a404 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3c7a404)
#27 0x0000000003dbe2ac clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3dbe2ac)
#28 0x000000000208fab0 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x208fab0)
#29 0x000000000208c438 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#30 0x0000000003b33ddc void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) Job.cpp:0:0
#31 0x00000000031b7d58 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x31b7d58)
#32 0x0000000003b33580 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3b33580)
#33 0x0000000003afc66c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3afc66c)
#34 0x0000000003afc8bc clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3afc8bc)
#35 0x0000000003b15be8 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x3b15be8)
#36 0x000000000208b88c clang_main(int, char**, llvm::ToolContext const&) (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x208b88c)
#37 0x000000000209a094 main (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x209a094)
#38 0x0000ffff906109dc __libc_start_call_main (/lib64/libc.so.6+0x309dc)
#39 0x0000ffff90610abc __libc_start_main at GLIBC_2.17 (/lib64/libc.so.6+0x30abc)
#40 0x0000000002088df0 _start (/home/nathan/tmp/cvise.I0yyI2BCYW/install/llvm-bad/bin/clang-19+0x2088df0)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
ClangBuiltLinux clang version 19.0.0git (https://github.com/llvm/llvm-project.git 07292b7203e31fb90d9180bfccde0d4e84be2245)
Target: riscv64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/nathan/tmp/cvise.I0yyI2BCYW/cvise/../install/llvm-bad/bin
clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
```

```
# bad: [307409a8872ff27339d5d5c6a7e7777254972f34] [flang] Fix warning fix
# good: [ff4d6c64ee4269e4a9b67a4dae7e0b82ae1c3419] Fix llvm-x86_64-debian-dylib buildbot
git bisect start '307409a8872ff27339d5d5c6a7e7777254972f34' 'ff4d6c64ee4269e4a9b67a4dae7e0b82ae1c3419'
# bad: [0a518db99e0cffcdbb4cae73e27da87edbb25170] [InstallAPI] Set InstallAPI as a standalone tool instead of CC1 action (#82293)
git bisect bad 0a518db99e0cffcdbb4cae73e27da87edbb25170
# bad: [3cb4f62de0eba62edd730d0ed80fd90d2826763d] [X86] Regenerate vector tests to add missing avx512 constant broadcast comments
git bisect bad 3cb4f62de0eba62edd730d0ed80fd90d2826763d
# good: [04fbc461e0fd1c6f2b014761e9c03ca80d17b33b] [clang-format] Fix RemoveSemicolon for empty functions (#82278)
git bisect good 04fbc461e0fd1c6f2b014761e9c03ca80d17b33b
# good: [4725993f1a812c86b9ad79d229a015d0216ff550] [clang][dataflow] Correctly handle `InitListExpr` of union type. (#82348)
git bisect good 4725993f1a812c86b9ad79d229a015d0216ff550
# bad: [91f11611337dde9a8e0a5e19240f6bb4671922c6] [mlir] expose transform interpreter to Python (#82365)
git bisect bad 91f11611337dde9a8e0a5e19240f6bb4671922c6
# bad: [1ff1e823836e6ed741c69681a2af9f1c3871e8c2] [AArch64][GlobalISel] Pre-Commit Tests for Refactor BITCAST
git bisect bad 1ff1e823836e6ed741c69681a2af9f1c3871e8c2
# bad: [07292b7203e31fb90d9180bfccde0d4e84be2245] [LIR][SCEVExpander] Restore original flags when aborting transform (#82362)
git bisect bad 07292b7203e31fb90d9180bfccde0d4e84be2245
# good: [0c13a896dfc930a09e082ad83070e223cfd9a4f9] [mlir][docs] Fix broken docs (#82308)
git bisect good 0c13a896dfc930a09e082ad83070e223cfd9a4f9
# first bad commit: [07292b7203e31fb90d9180bfccde0d4e84be2245] [LIR][SCEVExpander] Restore original flags when aborting transform (#82362)
```

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


More information about the llvm-commits mailing list