[llvm] [LoopIdiom] Use HashRecognize to optimize CRC (PR #143208)

Mikael Holmen via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 1 02:28:07 PDT 2025


mikaelholmen wrote:

Hi @artagnon,

We stumbled on a crash with this patch:
```opt -data-layout="p:16:16" -passes="loop-idiom" bbi-111091.ll -o /dev/null```

Result:
```
opt: ../lib/IR/Instructions.cpp:3418: llvm::ZExtInst::ZExtInst(Value *, Type *, const Twine &, InsertPosition): Assertion `castIsValid(getOpcode(), S, Ty) && "Illegal ZExt"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: build-all/bin/opt -data-layout=p:16:16 -passes=loop-idiom bbi-111091.ll -o /dev/null
1.	Running pass "function(loop(loop-idiom))" on module "bbi-111091.ll"
2.	Running pass "loop(loop-idiom)" on function "dummyFilter"
 #0 0x00005581971afe46 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x4b6de46)
 #1 0x00005581971ad3d5 llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x4b6b3d5)
 #2 0x00005581971b0fc9 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f6bcc4c3990 __restore_rt (/lib64/libpthread.so.0+0x12990)
 #4 0x00007f6bc9e6352f raise (/lib64/libc.so.6+0x4e52f)
 #5 0x00007f6bc9e36e65 abort (/lib64/libc.so.6+0x21e65)
 #6 0x00007f6bc9e36d39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
 #7 0x00007f6bc9e5be86 (/lib64/libc.so.6+0x46e86)
 #8 0x000055819732f832 (build-all/bin/opt+0x4ced832)
 #9 0x00005581977de6a8 llvm::IRBuilderBase::CreateZExt(llvm::Value*, llvm::Type*, llvm::Twine const&, bool) Core.cpp:0:0
#10 0x000055819895b835 (anonymous namespace)::LoopIdiomRecognize::runOnCountableLoop() LoopIdiomRecognize.cpp:0:0
#11 0x0000558198958bb5 llvm::LoopIdiomRecognizePass::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (build-all/bin/opt+0x6316bb5)
#12 0x00005581986709ad llvm::detail::PassModel<llvm::Loop, llvm::LoopIdiomRecognizePass, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) PassBuilderPipelines.cpp:0:0
#13 0x0000558198913e9c std::optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::Loop, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>>(llvm::Loop&, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) (build-all/bin/opt+0x62d1e9c)
#14 0x0000558198913ad3 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithoutLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (build-all/bin/opt+0x62d1ad3)
#15 0x0000558198912fd4 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (build-all/bin/opt+0x62d0fd4)
#16 0x000055819866e26d llvm::detail::PassModel<llvm::Loop, llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) PassBuilderPipelines.cpp:0:0
#17 0x0000558198914ee1 llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x62d2ee1)
#18 0x0000558198670d5d llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#19 0x00005581973c89e5 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x4d869e5)
#20 0x000055819867320d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#21 0x00005581973cd2ee llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x4d8b2ee)
#22 0x0000558198601f0d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NewPMDriver.cpp:0:0
#23 0x00005581973c76b5 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x4d856b5)
#24 0x00005581985fac50 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) (build-all/bin/opt+0x5fb8c50)
#25 0x0000558197151138 optMain (build-all/bin/opt+0x4b0f138)
#26 0x00007f6bc9e4f7e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
#27 0x000055819714eb6e _start (build-all/bin/opt+0x4b0cb6e)
Abort (core dumped)
```
Also:
[godbolt](https://llvm.godbolt.org/#z:OYLghAFBqRAWIDGB7AJgUwKKoJYBdkAnAGhxAgDMcAbdAOwEMBbdEAcgEY3iLk68Ayoga0QHACw8%2BeAKoBndAAUAHuwAM3AFYgATMWoM6oatQBuTYgtqI8OPuXqoAwsmoBXJnTHFHAGRx06AByHgBG6IS6HMQADshy%2BHZ0Lu6e3nEJtnz%2BgSFM4ZE60VboNkkCeAyEeCkeXsXo1ll0FVV4OcFhEVGWldW1acV97QGd%2Bd1FAJSWyG6EiKxsGFSBANSmyDioqwACqB5MAJ4AYjR4ERCTqwCkAOwAQtdqAIL0eISHIE/Pq6uhhKsDOFqDcdABWXiEAB0KDoqG%2B30hML4qBAv3RGMxWOxOKx1wAzPdVjFCOhUHIbviACKgiFEKGhNCHDh6WlvD7fX7XcGk4BQtSUmkxOA4VY4fE6G5golqYhs/gfKVUuXXaW0uQxUpQko2FXgpGM1DMyWqqmcv4AoGNWkGpkshEvW1Gllo3Fu904glEklkikEmncunQw3GvVB5Fw82BzT8k3U4kisUcABsUplYaRsO2ppVasDAUQGfpIZZSqjPPQfI4HEFCdF4pNatlNvpWaVuaJgY1Wp1eCLwbtjbNLy54LkcAB/sB44BDdpvKh1blHHLYKz4lrhm2c8DC6XqxXI9piCYMQ4%2BKhdGQeFrOBPMVW6AAjmKJceUZJVmpV8oiLXf7Ob5dhOcrfkeXaaog2qNKUN5Tr2SbHqe56Xteco7mOIGvia4IAauBabqg24prSMZqKyh4/EhZ4ClOd6nqsbjUDeOAkdGsZyrc5r/Ihgb3hwzZWiCgZOqGgIMMCLbQlmCK3MOzxsNM1DsGC3BeGwGjEMg7C%2BL4ABqACyqwAJIAEqrHIszzOgoIStweDqIpxDwEgyCnjQESkOQKDubQkTIDEeAALQMHICjVEkchBe8bh0AA1jwZwRHI5ChI5xChAEVSfJw3CZYwHwAPKhJosHsFwxA%2BSw/CFXQ1A5ZpGChG4wBOCI1ApblxAYEwhjAKIGncLgpJlKY6CdZp6DKKUbjnOV3ABOcymDfoOD/NlLgYOl7w4Ew83EGNhCMgoVLoL1RjUAEoCDdMFAGMAch6Tg6AAO6FZq6kVbw/BCCIrASFI/DyEoqgrdo0QGEYIAmOYq2hClkDTAFzSdUFqAMJUQUGIcsx4P63I6DEYjJsTBOrEFMShQocj4zoOjUMgAVBVsdhMAT3DIIdhBbON4CXJYMFlPYECOAM9Q%2BHCHR5AU6TxIkfBi7LmRJFLXSRA0TTlMMisa7BWttKr4zq70bQ6yb1SGzLHDTJZcwLLoSkqWp6XaWwqzI6sEBUxEKOrDF8VXBA2D4H%2B3ISpM9mOdMLm4zEs1eRAPkxB5hBBMwiwe17YU%2B5FfuELFcURz4uAENzqJ6N9gjCKIAOV8DKjpeDxAvYQDBE7ljtsKpxDqZpruFbNcc3sgFDu4FnvexFfAUv7heey4vkRLZ1uRzd0xxWIaiyst4jOytrvcClegOWvB3JUkIDiEAA%3D)

[bbi-111091.ll.gz](https://github.com/user-attachments/files/22634623/bbi-111091.ll.gz)


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


More information about the llvm-commits mailing list