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

    <tr>
        <th>Summary</th>
        <td>
            LoopVectorize assertion failure
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            vectorization,
            crash
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          nikic
      </td>
    </tr>
</table>

<pre>
    ```
; RUN: opt -S -loop-vectorize < %s
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-unknown-linux-gnu"

define void @test(ptr %start, ptr %end) {
entry:
  br label %loop

loop:
  %ptr = phi ptr [ %start, %entry ], [ %ptr.next, %loop.latch ]
  %cmp = icmp eq ptr %ptr, %end
  br i1 %cmp, label %exit, label %loop.latch

loop.latch:
  %ptr.next = getelementptr inbounds i64, ptr %ptr, i64 1
  %v1 = load i32, ptr %ptr, align 4
  %gep = getelementptr inbounds i8, ptr %ptr, i64 4
  %v2 = load i24, ptr %gep, align 4
  br label %loop

exit:
  ret void
}
```
Asserts:
```
opt: /home/npopov/repos/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:2919: llvm::Value* llvm::InnerLoopVectorizer::createBitOrPointerCast(llvm::Value*, llvm::VectorType*, const llvm::DataLayout&): Assertion `(DL.getTypeSizeInBits(SrcElemTy) == DL.getTypeSizeInBits(DstElemTy)) && "Vector elements must have same size"' failed.
[...]
 #8 0x000000000610034b llvm::InnerLoopVectorizer::createBitOrPointerCast(llvm::Value*, llvm::VectorType*, llvm::DataLayout const&) (build/bin/opt+0x610034b)
 #9 0x000000000611a2ec llvm::InnerLoopVectorizer::vectorizeInterleaveGroup(llvm::InterleaveGroup<llvm::Instruction> const*, llvm::ArrayRef<llvm::VPValue*>, llvm::VPTransformState&, llvm::VPValue*, llvm::ArrayRef<llvm::VPValue*>, llvm::VPValue*) (build/bin/opt+0x611a2ec)
#10 0x000000000611a7a6 llvm::VPInterleaveRecipe::execute(llvm::VPTransformState&) (build/bin/opt+0x611a7a6)
#11 0x000000000620ca79 llvm::VPBasicBlock::execute(llvm::VPTransformState*) (build/bin/opt+0x620ca79)
#12 0x0000000006208c4f llvm::VPRegionBlock::execute(llvm::VPTransformState*) (build/bin/opt+0x6208c4f)
#13 0x000000000620b13d llvm::VPlan::execute(llvm::VPTransformState*) (build/bin/opt+0x620b13d)
#14 0x000000000613f247 llvm::LoopVectorizationPlanner::executePlan(llvm::ElementCount, unsigned int, llvm::VPlan&, llvm::InnerLoopVectorizer&, llvm::DominatorTree*, bool) (build/bin/opt+0x613f247)
#15 0x000000000615087f llvm::LoopVectorizePass::processLoop(llvm::Loop*) (build/bin/opt+0x615087f)
#16 0x000000000615161d llvm::LoopVectorizePass::runImpl(llvm::Function&, llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::BlockFrequencyInfo&, llvm::TargetLibraryInfo*, llvm::DemandedBits&, llvm::AAResults&, llvm::AssumptionCache&, llvm::LoopAccessInfoManager&, llvm::OptimizationRemarkEmitter&, llvm::ProfileSummaryInfo*) (build/bin/opt+0x615161d)
#17 0x0000000006151d6b llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build/bin/opt+0x6151d6b)
#18 0x0000000006241eed llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#19 0x00000000036dcc2c 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>&) AMDGPUTargetMachine.cpp:0:0
#20 0x00000000055d9a17 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build/bin/opt+0x55d9a17)
```

cc @fhahn 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzVWN9z2jgQ_mvgxQNjy9jAAw8Qkk5mkmsmpH2X5QV0sSVXlrlwf_2tZGMsh4a207uZyxAbaVe7337a1Q8SmR4Xg9hvPv564C8H4cp7_vLHIFx6stDeaOONMimL0QGYlor_Dd4gvPEGJCprfU3VDrSXUk0zepSVRvka5QRGORqBEZ_hy_yHZMSDGL_Yh2nFE_wST7CbGAV8jkRI6r6N6SPEcaIVLzI4OaBUsT1qVuJVyL_EKOOiehvtRNUOq58pbLkA7yB56g0mvoZSD8is0MpGgaaxeeM1bRDpgMy9wXRVDwah1RER1S3PS5SX0QQyo2t46Tqy7bMqalijiLbY89pBtHKcWofoAAVr267lqDoW8HZSMXbHGdVsb_XO5lleWPPcfIFvpxjw1RpPO8B50Awy0jYKeOPa6Ti76wfX9PZDtFgtEJwkyCDHmAwULhJZibT0zESfKW7gYacXdAwdAmsikzT1OGbBuwE04zvhTTpDdlB86HZ22WvXxIF0vJIuTDR-wetH82-ZPJOjMGNN0jUq02bmevW2LEtQumzH9cRYg6YUB-RuL3PAlyhkIQ_4RUEhS3xn2SEfFUr-iQXaNM2LJ_h8UVSUW6lyo_j1VMH4_QGht-0xK0zeknkwN76sBYQTLr_SrELtbte9EKCc0aoWMAVUw4rrz-pJcqFB3VBbaO_N2Ww791pDL8fiJGJSlLqjsMal5cEuLQMSY3EajDVrXArPMEVm64cxJoExskFI9wJxYMizjWK3mBgvR1vT4dpM9XdU16VuVa228RWbdaYG6DUZVnp5hfD29ABeSXN8WEYxX6felvIM0nEzkdFqPB6fC3ZAwpnnv_mnvzjw_XCS_LfcXmK1JrzmFlHOkopnuAjeJVzg0yQgWflvDVzDThvP3I0noATYj8TT7iX3JpYMkMtPSlaFE1FfFt50ZaVWFTMJMAhvTwH0IlwqRY_PsHVGfn1qmQpve2Q9teWy0ci3ZcRVuMzyzzs62_mQcUtoyzgSHvh9xqc0diyfWXsGxnHebT-8AatMRLMr4V6Bg94cOIEDh_iMTucOnBUtOVtlkr3-DJArvNR-HCCkB2TGJlsHyDPsMFl-PxLjyEES9pAkQZg6SDIqfisC48BBMHFzJNySybSDoFuQ1FSQQSROpdmAsii7wG7r1e8Gd1Z7WqhEifsi4KZZt_sR9mvn0lrQ11nLnAtqFiwFpypLpMyupKUN0GEgchmI_Nl0-x0G4ImWZd2NeyiDsjRSJ_S641qtWicOiriHIoiD9DoKVYn7vMgcBHeVqNe6PmMbhodudXuQWXVRbnzci618J3ixB-o21y7q9KajJ7WlhIeQbxUIdvzAyQNPFFWNRn8TgpyKFNJ6D-4NXy6foayyS5KyrPLCRHxD2f49NhP2kpnJNF4fqaC7C-n2GS3kTQ08IxD1eptzrS9oPim5xZ19U-V5N5KP88FMt5MP034-pHHyQ_nwY7mwFDQ7lrw8hdvdjNpBZiu6tsxbYA5y99xCJgFAN5NT0HjwaahC4I8yheyy_3fT5EbcYx3wkHeAtI4Myl-L13z-RSIN7pVhElRzjvbtf0uec0gK45Qxwn4DeVb3I4S_Stb_cA6Wj-tPT1_q5eYRVwS87l-cC-Icn6IondOguzUi91UGL_LkwXC8TGmBGXoZfz3gp9A3Q64XYgPvXIi932nskzHzk8Z2T_fCG8IiiOMpmU_i2XyYLsJ0Hs7pUHOdwcKpNY-21ydzZakUDCuVLfZaF3bVIXf42XG9r5Ixk3nnVuneNTmuwyYl7qLZlJDhfoFHxMmETuMw2kbxNgYIAn8eRCSNYDaJtvHQ3p3LBd6N8Mp06J5C7BXK_GhBmKLl3jSj9ZAviE8IWkE7ZDKZj1kSJSyZRsSnIcA8xOhx6ebZ2EAbS7UbqoVFmVS7EoUZL3V5FmLg5tgCFgHap5XeS7UQ_JWzoQ1nYWP5B3aOus4">