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

via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 22 11:05:41 PDT 2024


================
@@ -624,6 +643,13 @@ void Instruction::andIRFlags(const Value *V) {
     }
   }
 
+  if (auto *PNWI = dyn_cast<PossiblyNoWrapInst>(V)) {
+    if (isa<PossiblyNoWrapInst>(this)) {
+      setHasNoSignedWrap(hasNoSignedWrap() && PNWI->hasNoSignedWrap());
+      setHasNoUnsignedWrap(hasNoUnsignedWrap() && PNWI->hasNoUnsignedWrap());
----------------
elhewaty wrote:

buy following the back trace produced I reached [here](https://llvm.org/doxygen/GVNSink_8cpp_source.html#l00764), [here](https://llvm.org/doxygen/SimplifyCFG_8cpp_source.html#l01591), [here](https://llvm.org/doxygen/Transforms_2Utils_2Local_8cpp_source.html#l03383).

sample 
```
opt: /media/mohamed/Local-Disk/open-source/NEW/llvm-project/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From*) [with To = llvm::OverflowingBinaryOperator; From = const llvm::Instruction]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /media/mohamed/Local-Disk/open-source/NEW/build/bin/opt -passes=gvn -S
 #0 0x00005ced016c8010 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x16c8010)
 #1 0x00005ced016c504f llvm::sys::RunSignalHandlers() (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x16c504f)
 #2 0x00005ced016c51a5 SignalHandler(int) Signals.cpp:0:0
 #3 0x000072bfe1c42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x000072bfe1c969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x000072bfe1c969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x000072bfe1c969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x000072bfe1c42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x000072bfe1c287f3 abort ./stdlib/abort.c:81:7
 #9 0x000072bfe1c2871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000072bfe1c39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00005ced019002cb (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x19002cb)
#12 0x00005ced01906421 llvm::Instruction::andIRFlags(llvm::Value const*) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x1906421)
#13 0x00005ced01e46c9b llvm::patchReplacementInstruction(llvm::Instruction*, llvm::Value*) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x1e46c9b)
#14 0x00005ced02818944 llvm::GVNPass::processInstruction(llvm::Instruction*) (.part.0) GVN.cpp:0:0
#15 0x00005ced02818d7a llvm::GVNPass::processBlock(llvm::BasicBlock*) (.part.0) GVN.cpp:0:0
#16 0x00005ced02819498 llvm::GVNPass::iterateOnFunction(llvm::Function&) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x2819498)
#17 0x00005ced0281984e llvm::GVNPass::runImpl(llvm::Function&, llvm::AssumptionCache&, llvm::DominatorTree&, llvm::TargetLibraryInfo const&, llvm::AAResults&, llvm::MemoryDependenceResults*, llvm::LoopInfo&, llvm::OptimizationRemarkEmitter*, llvm::MemorySSA*) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x281984e)
#18 0x00005ced0281a73a llvm::GVNPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x281a73a)
#19 0x00005ced02fa1e36 llvm::detail::PassModel<llvm::Function, llvm::GVNPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#20 0x00005ced0197d3d1 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x197d3d1)
#21 0x00005ced02d6b2f6 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
#22 0x00005ced0197c0cb llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x197c0cb)
#23 0x00005ced02d6c706 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) X86CodeGenPassBuilder.cpp:0:0
#24 0x00005ced01979f41 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x1979f41)
#25 0x00005ced02e68315 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) (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x2e68315)
#26 0x00005ced0169ff36 optMain (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x169ff36)
#27 0x000072bfe1c29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#28 0x000072bfe1c29e40 call_init ./csu/../csu/libc-start.c:128:20
#29 0x000072bfe1c29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#30 0x00005ced01690ee5 _start (/media/mohamed/Local-Disk/open-source/NEW/build/bin/opt+0x1690ee5)
FileCheck error: '<stdin>' is empty.
```

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


More information about the llvm-commits mailing list