[llvm] [InstCombine] Simplification for (-a * b) / (a * b). (PR #71768)

via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 15 01:17:13 PST 2023


================
@@ -1544,6 +1544,14 @@ Instruction *InstCombinerImpl::visitSDiv(BinaryOperator &I) {
     }
   }
 
+  // -X / X --> X == INT_MIN ? 1 : -1
+  if ((match(Op0, m_Sub(m_Zero(), m_Value(X))) && match(Op1, m_Specific(X)))) {
----------------
Z572 wrote:

```
FAIL: LLVM :: Transforms/InstCombine/div.ll (194 of 1517)
******************** TEST 'LLVM :: Transforms/InstCombine/div.ll' FAILED ********************
Exit Code: 2

Command Output (stderr):
--
RUN: at line 2: /path/build/bin/opt < /path/llvm/test/Transforms/InstCombine/div.ll -passes=instcombine -S | /path/build/bin/FileCheck /path/llvm/test/Transforms/InstCombine/div.ll
+ /path/build/bin/opt -passes=instcombine -S
+ /path/build/bin/FileCheck /path/llvm/test/Transforms/InstCombine/div.ll
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /path/build/bin/opt -passes=instcombine -S
 #0 0x00007fbb6799fad6 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/path/build/bin/../lib/libLLVMSupport.so.18git+0x19fad6)
 #1 0x00007fbb6799d4de llvm::sys::RunSignalHandlers() (/path/build/bin/../lib/libLLVMSupport.so.18git+0x19d4de)
 #2 0x00007fbb679a01e4 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fbb6725c710 (/usr/lib/libc.so.6+0x3e710)
 #4 0x00007fbb6834da21 llvm::TargetFolder::FoldICmp(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*) const (/path/build/bin/../lib/libLLVMAnalysis.so.18git+0x14da21)
 #5 0x00007fbb692d12bc llvm::IRBuilderBase::CreateICmpEQ(llvm::Value*, llvm::Value*, llvm::Twine const&) (/path/build/bin/../lib/libLLVMInstCombine.so.18git+0x722bc)
 #6 0x00007fbb6935886e llvm::InstCombinerImpl::visitSDiv(llvm::BinaryOperator&) (/path/build/bin/../lib/libLLVMInstCombine.so.18git+0xf986e)
 #7 0x00007fbb6929d4ec llvm::InstCombinerImpl::run() (/path/build/bin/../lib/libLLVMInstCombine.so.18git+0x3e4ec)
 #8 0x00007fbb692a0d89 combineInstructionsOverFunction(llvm::Function&, llvm::InstructionWorklist&, llvm::AAResults*, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::OptimizationRemarkEmitter&, llvm::BlockFrequencyInfo*, llvm::ProfileSummaryInfo*, unsigned int, bool, llvm::LoopInfo*) InstructionCombining.cpp:0:0
 #9 0x00007fbb692a024d llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/path/build/bin/../lib/libLLVMInstCombine.so.18git+0x4124d)
#10 0x00007fbb6ab0e0fd llvm::detail::PassModel<llvm::Function, llvm::InstCombinePass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/path/build/bin/../lib/libLLVMPasses.so.18git+0xf00fd)
#11 0x00007fbb67ed2da6 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/path/build/bin/../lib/libLLVMCore.so.18git+0x2d2da6)
#12 0x00007fbb6aaebecd 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>&) (/path/build/bin/../lib/libLLVMPasses.so.18git+0xcdecd)
#13 0x00007fbb67ed7e63 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/path/build/bin/../lib/libLLVMCore.so.18git+0x2d7e63)
#14 0x00007fbb6aaec42d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/path/build/bin/../lib/libLLVMPasses.so.18git+0xce42d)
#15 0x00007fbb67ed18f6 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/path/build/bin/../lib/libLLVMCore.so.18git+0x2d18f6)
#16 0x000055c01c2bdc04 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, bool) (/path/build/bin/opt+0x17c04)
#17 0x000055c01c2cbf13 main (/path/build/bin/opt+0x25f13)
#18 0x00007fbb67245cd0 (/usr/lib/libc.so.6+0x27cd0)
#19 0x00007fbb67245d8a __libc_start_main (/usr/lib/libc.so.6+0x27d8a)
#20 0x000055c01c2b6e45 _start (/path/build/bin/opt+0x10e45)
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /path/build/bin/FileCheck /path/llvm/test/Transforms/InstCombine/div.ll
```

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


More information about the llvm-commits mailing list