[llvm] [VPlan] Constant-fold ActiveLaneMask intrinsics (PR #208852)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 2 05:42:38 PDT 2026


dtcxzyw wrote:

The following correctness issue was found by [llvm-hackme](https://github.com/dtcxzyw/llvm-hackme).

<!-- llvm-hackme-state: bug_found -->
<!-- llvm-hackme-baseline: b1e21e2e31541b02ea15719d6b7eec6bbb5508c1 -->
<!-- llvm-hackme-head-sha: 5b178f92a44c49be984bfb674278cb56a1c0b594 -->
<!-- llvm-hackme-patch-sha256: 4fe54e83be6995f14e4262d1b28f5c82f51c171c906724f93e4d96045511dbf5 -->
<!-- llvm-hackme-kind: crash -->

This comment is generated by an automated correctness checking service designed to help identify critical correctness bugs (opt crashes or Alive2 miscompilations) and improve PR review efficiency under limited reviewer bandwidth.

The reproducer was generated by LLM.

This bug is a regression introduced by this PR. It does not reproduce on the baseline commit.

## Reproducer

**Kind**: crash

**IR Reproducer**:
```llvm
; RUN: opt -passes=instcombine<no-verify-fixpoint> -S
define <4 x i32> @t() {
entry:
  %r = call <4 x i32> @llvm.wasm.dot(
    <8 x i16> <i16 1, i16 undef, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>,
    <8 x i16> <i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 16>) nobuiltin
  ret <4 x i32> %r
}
```

**Stacktrace**:
```
opt: ../llvm-project-pr/llvm/include/llvm/Support/Casting.h:572: decltype(auto) llvm::cast(From*) [with To = llvm::ConstantInt; From = llvm::Constant]: 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 and instructions to reproduce the bug.
Stack dump:
0.	Program arguments: /llvm-hackme/work/llvm-hackme/llvm-build-pr/bin/opt -S -o /dev/null /tmp/tmprlcvinb5.ll -passes=instcombine<no-verify-fixpoint>
1.	Running pass "function(instcombine<max-iterations=1;no-verify-fixpoint>)" on module "/tmp/tmprlcvinb5.ll"
2.	Running pass "instcombine<max-iterations=1;no-verify-fixpoint>" on function "t"
 #0 0x00007ffff7e1a012 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Support/Unix/Signals.inc:928:22
 #1 0x00007ffff7e16c4c llvm::sys::RunSignalHandlers() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Support/Signals.cpp:108:20
 #2 0x00007ffff7e16e55 SignalHandler(int, siginfo_t*, void*) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Support/Unix/Signals.inc:474:14
 #3 0x00007ffff7a19520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007ffff7a6d9fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007ffff7a19476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007ffff79ff7f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007ffff79ff71b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007ffff7a10e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x00007fffee7a1915 (/llvm-hackme/work/llvm-hackme/llvm-build-pr/bin/../lib/../lib/libLLVMAnalysis.so.24.0git+0x1a1915)
#10 0x00007fffee7b5539 llvm::isa_impl_cl<llvm::ConstantInt, llvm::Constant const*>::doit(llvm::Constant const*) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/ADT/SmallVector.h:83:32
#11 0x00007fffee7b5539 llvm::isa_impl_wrap<llvm::ConstantInt, llvm::Constant const*, llvm::Constant const*>::doit(llvm::Constant const* const&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/Support/Casting.h:137:41
#12 0x00007fffee7b5539 llvm::isa_impl_wrap<llvm::ConstantInt, llvm::Constant const* const, llvm::Constant const*>::doit(llvm::Constant const* const&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/Support/Casting.h:129:13
#13 0x00007fffee7b5539 llvm::CastIsPossible<llvm::ConstantInt, llvm::Constant const*, void>::isPossible(llvm::Constant const* const&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/Support/Casting.h:257:62
#14 0x00007fffee7b5539 llvm::CastInfo<llvm::ConstantInt, llvm::Constant* const, void>::isPossible(llvm::Constant* const&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/Support/Casting.h:509:38
#15 0x00007fffee7b5539 bool llvm::isa<llvm::ConstantInt, llvm::Constant*>(llvm::Constant* const&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/Support/Casting.h:548:47
#16 0x00007fffee7b5539 decltype(auto) llvm::cast<llvm::ConstantInt, llvm::Constant>(llvm::Constant*) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/Support/Casting.h:572:3
#17 0x00007fffee7b5539 (anonymous namespace)::ConstantFoldFixedVectorCall(llvm::StringRef, unsigned int, llvm::FixedVectorType*, llvm::ArrayRef<llvm::Constant*>, llvm::DataLayout const&, llvm::TargetLibraryInfo const*, llvm::CallBase const*) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Analysis/ConstantFolding.cpp:4469:28
#18 0x00007fffee7b5684 llvm::ConstantFoldIntrinsic(unsigned int, llvm::ArrayRef<llvm::Constant*>, llvm::Type*, llvm::DataLayout const&, llvm::Function*) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Analysis/ConstantFolding.cpp:4724:39
#19 0x00007fffee8a84cb llvm::simplifyIntrinsic(unsigned int, llvm::Type*, llvm::ArrayRef<llvm::Value*>, llvm::FastMathFlags, llvm::SimplifyQuery const&, llvm::Function*, llvm::fp::ExceptionBehavior, llvm::RoundingMode) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Analysis/InstructionSimplify.cpp:7353:44
#20 0x00007fffee8aaf52 simplifyIntrinsic(llvm::CallBase*, llvm::ArrayRef<llvm::Value*>, llvm::SimplifyQuery const&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Analysis/InstructionSimplify.cpp:7590:29
#21 0x00007fffef2cc2cc llvm::InstCombinerImpl::visitCallInst(llvm::CallInst&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp:1988:32
#22 0x00007fffef266042 llvm::InstCombinerImpl::run() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp:5932:36
#23 0x00007fffef267dba 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&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp:6240:5
#24 0x00007fffef268c1c llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp:6301:3
#25 0x00007ffff145f2c6 llvm::detail::PassModel<llvm::Function, llvm::InstCombinePass, llvm::AnalysisManager<llvm::Function> >::runImpl(llvm::detail::PassConcept<llvm::Function, llvm::AnalysisManager<llvm::Function> >&, llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/IR/PassManagerInternal.h:129:3
#26 0x00007fffee101d98 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/IR/PassManagerImpl.h:80:18
#27 0x00007ffff145ca76 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >, llvm::AnalysisManager<llvm::Function> >::runImpl(llvm::detail::PassConcept<llvm::Function, llvm::AnalysisManager<llvm::Function> >&, llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/IR/PassManagerInternal.h:129:3
#28 0x00007fffee100b8c llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/IR/PassManager.cpp:132:41
#29 0x00007ffff1460406 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module> >::runImpl(llvm::detail::PassConcept<llvm::Module, llvm::AnalysisManager<llvm::Module> >&, llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/IR/PassManagerInternal.h:129:3
#30 0x00007fffee1005e8 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/IR/PassManagerImpl.h:80:18
#31 0x00007ffff7f948c4 llvm::SmallPtrSetImplBase::~SmallPtrSetImplBase() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/ADT/SmallPtrSet.h:89:5
#32 0x00007ffff7f948c4 llvm::SmallPtrSetImpl<llvm::AnalysisKey*>::~SmallPtrSetImpl() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/ADT/SmallPtrSet.h:365:35
#33 0x00007ffff7f948c4 llvm::SmallPtrSet<llvm::AnalysisKey*, 2u>::~SmallPtrSet() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/ADT/SmallPtrSet.h:532:7
#34 0x00007ffff7f948c4 llvm::PreservedAnalyses::~PreservedAnalyses() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/IR/Analysis.h:112:7
#35 0x00007ffff7f948c4 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, bool) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/tools/opt/NewPMDriver.cpp:580:10
#36 0x00007ffff7fa1914 optMain /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/tools/opt/optdriver.cpp:805:25
#37 0x00007ffff7a00d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#38 0x00007ffff7a00e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#39 0x0000555555555095 _start (/llvm-hackme/work/llvm-hackme/llvm-build-pr/bin/opt+0x1095)
```


**Baseline Revision**: `b1e21e2e31541b02ea15719d6b7eec6bbb5508c1`
**PR Head SHA**: `5b178f92a44c49be984bfb674278cb56a1c0b594`
**Patch SHA256**: `4fe54e83be6995f14e4262d1b28f5c82f51c171c906724f93e4d96045511dbf5`


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


More information about the llvm-commits mailing list