[llvm] [IR] Add nowrap flags for trunc instruction (PR #85592)

Nathan Chancellor via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 29 15:56:42 PDT 2024


nathanchance wrote:

I bisected a crash that I see when building the Linux kernel for arm64 to this change.

```
# bad: [a4de589d117a4fd52554da3c61ae6eb26c90a0c8] [InstallAPI] Add support for parsing dSYMs (#86852)
# good: [552c8eb731a1fabef4d81e2a69911506adf39e22] [SLP][NFC]Add a test with the wrong result extension after reduction, NFC.
git bisect start 'a4de589d117a4fd52554da3c61ae6eb26c90a0c8' '552c8eb731a1fabef4d81e2a69911506adf39e22'
# good: [39fe729502006f1b108828b75af8d63a27364f80] [lld-macho] Ignore -no_warn_duplicate_libraries flag (#86303)
git bisect good 39fe729502006f1b108828b75af8d63a27364f80
# good: [219511aee21cc652e1ede0458de4a4a66f04c81c] [APINotes] Make an assert in a std::sort call tolerate self-comparisons
git bisect good 219511aee21cc652e1ede0458de4a4a66f04c81c
# bad: [28760b63bbf9e267713957105a8d17091fb0d20e] Revert "Reapply "[clang][nullability] allow _Nonnull etc on nullable class types (#82705)"" (#87041)
git bisect bad 28760b63bbf9e267713957105a8d17091fb0d20e
# good: [01e02e0b6a15562e241e9ed18b295c66ae20f410] [SLP]Fix PR87011: Do not assume that initial ext/trunc nodes can be represented by bitwidth without analysis.
git bisect good 01e02e0b6a15562e241e9ed18b295c66ae20f410
# good: [e005a09df5b5c7d210ac7cd8cbddb3a4a8663173] [RISCV][TypePromotion] Dont generate truncs if PromotedType is greater than Source Type (#86941)
git bisect good e005a09df5b5c7d210ac7cd8cbddb3a4a8663173
# bad: [235d6841601a9dbea293b8e82b0c994f91f42d76] [C++20] [Modules] [Reduced BMI] Don't record declarations in functions by default
git bisect bad 235d6841601a9dbea293b8e82b0c994f91f42d76
# bad: [7d3924cee30a87a51f9dc04ec843ae6bc3d1c90e] [IR] Add nowrap flags for trunc instruction (#85592)
git bisect bad 7d3924cee30a87a51f9dc04ec843ae6bc3d1c90e
# good: [ba6b2d22af177a72b132cdb8e9350a708f282d2c] [LLDB] Add APFloat helper functions to Scalar class. (#86862)
git bisect good ba6b2d22af177a72b132cdb8e9350a708f282d2c
# first bad commit: [7d3924cee30a87a51f9dc04ec843ae6bc3d1c90e] [IR] Add nowrap flags for trunc instruction (#85592)
```

A trivial C and LLVM IR reproducer:

```c
int __kmalloc_index(long size) {
  if (size <= 4)
    return 1;
  if (size <= 4 * 4)
    return 2;
  asm("");
  __builtin_unreachable();
}
void kmalloc_trace(int *);
void *kmalloc(long size) {
  int index = __kmalloc_index(size);
  kmalloc_trace(&index);
  return 0;
}
int unittest_data_add() {
  extern unsigned char __dtbo_testcases_begin[], __dtbo_testcases_end[];
  int size = __dtbo_testcases_end - __dtbo_testcases_begin;
  void *ret = kmalloc(size + 8);
  if (ret)
    ;
  return 0;
}
```

```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@__dtbo_testcases_begin = external global [0 x i8]

define i32 @__kmalloc_index(i64 %size) {
entry:
  %cmp = icmp slt i64 %size, 0
  br i1 %cmp, label %return, label %if.end

if.end:                                           ; preds = %entry
  %cmp1 = icmp eq i64 %size, 0
  br i1 %cmp1, label %return, label %if.end3

if.end3:                                          ; preds = %if.end
  store volatile i32 0, ptr null, align 4294967296
  unreachable

return:                                           ; preds = %if.end, %entry
  %retval.0 = phi i32 [ 1, %entry ], [ 0, %if.end ]
  ret i32 %retval.0
}

define ptr @kmalloc(i64 %size, ptr %index) {
entry:
  %call = call i32 @__kmalloc_index(i64 %size)
  store i32 %call, ptr %index, align 4
  ret ptr null
}

define i32 @unittest_data_add() {
entry:
  %add = add i32 trunc (i64 sub (i64 0, i64 ptrtoint (ptr @__dtbo_testcases_begin to i64)) to i32), 1
  %conv = sext i32 %add to i64
  %call1 = call ptr @kmalloc(i64 %conv, ptr null)
  ret i32 0
}
```

```
$ clang -O2 -c -o /dev/null unittest.i
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 -O2 -c -o /dev/null unittest.i
1.	<eof> parser at end of file
2.	Optimizer
 #0 0x0000555c136a5e06 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x4087e06)
 #1 0x0000555c136a387e llvm::sys::RunSignalHandlers() (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x408587e)
 #2 0x0000555c1361e6ed CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f3fbb0f0770 (/usr/lib/libc.so.6+0x3c770)
 #4 0x0000555c131e1727 llvm::Operator::hasPoisonGeneratingFlags() const (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3bc3727)
 #5 0x0000555c131e18e9 llvm::Operator::hasPoisonGeneratingFlagsOrMetadata() const (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3bc38e9)
 #6 0x0000555c12a7335f canCreateUndefOrPoison(llvm::Operator const*, UndefPoisonKind, bool) ValueTracking.cpp:0:0
 #7 0x0000555c12a73bca isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind) ValueTracking.cpp:0:0
 #8 0x0000555c12a8f0b5 llvm::Use const* std::__find_if_not<llvm::Use const*, __gnu_cxx::__ops::_Iter_pred<isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind)::$_0>>(llvm::Use const*, llvm::Use const*, __gnu_cxx::__ops::_Iter_pred<isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind)::$_0>) ValueTracking.cpp:0:0
 #9 0x0000555c12a73d77 isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind) ValueTracking.cpp:0:0
#10 0x0000555c12a8f0b5 llvm::Use const* std::__find_if_not<llvm::Use const*, __gnu_cxx::__ops::_Iter_pred<isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind)::$_0>>(llvm::Use const*, llvm::Use const*, __gnu_cxx::__ops::_Iter_pred<isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind)::$_0>) ValueTracking.cpp:0:0
#11 0x0000555c12a73d77 isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind) ValueTracking.cpp:0:0
#12 0x0000555c12a737b7 impliesPoison(llvm::Value const*, llvm::Value const*, unsigned int) ValueTracking.cpp:0:0
#13 0x0000555c137cbfb1 createLogicalOp(llvm::IRBuilderBase&, llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&) SimplifyCFG.cpp:0:0
#14 0x0000555c137da5cb (anonymous namespace)::SimplifyCFGOpt::simplifyCondBranch(llvm::BranchInst*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&) SimplifyCFG.cpp:0:0
#15 0x0000555c137c6805 (anonymous namespace)::SimplifyCFGOpt::run(llvm::BasicBlock*) SimplifyCFG.cpp:0:0
#16 0x0000555c137c3923 llvm::simplifyCFG(llvm::BasicBlock*, llvm::TargetTransformInfo const&, llvm::DomTreeUpdater*, llvm::SimplifyCFGOptions const&, llvm::ArrayRef<llvm::WeakVH>) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x41a5923)
#17 0x0000555c135b996d iterativelySimplifyCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DomTreeUpdater*, llvm::SimplifyCFGOptions const&) SimplifyCFGPass.cpp:0:0
#18 0x0000555c135b9373 simplifyFunctionCFGImpl(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) SimplifyCFGPass.cpp:0:0
#19 0x0000555c135b803f simplifyFunctionCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) SimplifyCFGPass.cpp:0:0
#20 0x0000555c135b7df6 llvm::SimplifyCFGPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3f99df6)
#21 0x0000555c13ecb9ad llvm::detail::PassModel<llvm::Function, llvm::SimplifyCFGPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) BackendUtil.cpp:0:0
#22 0x0000555c131e65e6 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3bc85e6)
#23 0x0000555c1277464d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) X86CodeGenPassBuilder.cpp:0:0
#24 0x0000555c132858a1 llvm::CGSCCToFunctionPassAdaptor::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3c678a1)
#25 0x0000555c14b2246d llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CGSCCToFunctionPassAdaptor, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) PassBuilder.cpp:0:0
#26 0x0000555c132805ce llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3c625ce)
#27 0x0000555c14b08b5d llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) PassBuilder.cpp:0:0
#28 0x0000555c13283aed llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3c65aed)
#29 0x0000555c14b232dd llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) PassBuilder.cpp:0:0
#30 0x0000555c1328250d llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3c6450d)
#31 0x0000555c14b08e0d llvm::detail::PassModel<llvm::Module, llvm::ModuleToPostOrderCGSCCPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilder.cpp:0:0
#32 0x0000555c131e5826 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3bc7826)
#33 0x0000555c14c285ef llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x560a5ef)
#34 0x0000555c14b0fa3d llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilder.cpp:0:0
#35 0x0000555c131e5826 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x3bc7826)
#36 0x0000555c13ec1967 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#37 0x0000555c13eb7c20 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.RCofO58saD/install/llvm-bad/bin/clang-19+0x4899c20)
#38 0x0000555c13edda31 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x48bfa31)
#39 0x0000555c152f57a9 clang::ParseAST(clang::Sema&, bool, bool) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x5cd77a9)
#40 0x0000555c14351a5d clang::FrontendAction::Execute() (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x4d33a5d)
#41 0x0000555c142b949d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x4c9b49d)
#42 0x0000555c1442cc54 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x4e0ec54)
#43 0x0000555c11eb9af0 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x289baf0)
#44 0x0000555c11eb63be ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#45 0x0000555c140eb429 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
#46 0x0000555c1361e426 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x4000426)
#47 0x0000555c140eaab3 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.RCofO58saD/install/llvm-bad/bin/clang-19+0x4accab3)
#48 0x0000555c140a153c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x4a8353c)
#49 0x0000555c140a1a97 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x4a83a97)
#50 0x0000555c140c3819 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x4aa5819)
#51 0x0000555c11eb58ad clang_main(int, char**, llvm::ToolContext const&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x28978ad)
#52 0x0000555c11ec6b76 main (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x28a8b76)
#53 0x00007f3fbb0d9cd0 (/usr/lib/libc.so.6+0x25cd0)
#54 0x00007f3fbb0d9d8a __libc_start_main (/usr/lib/libc.so.6+0x25d8a)
#55 0x0000555c11eb3ca5 _start (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/clang-19+0x2895ca5)
clang: error: clang frontend command failed with exit code 139 (use -v to see invocation)
ClangBuiltLinux clang version 19.0.0git (https://github.com/llvm/llvm-project.git 7d3924cee30a87a51f9dc04ec843ae6bc3d1c90e)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin
clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
```

```
$ opt -O2 -disable-output reduced.ll
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: opt -O2 -disable-output reduced.ll
 #0 0x000055f4ac43a636 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x1e31636)
 #1 0x000055f4ac437f9e llvm::sys::RunSignalHandlers() (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x1e2ef9e)
 #2 0x000055f4ac43b074 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f7a8edde770 (/usr/lib/libc.so.6+0x3c770)
 #4 0x000055f4ac5e93e7 llvm::Operator::hasPoisonGeneratingFlags() const (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x1fe03e7)
 #5 0x000055f4ac5e95a9 llvm::Operator::hasPoisonGeneratingFlagsOrMetadata() const (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x1fe05a9)
 #6 0x000055f4ac768d2f canCreateUndefOrPoison(llvm::Operator const*, UndefPoisonKind, bool) ValueTracking.cpp:0:0
 #7 0x000055f4ac76959a isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind) ValueTracking.cpp:0:0
 #8 0x000055f4ac7867d5 llvm::Use const* std::__find_if_not<llvm::Use const*, __gnu_cxx::__ops::_Iter_pred<isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind)::$_0>>(llvm::Use const*, llvm::Use const*, __gnu_cxx::__ops::_Iter_pred<isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind)::$_0>) ValueTracking.cpp:0:0
 #9 0x000055f4ac769747 isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind) ValueTracking.cpp:0:0
#10 0x000055f4ac7867d5 llvm::Use const* std::__find_if_not<llvm::Use const*, __gnu_cxx::__ops::_Iter_pred<isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind)::$_0>>(llvm::Use const*, llvm::Use const*, __gnu_cxx::__ops::_Iter_pred<isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind)::$_0>) ValueTracking.cpp:0:0
#11 0x000055f4ac769747 isGuaranteedNotToBeUndefOrPoison(llvm::Value const*, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, unsigned int, UndefPoisonKind) ValueTracking.cpp:0:0
#12 0x000055f4ac769187 impliesPoison(llvm::Value const*, llvm::Value const*, unsigned int) ValueTracking.cpp:0:0
#13 0x000055f4acae4931 createLogicalOp(llvm::IRBuilderBase&, llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&) SimplifyCFG.cpp:0:0
#14 0x000055f4acaf307b (anonymous namespace)::SimplifyCFGOpt::simplifyCondBranch(llvm::BranchInst*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&) SimplifyCFG.cpp:0:0
#15 0x000055f4acaded85 (anonymous namespace)::SimplifyCFGOpt::run(llvm::BasicBlock*) SimplifyCFG.cpp:0:0
#16 0x000055f4acadbea3 llvm::simplifyCFG(llvm::BasicBlock*, llvm::TargetTransformInfo const&, llvm::DomTreeUpdater*, llvm::SimplifyCFGOptions const&, llvm::ArrayRef<llvm::WeakVH>) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x24d2ea3)
#17 0x000055f4ad4731fd iterativelySimplifyCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DomTreeUpdater*, llvm::SimplifyCFGOptions const&) SimplifyCFGPass.cpp:0:0
#18 0x000055f4ad472c03 simplifyFunctionCFGImpl(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) SimplifyCFGPass.cpp:0:0
#19 0x000055f4ad47180f simplifyFunctionCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) SimplifyCFGPass.cpp:0:0
#20 0x000055f4ad4715c6 llvm::SimplifyCFGPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x2e685c6)
#21 0x000055f4adf2082d llvm::detail::PassModel<llvm::Function, llvm::SimplifyCFGPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#22 0x000055f4ac632d16 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x2029d16)
#23 0x000055f4ada9781d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) X86CodeGenPassBuilder.cpp:0:0
#24 0x000055f4adce5651 llvm::CGSCCToFunctionPassAdaptor::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x36dc651)
#25 0x000055f4adf2664d llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CGSCCToFunctionPassAdaptor, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) PassBuilderPipelines.cpp:0:0
#26 0x000055f4adce037e llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x36d737e)
#27 0x000055f4adf3303d llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) PassBuilderPipelines.cpp:0:0
#28 0x000055f4adce389d llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x36da89d)
#29 0x000055f4adf58a1d llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) Inliner.cpp:0:0
#30 0x000055f4adce22bd llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x36d92bd)
#31 0x000055f4adf290bd llvm::detail::PassModel<llvm::Module, llvm::ModuleToPostOrderCGSCCPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
#32 0x000055f4ac6317f6 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x20287f6)
#33 0x000055f4adf5577f llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x394c77f)
#34 0x000055f4adf26a7d llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
#35 0x000055f4ac6317f6 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x20287f6)
#36 0x000055f4adeb5914 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x38ac914)
#37 0x000055f4ac3ffa45 optMain (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x1df6a45)
#38 0x00007f7a8edc7cd0 (/usr/lib/libc.so.6+0x25cd0)
#39 0x00007f7a8edc7d8a __libc_start_main (/usr/lib/libc.so.6+0x25d8a)
#40 0x000055f4ac3f92e5 _start (/home/nathan/tmp/cvise.RCofO58saD/install/llvm-bad/bin/opt+0x1df02e5)
```

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


More information about the llvm-commits mailing list