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

    <tr>
        <th>Summary</th>
        <td>
            [NVPTX] Global of non-standard type causes assertion error in debug build and memory corruption in release build
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    ## Description

When targeting `nvptx` or `nvptx64`, the following code containing v16i20 global crashes backend with

- assertion `bitPosition < BitWidth && (numBits + bitPosition) <= BitWidth && "Illegal bit extraction"` failed during pass `NVPTX Assembly Printer` in debug build;
- memory error `corrupted size vs. prev_size` during `malloc` in release build.

The problem does not exist when targeting `x86_64`, `aarch64`, `riscv64`, or `wasm64`.

## Minimal Reproduction

https://godbolt.org/z/jnaqz5qq3

### Code

```ll
@G = global <16 x i20> <i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7, i20 7>

define void @f(<16 x i64>* %0) {
BB:
  %LGV = load <16 x i20>, <16 x i20>* @G
  %C = sext <16 x i20> %LGV to <16 x i64>
  store <16 x i64> %C, <16 x i64>* %0
  ret void
}
```

### Stack Trace (Debug)

```console
llc: /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Support/APInt.cpp:484: uint64_t llvm::APInt::extractBitsAsZExtValue(unsigned int, unsigned int) const: Assertion `bitPosition < BitWidth && (numBits + bitPosition) <= BitWidth && "Illegal bit extraction"' 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-latest/build-debug/bin/llc -mtriple=nvptx64 ./crash-reports/dagisel-nvptx64/1.ll
1.      Running pass 'Function Pass Manager' on module './crash-reports/dagisel-nvptx64/1.ll'.
2.      Running pass 'NVPTX Assembly Printer' on function '@f'
 #0 0x00007f8fabb02cfa llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Support/Unix/Signals.inc:565:11
 #1 0x00007f8fabb02eab PrintStackTraceSignalHandler(void*) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Support/Unix/Signals.inc:632:1
 #2 0x00007f8fabb01506 llvm::sys::RunSignalHandlers() /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Support/Signals.cpp:104:5
 #3 0x00007f8fabb035d5 SignalHandler(int) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Support/Unix/Signals.inc:407:1
 #4 0x00007f8faa2c0980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #5 0x00007f8fa95bce87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #6 0x00007f8fa95be7f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #7 0x00007f8fa95ae3fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #8 0x00007f8fa95ae472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #9 0x00007f8fab8f7312 llvm::APInt::extractBitsAsZExtValue(unsigned int, unsigned int) const /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Support/APInt.cpp:485:3
#10 0x00007f8fba86555a llvm::NVPTXAsmPrinter::bufferLEByte(llvm::Constant const*, int, llvm::NVPTXAsmPrinter::AggBuffer*)::$_1::operator()(llvm::APInt const&) const /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:1821:20
#11 0x00007f8fba865263 llvm::NVPTXAsmPrinter::bufferLEByte(llvm::Constant const*, int, llvm::NVPTXAsmPrinter::AggBuffer*) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:1830:7
#12 0x00007f8fba8639c3 llvm::NVPTXAsmPrinter::bufferAggregateConstant(llvm::Constant const*, llvm::NVPTXAsmPrinter::AggBuffer*) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:1904:63
#13 0x00007f8fba8628c2 llvm::NVPTXAsmPrinter::printModuleLevelGV(llvm::GlobalVariable const*, llvm::raw_ostream&, bool, llvm::NVPTXSubtarget const&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:1178:25
#14 0x00007f8fba85ed19 llvm::NVPTXAsmPrinter::emitGlobals(llvm::Module const&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:834:52
#15 0x00007f8fba85e807 llvm::NVPTXAsmPrinter::emitFunctionEntryLabel() /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:453:5
#16 0x00007f8fb009d9a5 llvm::AsmPrinter::emitFunctionHeader() /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:983:26
#17 0x00007f8fb009fd73 llvm::AsmPrinter::emitFunctionBody() /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:1551:3
#18 0x00007f8fba867b4e llvm::AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/include/llvm/CodeGen/AsmPrinter.h:390:5
#19 0x00007f8fba85f761 llvm::NVPTXAsmPrinter::runOnMachineFunction(llvm::MachineFunction&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:487:29
#20 0x00007f8faf288ff5 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/CodeGen/MachineFunctionPass.cpp:91:8
#21 0x00007f8fae441cc6 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/IR/LegacyPassManager.cpp:1430:23
#22 0x00007f8fae446af2 llvm::FPPassManager::runOnModule(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/IR/LegacyPassManager.cpp:1476:16
#23 0x00007f8fae442599 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/IR/LegacyPassManager.cpp:1545:23
#24 0x00007f8fae44210d llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/IR/LegacyPassManager.cpp:535:16
#25 0x00007f8fae446dd1 llvm::legacy::PassManager::run(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/lib/IR/LegacyPassManager.cpp:1672:3
#26 0x000000000041963c compileModule(char**, llvm::LLVMContext&) /home/henry/aflplusplus-isel/llvm-project-latest/llvm/tools/llc/llc.cpp:736:41
#27 0x00000000004179e2 main /home/henry/aflplusplus-isel/llvm-project-latest/llvm/tools/llc/llc.cpp:417:13
#28 0x00007f8fa959fc87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#29 0x00000000004171ea _start (./llvm-project-latest/build-debug/bin/llc+0x4171ea)

```

### Stack Trace (Release)

```console
corrupted size vs. prev_size
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-latest/build-release/bin/llc -mtriple=nvptx64 ./crash-reports/dagisel-nvptx64/1.ll
 #0 0x00007f3e4c972a93 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMSupport.so.16git+0x1b9a93)
 #1 0x00007f3e4c9709be llvm::sys::RunSignalHandlers() (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMSupport.so.16git+0x1b79be)
 #2 0x00007f3e4c972f2f SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f3e4bc15980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #4 0x00007f3e4af11e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #5 0x00007f3e4af137f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #6 0x00007f3e4af5c837 __libc_message /build/glibc-CVJwZb/glibc-2.27/libio/../sysdeps/posix/libc_fatal.c:181:0
 #7 0x00007f3e4af638ba /build/glibc-CVJwZb/glibc-2.27/malloc/malloc.c:5342:0
 #8 0x00007f3e4af63abc malloc_consolidate /build/glibc-CVJwZb/glibc-2.27/malloc/malloc.c:4486:0
 #9 0x00007f3e4af67848 _int_malloc /build/glibc-CVJwZb/glibc-2.27/malloc/malloc.c:3713:0
#10 0x00007f3e4af6a0ac malloc /build/glibc-CVJwZb/glibc-2.27/malloc/malloc.c:3068:0
#11 0x00007f3e4b90d298 operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x93298)
#12 0x00007f3e4c89f940 llvm::formatted_raw_ostream::releaseStream() (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMSupport.so.16git+0xe6940)
#13 0x00007f3e4c89f75c llvm::formatted_raw_ostream::~formatted_raw_ostream() (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMSupport.so.16git+0xe675c)
#14 0x00007f3e4da944d5 (anonymous namespace)::MCAsmStreamer::~MCAsmStreamer() MCAsmStreamer.cpp:0:0
#15 0x00007f3e4da944f9 (anonymous namespace)::MCAsmStreamer::~MCAsmStreamer() MCAsmStreamer.cpp:0:0
#16 0x00007f3e4ed1781e llvm::AsmPrinter::~AsmPrinter() (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMAsmPrinter.so.16git+0x3081e)
#17 0x00007f3e573239f2 llvm::NVPTXAsmPrinter::~NVPTXAsmPrinter() (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMNVPTXCodeGen.so.16git+0x339f2)
#18 0x00007f3e4e14e328 llvm::FPPassManager::~FPPassManager() (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMCore.so.16git+0x203328)
#19 0x00007f3e4e14f968 (anonymous namespace)::MPPassManager::~MPPassManager() LegacyPassManager.cpp:0:0
#20 0x00007f3e4e14ff70 non-virtual thunk to (anonymous namespace)::MPPassManager::~MPPassManager() LegacyPassManager.cpp:0:0
#21 0x00007f3e4e14abc8 llvm::PMTopLevelManager::~PMTopLevelManager() (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMCore.so.16git+0x1ffbc8)
#22 0x00007f3e4e14ebb7 llvm::legacy::PassManagerImpl::~PassManagerImpl() (/home/henry/aflplusplus-isel/llvm-project-latest/build-release/bin/../lib/libLLVMCore.so.16git+0x203bb7)
#23 0x000000000040ea17 main (./llvm-project-latest/build-release/bin/llc+0x40ea17)
#24 0x00007f3e4aef4c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#25 0x00000000004092ea _start (./llvm-project-latest/build-release/bin/llc+0x4092ea)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzdWllz2zgS_jXyC0oqEuD54Af5SrJl77qSrGdrXlQgCUqc4aEhQNvKr58GQEoELMfyxFdtIvMACfT3NbobQINJk22OJ5jAD50xnrbFWhRNPXHOJs5cH39bsRoJ2i6ZKOolmgROfbsW93BGTbu9DTy4muBTJFYM5U1ZNnfy7bTJGBxqQYta3t-6QYEdtCybhJYobSlfMY4Smv7J6gzdFWI1Fj1FlHPWSkRSUFKI64YX-pacopNC_FZkYoUmOIAfnKK6q6CUw-UJGr0-wbGsMSFneyrhL2XJlgAHKiB2L1qa6jpYcsxpUbIMZV0r8a8BkITy75vr7_9Dc0BXJeUGXcNDwVr5flGjjCXdEiVdUWYTcjJQqVjVtBvE2larLW3atlsLaJsXPxi65TO0btntQt7JhnqJcFlRUGfaN96yklHOdPOzsba-g-bXbZOUrEJZA2qtG8mn4ALdPejD-yhYbPsMTpS26Wpc0BY8vd0WaMh3lFeqyJDbm88V9DAgRV8ZgMi61LajlRBrPiHw-gX8lk2WNKWYNe0S7n7A3x81_euH_9df5GHbsvlTsCTjCQBTv7LsCzznE5I93BsX9LcboHsE9jYh5_JWWl4o2XyEC3I-ZpOxvKjBCJoiQ0AkB1Pe4geNw8t4DqbqO8qSw96oTk6kPtUlkk8vP90oDZQNzSz-qletkrkU9WlU_1TV5uADD7SnGxcNsmD1lbloWmY9Uy0ack0mfdWWCcW7V0d4ZvXvfnP4JiBmoO_gq0z6_Zl0OdDNXguB-MObsreeskxBaVDnYtVUTJ5Y3W7gTPNyXXZc_k0LzkooKsvbagrW_AdLxbSkgnHRl8pTkcDxW7deN60snl9_qcUsXa-heS_ypJAOokLgLQRSVaCryFy9pS_7UCPj1Zz_fn4vbmjZAaKoq3mxrCEwQHWpP_M-lvGUyzZU_HnH6IjDPjr24eD68nz-7RzxLqngXYpkFGyZVI80HMv_IdR3ySxtqpFGR-qG24LzjnG4QLSW3NOyg8FEji9q3FCjhoTDevHaJLKuWm-9Qgaq-Lptli2tEIS_rmK1kCDQ7NHuVYF1mmmDukiKWr2ZomklYHQEMyJn_YinGlFYppqmBJvRpbSe6TAq4gt3NoQoV8L52tX1bijB4UVXK42ia1lwRWu6hJEEdAtFFQTSUhp4-AxR8mUlDu8T98jIpeXlAxa412Eo7N0UfM5Bzr0D_8I8ymmSODjN6ciy-YbrC9Wk6gzlnmB3u5daerdouGgZrZSFnQ42_fL--N-6uJcF4Dq05DOwH5DvBz4cXXfHyrVZMZogi4Ju4zOYYSlVFalwhedviDsgWOLewcYWbNd3gn2dAd1voOdyZHkV3ANgHQFdR0ZAfweYWICJn_nIVuzbGoPnhKZSvTFGilMnjhy0WLRMDW8LiGNKe33rego1LYu6u58u604_WIsVWHc2480MBusT597F0Mp2aJJi_LGY2E9SFoWopcALDfFHRkhoLJ2e3vzr7vdke4tn4JH4gisecDGTcQE6O2NrGRE6TRMKbhUaQAZn1fRMmb8LB2eHJLCQsDB3EU0axfQwJCLT2lC1lJDIEhKaQigjEDcWCz21X8gRZJHQw7nretsLLTI2RUa2SC_EB_RdKnstUL1GHKhi9FpsGHCUh8TFrzGwv_rUREZAsp1PueOwntAo8H1_HNbVeDHn1TBQqMKky3PWXp6fbIQZ308lA1qLfo4iY-TpwPaJNufL5YlqVkdWXTjB3sLVl82atRT8UAcwQ6riN4gMXl6T39XKCS4U8OG8IzDEvAhLrNjZKde1lYsD8gGU-_aaIbCMmIc7xWBLMSROD1QMUGlhQirYoI6ndfTBlROrsTIY-SSxtIOjFD_FYi1vrtSE8ZLdsvLTjaGYT2pVfEPbgiYle0Q9D6dnSdOUe1T4rUt0OsHwurdWnBtG0t_8neI8U3E-y9z4KcUxWK1o7XBDY1qX70kwImoShXf8fJtf5ISH8BsWGee1aDeXNJFAX3QeeCAjzye7aaEkNJ6BJI4TZzH1x6PqT7h8hmkWa1-Yh0wzfWJyzTcSPb7picSRJAJWsWUSWkzyLCQHMjlpss078XB9NSccxZ7Iij1h4rGf8Gi7-j_1FU1XRc0GPqYb2c9eyJP6hMCuYB_l2UqSix3T6GLLi_IwcJ_yonfj-Tz_iuSSZpsHg3WisWrPcRTl-djBLNQyBzHiu5foKzHcdd8eTIPXSVuNduSMxTvzPDdNx6vgi2tZd0ipvA-tL1_hcAkTlnQzAjN4n6fmRXjnfhhblALotAMo6cFqz_j1tnTCQJ52URETiw72YwkmonVTb6qm46imFeNrlSjqJ_1XH5qj7_lWl3k2R9fJRl1Wqpb09ai9L9W63JJ7Z1I-8a1-820zzDL3aU4fhY8bhNgY1fAwz9D_PDcOSApTu2pdlGxrV-mK6jWANS2-vLy5goWFgIX9i7EQMLHm6jbVxx56SKQLee4OemhBD2OGUUWL-hVRgBSpxpECrZRKnKdRiBYLmTVZwIqrFYsB0iFJnJTLlIvKXulL9VC1oxI6xJMz391CGse2ElxGkRYsw8mz0_kqyaObeWzb6KCNp696O_agraef7vj-3-2gtINmXnYPxdyJIMxL4xDTmLzgTkT0C361n7sydB234CjDSZ-ckwlHN4Cu1KniJAYmRtbRtag6ccKel-d_RzYhgDXYYLvjcpw_tglg7ic4EyPBS8YNJanrv06m3huLobnrvlum3reQkNfI1AemED-NyDbGwySNwwh7qDS4LpqHtNcNV7xVkzkVtFRA3Mf3DBSSgEQJPVR0_7nMcKHVSTw8eWSLoJdAkxTpGgsdtYsM3OBXhHpeFJhCY0toGHkRWoDBL3S1X5FGQpcYY6brWNKoQweKvyTICSJTkBGkktjJwJHQkK9HNbsb732UTb3cRaaOt0-4KditHK3ht9udiWFCEE1Gy1zXjCxRnMeeM4qTedNWVMDQuxjHfT0Q6Oj2rR8K3jtqsgCQG9SITS3008OoTcLz_U8_AEsgYbA0Qm1GY8_L_CcXiqdzXumOG9YeQNks1VSNsodDiplaHQDkT69UXxKAEX1Z5oaR-7PEGwgap_besEdHWSejU4kDiI1OHYdxPyQQAPMn9zGAl13-luSU7D4XZdGT6A16xhjCXI_JZdJPczVAzix9S2qnMDUyKWGHEGwG0tjilMdB9A8SNtIN9hB9bMFuugJ2bBB56CAAML0tWtHREtYwXf2n-hzxjZG5FjKYNYy7_Prqe7NW22-2zIdP3rfr3TwH6OOux9g25yQJn5PHkiyt8nc3b6BgcCRmHsFhFIJUn7l4MouwZ0mr8wiqGUOOuXJgufe26RLfohnjZ6VLHicqG9oRHdIcR-zYDYIYezGJ3KPsmGQxiemRKETJjif-id608M-Q3mdFTa68We7UZ7TNkNisGUppxxkfffKvP5U3P6hXmYz-U_o-nyJftT-MP-ra8vif50v82A3jo9UxjmFmmaYBIzDv8kP4HwRORkhEPQ_mYsFRKbdSuaQI7I6KY-xg7LrYc-DsR7Mc1qZZkJAcqoPqoglYCvR7OZOC5bfvR-2xwgD8ODwsCy747iGoQs6Z2dA-7cSqaY8_0x8bwLo6UniPFdi_AXgzVHk">