[llvm] [VectorCombine] Fold bitcast(bitreverse.v8i8(bitcast(IntTy))) into bswap+bitreverse (PR #209037)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 14 05:53:27 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: 23b3f21fd0fff64644cf60065b971686aab9c1b3 -->
<!-- llvm-hackme-head-sha: 13e1bec6e4617595419d615cbb4332b613ef3a7a -->
<!-- llvm-hackme-patch-sha256: fdcff2cde1b952bf644621b66c5d7f736753a6554a4e47a7cb110e4942b6324b -->
<!-- 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=vector-combine -S
@g = external global i64
define i64 @test() {
%1 = call <8 x i8> @llvm.bitreverse.v8i8(<8 x i8> bitcast (i64 ptrtoint (ptr @g to i64) to <8 x i8>))
%2 = bitcast <8 x i8> %1 to i64
ret i64 %2
}
```
**Stacktrace**:
```
opt: ../llvm-project-pr/llvm/include/llvm/Support/Casting.h:572: decltype(auto) llvm::cast(From*) [with To = llvm::BitCastInst; From = llvm::Value]: 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/tmpft7q4pm7.ll -passes=vector-combine
1. Running pass "function(vector-combine)" on module "/tmp/tmpft7q4pm7.ll"
2. Running pass "vector-combine" on function "test"
#0 0x00007ffff7e19c22 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Support/Unix/Signals.inc:907:22
#1 0x00007ffff7e1685c llvm::sys::RunSignalHandlers() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Support/Signals.cpp:108:20
#2 0x00007ffff7e16a61 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 0x00007ffff0ae3b35 llvm::InstructionCost::operator+=(llvm::InstructionCost const&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/Support/InstructionCost.h:113:30
#10 0x00007ffff0ae3b35 (anonymous namespace)::VectorCombine::foldBitOrderReverseAndSwap(llvm::Instruction&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Transforms/Vectorize/VectorCombine.cpp:6195:56
#11 0x00007ffff0b08d03 (anonymous namespace)::VectorCombine::run()::'lambda'(llvm::Instruction&)::operator()(llvm::Instruction&) const /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Transforms/Vectorize/VectorCombine.cpp:6511:7
#12 0x00007ffff0b0ac49 run /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Transforms/Vectorize/VectorCombine.cpp:6639:9
#13 0x00007ffff0b0ac49 llvm::VectorCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/lib/Transforms/Vectorize/VectorCombine.cpp:6671:20
#14 0x00007ffff14fe586 llvm::detail::PassModel<llvm::Function, llvm::VectorCombinePass, 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/PassManagerInternal.h:86:3
#15 0x00007fffedf03e88 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
#16 0x00007ffff5aad5c6 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<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/PassManagerInternal.h:86:3
#17 0x00007fffedf02d3c 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
#18 0x00007ffff7f85e16 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, 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/PassManagerInternal.h:86:3
#19 0x00007fffedf02788 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
#20 0x00007ffff7f92994 llvm::SmallPtrSetImplBase::~SmallPtrSetImplBase() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/ADT/SmallPtrSet.h:89:5
#21 0x00007ffff7f92994 llvm::SmallPtrSetImpl<llvm::AnalysisKey*>::~SmallPtrSetImpl() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/ADT/SmallPtrSet.h:365:35
#22 0x00007ffff7f92994 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
#23 0x00007ffff7f92994 llvm::PreservedAnalyses::~PreservedAnalyses() /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/include/llvm/IR/Analysis.h:112:7
#24 0x00007ffff7f92994 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
#25 0x00007ffff7f9fa24 optMain /llvm-hackme/work/llvm-hackme/llvm-build-pr/../llvm-project-pr/llvm/tools/opt/optdriver.cpp:805:25
#26 0x00007ffff7a00d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#27 0x00007ffff7a00e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#28 0x0000555555555095 _start (/llvm-hackme/work/llvm-hackme/llvm-build-pr/bin/opt+0x1095)
```
**Baseline Revision**: `23b3f21fd0fff64644cf60065b971686aab9c1b3`
**PR Head SHA**: `13e1bec6e4617595419d615cbb4332b613ef3a7a`
**Patch SHA256**: `fdcff2cde1b952bf644621b66c5d7f736753a6554a4e47a7cb110e4942b6324b`
https://github.com/llvm/llvm-project/pull/209037
More information about the llvm-commits
mailing list