[llvm] [InstCombine] Fold shuffles through all trivially vectorizable intrinsics (PR #141979)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Fri May 30 06:05:25 PDT 2025


================
@@ -1450,7 +1454,7 @@ InstCombinerImpl::foldShuffledIntrinsicOperands(IntrinsicInst *II) {
   // intrinsic (shuf X, M), (shuf Y, M), ... --> shuf (intrinsic X, Y, ...), M
   Instruction *FPI = isa<FPMathOperator>(II) ? II : nullptr;
   Value *NewIntrinsic =
-      Builder.CreateIntrinsic(II->getIntrinsicID(), SrcTy, NewArgs, FPI);
+      Builder.CreateIntrinsic(SrcTy, II->getIntrinsicID(), NewArgs, FPI);
----------------
dtcxzyw wrote:

Crash reproducer:
```
; bin/opt -passes=instcombine test.ll -S
define <3 x i4> @smin_unary_shuffle_ops_uses_const(<3 x i8> %x, <3 x i8> %y) {
  %sx = shufflevector <3 x i8> %x, <3 x i8> poison, <3 x i32> <i32 1, i32 0, i32 2>
  %sy = shufflevector <3 x i8> %y, <3 x i8> poison, <3 x i32> <i32 1, i32 0, i32 2>
  %r = call <3 x i4> @llvm.scmp.v3i4.v3i8(<3 x i8> %sx, <3 x i8> %sy)
  ret <3 x i4> %r
}
```
```
opt: /home/dtcxzyw/WorkSpace/Projects/compilers/llvm-project/llvm/lib/IR/Value.cpp:519: void llvm::Value::doRAUW(llvm::Value*, ReplaceMetadataUses): Assertion `New->getType() == getType() && "replaceAllUses of value with new value of different 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: bin/opt -passes=instcombine test.ll -S
1.      Running pass "function(instcombine<max-iterations=1;verify-fixpoint>)" on module "test.ll"
2.      Running pass "instcombine<max-iterations=1;verify-fixpoint>" on function "smin_unary_shuffle_ops_uses_const"
 #0 0x00007e0a1d627ab2 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.21.0git+0x227ab2)
 #1 0x00007e0a1d62498f llvm::sys::RunSignalHandlers() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.21.0git+0x22498f)
 #2 0x00007e0a1d624ad4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007e0a1d045330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x00007e0a1d09eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007e0a1d09eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007e0a1d09eb2c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007e0a1d04527e raise ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007e0a1d0288ff abort ./stdlib/abort.c:81:7
 #9 0x00007e0a1d02881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007e0a1d03b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x00007e0a14363cd2 (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.21.0git+0x363cd2)
#12 0x00007e0a1546e812 llvm::InstCombinerImpl::run() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.21.0git+0x67812)
#13 0x00007e0a1546f8b3 combineInstructionsOverFunction(llvm::Function&, llvm::InstructionWorklist&, llvm::AAResults*, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::OptimizationRemarkEmitter&, llvm::BlockFrequencyInfo*, llvm::BranchProbabilityInfo*, llvm::ProfileSummaryInfo*, llvm::InstCombineOptions const&) InstructionCombining.cpp:0:0
#14 0x00007e0a154708c2 llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.21.0git+0x698c2)
#15 0x00007e0a179ac525 llvm::detail::PassModel<llvm::Function, llvm::InstCombinePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libPolly.so.21.0git+0x1ac525)
#16 0x00007e0a143273f4 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.21.0git+0x3273f4)
#17 0x00007e0a1c2db975 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.21.0git+0xdb975)
#18 0x00007e0a14327910 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.21.0git+0x327910)
#19 0x00007e0a1c2dc335 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.21.0git+0xdc335)
#20 0x00007e0a14328a95 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.21.0git+0x328a95)
#21 0x00007e0a1d8572e9 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/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.21.0git+0x2c2e9)
#22 0x00007e0a1d862306 optMain (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.21.0git+0x37306)
#23 0x00007e0a1d02a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#24 0x00007e0a1d02a28b call_init ./csu/../csu/libc-start.c:128:20
#25 0x00007e0a1d02a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#26 0x000062d8062ed095 _start (bin/opt+0x1095)

Aborted (core dumped)
```


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


More information about the llvm-commits mailing list