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

    <tr>
        <th>Summary</th>
        <td>
            [NVPTX] Assertion `CastInst::castIsValid(opc, C, Ty) && "Invalid constantexpr cast!"` failed
        </td>
    </tr>

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

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

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

<pre>
    ## Description

The follow code causes `llc` to crash during pass `GPU Load and Store Vectorizer` with assertion error `Assertion CastInst::castIsValid(opc, C, Ty) && "Invalid constantexpr cast!" failed` when targeting `nvptx` / `nvptx64`.
The problem does not exist in `aarch64` / `x86_64`.

## Minimal Reproduction

### Code

https://godbolt.org/z/YxnP8r5T7

```ll
define i64 @f(i1 %0, ptr %1) {
BB:
  %RP = alloca i64

  %G1 = getelementptr <4 x i8>, ptr %RP, i8 0
  store <4 x i8> zeroinitializer, ptr %G1

  %G2 = getelementptr <32 x i1>, ptr %RP, i8 1
  store <32 x i1> zeroinitializer, ptr %G2

  %S = select i1 %0, ptr %RP, ptr %1
  %L = load i64, ptr %S
  ret i64 %L
}
```

### Stack Trace

```
llc: /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/Constants.cpp:1951: static llvm::Constant *llvm::ConstantExpr::getCast(unsigned int, llvm::Constant *, llvm::Type *, bool): Assertion `CastInst::castIsValid(opc, C, Ty) && "Invalid constantexpr cast!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./llvm-project/build-debug/bin/llc ./crash-reports/dagisel-nvptx/1.ll -mtriple=nvptx64
1.      Running pass 'Function Pass Manager' on module './crash-reports/dagisel-nvptx/1.ll'.
2.      Running pass 'GPU Load and Store Vectorizer' on function '@f'
 #0 0x0000000003af78fa llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/Unix/Signals.inc:569:11
 #1 0x0000000003af7aab PrintStackTraceSignalHandler(void*) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/Unix/Signals.inc:636:1
 #2 0x0000000003af60f6 llvm::sys::RunSignalHandlers() /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/Signals.cpp:104:5
 #3 0x0000000003af81d5 SignalHandler(int) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/Unix/Signals.inc:407:1
 #4 0x00007f4c2242a980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #5 0x00007f4c2131ae87 raise /build/glibc-uZu3wS/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #6 0x00007f4c2131c7f1 abort /build/glibc-uZu3wS/glibc-2.27/stdlib/abort.c:81:0
 #7 0x00007f4c2130c3fa __assert_fail_base /build/glibc-uZu3wS/glibc-2.27/assert/assert.c:89:0
 #8 0x00007f4c2130c472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #9 0x0000000002deb8cc llvm::ConstantExpr::getCast(unsigned int, llvm::Constant*, llvm::Type*, bool) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/Constants.cpp:1953:11
#10 0x0000000002f32849 llvm::ConstantFolder::CreateCast(llvm::Instruction::CastOps, llvm::Constant*, llvm::Type*) const /home/henry/aflplusplus-isel/llvm-project/llvm/include/llvm/IR/ConstantFolder.h:179:5
#11 0x0000000000f576a7 llvm::IRBuilderBase::CreateCast(llvm::Instruction::CastOps, llvm::Value*, llvm::Type*, llvm::Twine const&) /home/henry/aflplusplus-isel/llvm-project/llvm/include/llvm/IR/IRBuilder.h:2027:28
#12 0x0000000000f573e2 llvm::IRBuilderBase::CreateBitCast(llvm::Value*, llvm::Type*, llvm::Twine const&) /home/henry/aflplusplus-isel/llvm-project/llvm/include/llvm/IR/IRBuilder.h:1987:5
#13 0x0000000003d2f998 (anonymous namespace)::Vectorizer::vectorizeStoreChain(llvm::ArrayRef<llvm::Instruction*>, llvm::SmallPtrSet<llvm::Instruction*, 16u>*) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp:1122:19
#14 0x0000000003d2d98c (anonymous namespace)::Vectorizer::vectorizeInstructions(llvm::ArrayRef<llvm::Instruction*>) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp:987:18
#15 0x0000000003d2d357 (anonymous namespace)::Vectorizer::vectorizeChains(llvm::MapVector<llvm::Value const*, llvm::SmallVector<llvm::Instruction*, 8u>, llvm::DenseMap<llvm::Value const*, unsigned int, llvm::DenseMapInfo<llvm::Value const*, void>, llvm::detail::DenseMapPair<llvm::Value const*, unsigned int>>, std::vector<std::pair<llvm::Value const*, llvm::SmallVector<llvm::Instruction*, 8u>>, std::allocator<std::pair<llvm::Value const*, llvm::SmallVector<llvm::Instruction*, 8u>>>>>&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp:919:18
#16 0x0000000003d2c9eb (anonymous namespace)::Vectorizer::run() /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp:288:16
#17 0x0000000003d2cc67 (anonymous namespace)::LoadStoreVectorizerLegacyPass::runOnFunction(llvm::Function&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp:251:3
#18 0x0000000002f995d6 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1430:23
#19 0x0000000002f9e402 llvm::FPPassManager::runOnModule(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1476:16
#20 0x0000000002f99ea9 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1545:23
#21 0x0000000002f99a1d llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:535:16
#22 0x0000000002f9e6e1 llvm::legacy::PassManager::run(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1672:3
#23 0x0000000000d391ec compileModule(char**, llvm::LLVMContext&) /home/henry/aflplusplus-isel/llvm-project/llvm/tools/llc/llc.cpp:737:41
#24 0x0000000000d37592 main /home/henry/aflplusplus-isel/llvm-project/llvm/tools/llc/llc.cpp:418:13
#25 0x00007f4c212fdc87 __libc_start_main /build/glibc-uZu3wS/glibc-2.27/csu/../csu/libc-start.c:344:0
#26 0x0000000000d36d9a _start (./llvm-project/build-debug/bin/llc+0xd36d9a)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNWVtzozYU_jX2i8YeEPcHPzjOZpuZpPXE6U7bF48AYdNiYIRInP31PUcCc4m7SbNpthmCkZDO5Ts3SYRF_LSYUAsucsmrSKSlTIt8YlxOjKW-3-85SYosKx5JVMScRKyueEUmrpFlEdyJLEgkWLUncS3SfEdKVqnXn9e_kpuCxYTlMdnIQnDyhUfwm37lAic-pnJPYDAXyJNwIQqBE5enrhWr5HVeyYm1hCvCVvWFZWk8oX5RRhO6Iiu83T9NaEAm1IULfuh1_oCjQGCYzHLJj6UgOH1CTXhNEpZmPFYy7HlOJBM7LlF26MofSnnEVxN6dWq7NjzNO0BKUYQZP5C4ACjyQhJ-TCtJ0hxnMCaivZrR0jj67rZPorlr3G_TPD2wjNxxoBrX0dgAehiOXAH-_Td7KcsKsaFXcO2KOCwyOS_EDlpf4f_3Y772hXPvDci5hr6yTHfEPElzTlLXJhPbSADa1ATBHQORLaXAZ1Ph613oGRcXyFQ9Enx7tyYT65IwcJKIIaE-PzXis6lGAMocYOO5VHStlU2OJPUn1qcer7s1NlKfGC2BSjlPfzgBFyoAN5mCndGduumfzefc6XnuFkV65j-wN5-x78Z_iz99xn-j2FfAPAIfeQau5nhCupt3o-ZlGEMIajdo0w4SXGrDweCGrXc5svN5X9pIFv1F7gWL-Fnv0E0McWuJbrwvDhx_eC4g2K5YkpVZXeH_LAXNoCvLHg4zcOE_QcumiT9pCPfrO7itmmis5lFZAlkzAG2BOnTKNCJqggr0diDwXT7v_QTBrHvAoCsV1H6dV-ku54BTLhGn87SGb-6fSt72hkUBKgQoTZd9AIX_KAFNqNfkoCYhrG8-LTefSFWHh1QSRsJ6B7YtCyExvY7iHNJmHc6j4tBDeYh9WlU1rzD5YO5N8yirIXNLSFw6U4dge4mmb9hrZ4jrQ3kKbExVwVoUO8EOBPJjjXGDQpD5c35hnWbxLOYgNrbSXA2J1FDFcaaVQZFitkOHmek8S6_MeZaR2UFC6ck4-Hubb5UUJkpxV-d5V1iod1XnKkmSNXbcspztMAI9Al0HyKAZmtV7LW81VDGj55h9u4pppkkrELR1Cm0yLnRYBjGORvtnscTzE9bzwuqp0g9rKJ5SGUIHJfW7QYI9botKCs4OysdW2s-D7w_MTV0iOPD0a54iJBuII5ZVc3AaYOy4GBOm2aljjtVhLCQj2TWNnwCxDDHyHwoMmOVHCOxaLgrcyUtH8rpG4p6DH-w-EBvcxX9ngVtJm-xn2AhwJ6k1ktQ3Y4eMofwgu9uGN4TRboTzEjui1KYs8A2y3QquiuNWYH71T9T1emeWpXl9nO3yWr8o5R48OJ5XxRzK34VxNClQwbR7YuP02ZiWybjvEcFAIdKmGcyAQCya1X_U1uPm1KRziDp6VSk94GGOCQDMG_MSQ7_WakLHg5IGJINfRXquPB1LkdFJ4o4kibzEJCwslKavk0TGGg01SzHxR0y8IRMjsiA3bLd6TbzFCrEN2et11_NOD5plMGTpj1naHn2F7SK0mqusZhkwZWC1oO-5FMqAH50r528r3Gfr9rBs_3frE6uX_TD5DZI5TSzq28EZma-KLOaNrivweckbdbuhuKoQzWJfj4MRv6Cr_jsQAr3G-B4ImvVB1zFAQ-sy3yMSXtClLIRjUAyMxPFc5vWEvL67QK_l4gKc-B3QgJVXzb_lD73OR9zTKGhUxfwuHzkP0Ek7hQ01KKZMCKQTOnSMjsXpa9C5SOUzgP7PqpuB7w39YljKYpoEgY9JhuVF_nQoatgzswOvSrXOCRoNu1WVaj-0bbXoWu0Zrip7iCyFYE93PIF92Xk_Alz0xq57vYF9draWYsPlt6bBHNOt1ez3WbTAqiivkkIcsBKdFIVnXFkq_Trt2-RjwjYBse1QtUeoxoEfvRnVnsrVm3D9MbBoVzN7UeaMUbEc782oKDcb4nHLSj18AIiKxzbIlme87Myc517m189c9JLnFQeeL3D757rZErjOk-IFImpdPhYg5hLWHUNaa5a-pP5AIKCpycIaqI8w0Dj1lC_TfDukI-76ZOqDBThd352E3x4tZjCKFncULVHAw38bLaLO32tz9AadqO-jTm6nkzfWKXJfzABn6N_wHYue8EzhpOYveXvWMEgJXecPsyxV-xWrA8EfrkyDwIn7-9yrNSrWnpV8sH5qzdDB20jRFjrbMlChni7BSBduG_QVutyqs59h8m66PkQPzx06JjXGNuEseMkxb_-fyjm2MzQSNcfKMTPuGSlTlPRzj971ocz6WeSHaONYzshSdOxxLjdfVuaHK2K6Hh2kATpYeRuxFZg8gpJ2KNOMn1wo2jOhqtWoyN3cfLmFbZ_kx3fYOUjYm1eqGel7I7Nn4QrO7jbV1B7J7DkBJQeGH9Pen71tqvLRg2x45kSTOPI9st3ioccWdsBCbltZXnMGE1V4YqIOn_SjeqnoqPMYy8ZjP6Nj7460d-OAEc0Yc8XrT9vV4YyefzqdOX3OmfKF6bqOQwPLt6fxwooDK2BTmcqMLybOxc9f1ve_TZzLj_n84RrN549pLbLF2z9vOL5lONP9IgmDwAw5TyAHUdeBThoEnhfFlmHHlHvTjIU8q1BRYJ_zR6JIoCjO5TRdwOadmgZsuSwDZsxD1_WpYySRkYSmwYyJbXDwgWyOcuD31alYKJHAAhW8zNJKVt1LCFNcCitckT6r5b4Qi5_Y1ycQfT9VvBdK9r8BVT6naw">