<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57368>57368</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Crash in loop-load-elim: Assertion `AR && "Invalid addrec expression"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          efriedma-quic
      </td>
    </tr>
</table>

<pre>
    The following IR crashes with "opt -loop-load-elim".  Regression from db8fcb2c2537.  https://godbolt.org/z/x3v4eqM4K .

(On a side-note, following IR is reduced with llvm-reduce, with very little editing by hand; my first time using it, and it was pleasant to use.)

```
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"

define void @f(double* %arrayidx3.i.i.us, double* %0) {
entry:
  br label %for.body.us

for.body.us:
  %indvars.iv.us1 = phi i64 [ %indvars.iv.next.us, %for.body.us ], [ 0, %entry ]
  %indvars79.us = trunc i64 %indvars.iv.us1 to i32
  store double 0.000000e+00, double* %arrayidx3.i.i.us, align 8
  %conv22.us = zext i32 %indvars79.us to i64
  %cond.in.v.us = select i1 true, i64 %conv22.us, i64 0
  %cond.in.us = getelementptr inbounds double, double* %0, i64 %cond.in.v.us
  %cond.us = load double, double* %cond.in.us, align 8
  %indvars.iv.next.us = add nuw nsw i64 %indvars.iv.us1, 1
  %exitcond.not.us = icmp eq i64 %indvars.iv.next.us, 0
  br i1 %exitcond.not.us, label %exit, label %for.body.us

exit:
  ret void
}
```

Crash trace:

```
opt: /root/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:214: void llvm::RuntimePointerChecking::insert(llvm::Loop*, llvm::Value*, const llvm::SCEV*, llvm::Type*, bool, unsigned int, unsigned int, llvm::PredicatedScalarEvolution&, bool): Assertion `AR && "Invalid addrec expression"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/opt -o /app/output.s -S -loop-load-elim <source>
 #0 0x0000555d58777e74 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000555d58775634 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007fa6fbef1420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007fa6fb9be00b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #4 0x00007fa6fb99d859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007fa6fb99d729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007fa6fb9aefd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #7 0x0000555d574d60ff llvm::RuntimePointerChecking::insert(llvm::Loop*, llvm::Value*, llvm::SCEV const*, llvm::Type*, bool, unsigned int, unsigned int, llvm::PredicatedScalarEvolution&, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x25650ff)
 #8 0x0000555d574e3b46 (anonymous namespace)::AccessAnalysis::canCheckPtrAtRT(llvm::RuntimePointerChecking&, llvm::ScalarEvolution*, llvm::Loop*, llvm::DenseMap<llvm::Value const*, llvm::Value*, llvm::DenseMapInfo<llvm::Value const*, void>, llvm::detail::DenseMapPair<llvm::Value const*, llvm::Value*>> const&, llvm::Value*&, bool) (.part.0) LoopAccessAnalysis.cpp:0:0
 #9 0x0000555d574e546c llvm::LoopAccessInfo::analyzeLoop(llvm::AAResults*, llvm::LoopInfo*, llvm::TargetLibraryInfo const*, llvm::DominatorTree*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x257446c)
#10 0x0000555d574e5dd8 llvm::LoopAccessAnalysis::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2574dd8)
#11 0x0000555d58b92068 llvm::detail::AnalysisPassModel<llvm::Loop, llvm::LoopAccessAnalysis, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>::Invalidator, llvm::LoopStandardAnalysisResults&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3c21068)
#12 0x0000555d574e96bb llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>::getResultImpl(llvm::AnalysisKey*, llvm::Loop&, llvm::LoopStandardAnalysisResults&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x25786bb)
#13 0x0000555d5849dc42 llvm::LoopAccessInfo const& llvm::function_ref<llvm::LoopAccessInfo const& (llvm::Loop&)>::callback_fn<llvm::LoopLoadEliminationPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)::'lambda'(llvm::Loop&)>(long, llvm::Loop&) LoopLoadElimination.cpp:0:0
#14 0x0000555d584a48b1 eliminateLoadsAcrossLoops(llvm::Function&, llvm::LoopInfo&, llvm::DominatorTree&, llvm::BlockFrequencyInfo*, llvm::ProfileSummaryInfo*, llvm::ScalarEvolution*, llvm::AssumptionCache*, llvm::function_ref<llvm::LoopAccessInfo const& (llvm::Loop&)>) (.isra.0) LoopLoadElimination.cpp:0:0
#15 0x0000555d584a5a03 llvm::LoopLoadEliminationPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3534a03)
#16 0x0000555d58ae2f96 llvm::detail::PassModel<llvm::Function, llvm::LoopLoadEliminationPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3b71f96)
#17 0x0000555d57e8991a llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2f1891a)
#18 0x0000555d55fd9c76 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>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x1068c76)
#19 0x0000555d57e88486 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2f17486)
#20 0x0000555d55fda676 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x1069676)
#21 0x0000555d57e8652e llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2f1552e)
#22 0x0000555d55bb5068 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::StringRef>, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xc44068)
#23 0x0000555d55ad9cca main (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xb68cca)
#24 0x00007fa6fb99f083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#25 0x0000555d55ba7a1e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xc36a1e)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlWltv27gS_jXOC2FD98uDH5wbTtEGGyRBXwNKpGxuJVIlJSfurz9DSr5Qlttk10EXu60tWyTn48w3wxnSSibIZv60oqgQZSleGF-iTw8ol1itqEIvrFmhieeJukHTUogaLphMackqaJ0h9ECXkirFBEeFFBUiWVLkmZd7oR9D96ppajXxFxPvFl5LQTJRNjMhl3D3A96v_jqg3--Cz2g2ca4nzqK_eskfHGGkGKFTLho68a5sBZlCkpI2p6TTsSzX1bRr0WNN25rKDSpZ05QUUcIaLZpt0ApzMvEvUbVBBZOqQQ2rKGqV7maNloYB8A29YIXqkmKFOQwSMITOJl5qKRo5_cvcNlguaYMIbnCJN6Jt0MS_1vzRaQUs0ClL4EO_fW_K3Ai-mIu-iwL4EgXQ7OkBcJ1y3-vaHnWb5x3OTGjBOEVrwQiaBE4BlBHRZiWYv4AZQywl3jDy6s8Y_G-Vtssa4IApaBJfdnCUN3KjHWXuEMokKnFGSz2yEHKWQZholAMNDpv3gjCecbLGUs3YGrpcQ0G9YggsRJPwcjCC09emV8-eCsZem1YQcfpuo6XpOJotTo0MzNXIlufdbEe6gBeZ722lVSMk7VlBzswx_4CfS8c5omuMT1yyJUfJgTK54GtYF70mP8A2Pd-RmloN8LclR2aMz9ZbUUVLmoOwq80xId0btJth2-aMwPQgEIsAUwFrdSMR45loOVE7u44D4nCWnT5D_B5cJ4JTUHs9xmk69r-BxIQg3r4grl7G_afR3AMc-soaMxfkiC0Iy6sa0e8jAAeh5hzEOXB8DKUH7RaA7rMaTqwIM26_FCSkAr0--yHx9WjO6K5XOuGCrzHkry3C6HDIxDAAlLiVQoBWtybz1VL8CfHS3-oPlsF1wXG5UQysuf0CyXuR55Crt42zvK4BynN14ukSiRGG6f3FQ8t1WrwXjDdUXq1o_g3yY9fHuKIS5kr2wzU6-N6QtGv8iksduqYVqIVMu-97vLr5eiTwtKm34zMhSv3ZcgXBA1ke9Bi73wvfQ_ZnOW4oecwh-8qbtSjbBgrTxIv2iKm2daG0AbpmAa2LB2RGRDpPf-JriFaiI1HSHNHXuq9uOvt6MSowKynpa9X9l5vF4w1SbVZBtcAoa5fg81pIUy0GpQ8KUpvNclEd-Mj2HFOqpdpVXf3hedkSihoozaYaowzn30yA9NM_NtCASFvVu4hxoCu9l2IpcYWgFrV67as-XnTkeLegQQ02yCnYVkL6k7qtxHw5xVtW1FSn0G_QkTHeCaKp0BAYIgbu26Zum5lC08fhpgBW4JUSrdRRfNOvg4nnO8h51bk1DEMSJnEc0zhA9xJ8aIx40lY9gl9x-T-wvdRKJWbl6GBIUde1DVjHvHfY7gA7jPwADcFMtPwCyOuB4gJHRUYLN_Ac9PwMAaDLxDN4daKrcL-0XpPoGSpzyXj7Ol3ytuuom5WkmMyUmDm6jry6AaDsNg16Gt-aJs2o42RIYqboG_BzjRwZ5MAHQQs5sJFTkoQpwpl4k-YHyJ4HghZyOESO9d7hfZggYmFGNiamBYneh-n7IGJhxoexEAckcoriA5Oanc66HPdbklrP299Z4Z2XwigEyixOE5tT6meB8RPmgm8qAVWX44qqWlcuk17hZReari3H3DB-38hF8_BkMX3CMZ2NBywPORhQPeqwawqevcOw4K8GXjzhsHEPb2E-8UL8AspkLkh_ljyhDdQOG-seM_l-tQDZv9kOik7pPgyPWY1lMzOb_pNbgUFCTAeeD4MoH7DdwXSc6DasAX_QzhEHDl4sHqhqS6hFYz4z8kfrxpylvrBMYrnRI07wci0qxjGk6CdJaV8wzrYc4gBs3p_5oNo4Q1IISUZJsaMf8Edyy8B7W5E7oHFJ7dDoBIbMQfnkBEuyldyxHJkAjN4lcV7igBeLOLtOZ6nnRMmJ9bHV7R4muhOElm9gYkD6MIuCwmvaG03Vx9JuhvU7SR2Yf0n-vxUwfu65EA9WwHiDlZZGWfbRXoOM07V-qurSzmC90Ge6OVF3fuNiS4AaizvfWmxBSvLAO5m6d7XkYETR8lxPCtvf4ojaMdHxYE13zELpLvUJ5rngR3hf4PhwA6cHncdhTr3sxxfBba_VuxbCTqgP8H6PAse5ElcZwfDlJ8pDj9BbkVF_d7V0oP5xMdUeCWyP4CDJXER7Kaoh1CKXQimNqN5m9b52Rj-tiYPey1Lk324l_d5Snm9Giy-cIQsIx8e2qvrqe7zl_cVmDA7ZcDTVXVc4Xx1vqM4ZYf0WhymJ91ucN7klHLglxI6Pfmt0ni2lhn4AxlhpIbKsxdQr0uhEDR6vvXsTh3E4xtK5ivAhR6fq4z-M_Cx2gVuLfPtwSpM0dfEhP5rwn-n4L6bLK9wE2LDoss6dYUHSPD5HrH4Yzf_dYNc7N3CO5b10EOxJkBx6D7zVlvRJbHXSXlkQXOvd8qjFncC77O1FPiBWYzDm0FrPGcQqjt4Zq1vzrt7I0bmCbc_RqVD75xAPYZZGdph57iDMotCjb1jsY3T_W2iC-AyBBYsm6ygVZllon70BRzN1z2rYkHJqGfbYSMaXD7BHGwnOI3u7H23uYMNncH71k053yhqOEqL8wzxiuGXlCMjf6j5hzkI_3X0YbET3Y4fpfXS4obBsl4wfjQffPDf6tzhz16n3mXHys1FfqWQFo3I7bvvj8ds-zxZOeRAMDuaedbgMMVTmHKMKM36uOTOoJ7m1G_CGzzYKJ_HR87N-IPCsGiyb5wMF3vpMIgAQa5bQXic4xi5FHf7Z-PQjAN3NetUj6YfFreSUgOeR66eDZ78XdO5GkRuEceo4F2Tuk9RP8UXDmpLOu2fHYP3gD3TO8aTzopXl_K8_ygxjP0ouVnPHTVw_JElauJ4TJwkcf_04y2gcOwEh1Lkwj9bVfBJewvycviADoXUJry_Y3HM8z0m80APfOM4MIi6ktPDcPCE0weEkcCj4v5xpPfSfF13IuVEpa5cKOkumGrXvBCfp5y3UTAf4uG1WQs5pIRklFZ5-b1l-YRSYGwP-D684dn8">