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

    <tr>
        <th>Summary</th>
        <td>
            NVPTX problems with dynamic alloca
        </td>
    </tr>

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

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

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

<pre>
    I seem to not be able to use dynamic alloca correctly but don't see anything wrong in my IR.
The IR (see below) does not originate from a higher language but was built by my application via the IRBuider.

There are two uses of alloca:
1) a small static allocation which is located in the entryblock. (I read this is the correct way)
2) a dynamic allocation %14 which is outside any loop.

`llc -march=nvptx64 -mcpu=sm_75 < dynalloc.ll`

Output below. 

Am I using the dynamic alloca incorrectly or is it not supported in NVPTX?


> //
> // Generated by LLVM NVPTX Back-End
> //

> .version 6.3
> .target sm_75
> .address_size 64

> LLVM ERROR: Cannot select: 0x5645e59e9180: i64,ch = dynamic_stackalloc 0x5645e59e9c10:1, 0x5645e59e9118, Constant:i64<0>
>   0x5645e59e9118: i64 = and 0x5645e59e9048, Constant:i64<34359738360>
>     0x5645e59e9048: i64 = add nuw 0x5645e59e9800, Constant:i64<7>
>       0x5645e59e9800: i64 = NVPTXISD::MUL_WIDE_UNSIGNED 0x5645e59e95f8, Constant:i32<4>
> 0x5645e59e95f8: i32,ch = CopyFromReg 0x5645e59ac2f8, Register:i32 %14
> 0x5645e59e93f0: i32 = Register %14
>         0x5645e59e8e40: i32 = Constant<4>
>       0x5645e59e9b40: i64 = Constant<7>
> 0x5645e59e8d70: i64 = Constant<34359738360>
>   0x5645e59e8d08: i64 = Constant<0>
> In function: eval0
> PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
> Stack dump:
> 0. Program arguments: llc -march=nvptx64 -mcpu=sm_75
> 1. Running pass 'Function Pass Manager' on module '<stdin>'.
> 2. Running pass 'NVPTX DAG->DAG Pattern Instruction Selection' on function '@eval0'
>  #0 0x00007ff4eb5de818 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
>  #1 0x00007ff4eb5dbe6b SignalHandler(int) Signals.cpp:0:0
>  #2 0x00007ff4eac42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
>  #3 0x00007ff4eac96a7c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x96a7c)
>  #4 0x00007ff4eac42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
>  #5 0x00007ff4eac287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
>  #6 0x00007ff4eb461bb5 llvm::json::operator==(llvm::json::Value const&, llvm::json::Value const&) (.cold) JSON.cpp:0:0
>  #7 0x00007ff4ed4b663a llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/home/toolchain/install/llvm-15.0.7-nvptx-release/lib/libLLVMSelectionDAG.so.15+0x2b663a)
> #8 0x00007ff4ed4b947a llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/home/toolchain/install/llvm-15.0.7-nvptx-release/lib/libLLVMSelectionDAG.so.15+0x2b947a)
> #9 0x00007ff4ed4b38f6 llvm::SelectionDAGISel::DoInstructionSelection() (/home/toolchain/install/llvm-15.0.7-nvptx-release/lib/libLLVMSelectionDAG.so.15+0x2b38f6)
> #10 0x00007ff4ed4be01c llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/home/toolchain/install/llvm-15.0.7-nvptx-release/lib/libLLVMSelectionDAG.so.15+0x2be01c)
> #11 0x00007ff4ed4c0c88 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/toolchain/install/llvm-15.0.7-nvptx-release/lib/libLLVMSelectionDAG.so.15+0x2c0c88)
> #12 0x00007ff4ed4c3567 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
> #13 0x00007ff4eccde7f3 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
> #14 0x00007ff4eba35470 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/toolchain/install/llvm-15.0.7-nvptx-release/lib/libLLVMCore.so.15+0x235470)
> #15 0x00007ff4eba355a4 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/toolchain/install/llvm-15.0.7-nvptx-release/lib/libLLVMCore.so.15+0x2355a4)
> #16 0x00007ff4eba35f3d llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/toolchain/install/llvm-15.0.7-nvptx-release/lib/libLLVMCore.so.15+0x235f3d)
> #17 0x00005645e53d466f compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
> #18 0x00005645e53cc8c6 main (/home/toolchain/install/llvm-15.0.7-nvptx-release/bin/llc+0xb8c6)
> #19 0x00007ff4eac29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
> #20 0x00007ff4eac29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
> #21 0x00005645e53cd015 _start (/home/toolchain/install/llvm-15.0.7-nvptx-release/bin/llc+0xc015)
> Aborted (core dumped)




```
; ModuleID = 'module'
source_filename = "module"
target datalayout = "e-i64:64-i128:128-v16:16-v32:32-n16:32:64"

define void @eval0(i32 %arg0, i32 %arg1, ptr %arg2, ptr %arg3, i32 %arg4, ptr %arg5, i32 %arg6, ptr %arg7, i32 %arg8) {
stack:
  %0 = alloca float, align 4
  br label %afterstack

afterstack:                                       ; preds = %stack
  %1 = call i32 @llvm.nvvm.read.ptx.sreg.tid.x()
  %2 = call i32 @llvm.nvvm.read.ptx.sreg.ntid.x()
  %3 = call i32 @llvm.nvvm.read.ptx.sreg.ctaid.x()
  %4 = call i32 @llvm.nvvm.read.ptx.sreg.ctaid.y()
  %5 = call i32 @llvm.nvvm.read.ptx.sreg.nctaid.x()
  %6 = mul i32 %4, %5
  %7 = add nsw i32 %6, %3
  %8 = mul i32 %7, %2
  %9 = add nsw i32 %8, %1
  %10 = icmp sge i32 %9, %arg0
  br i1 %10, label %L0, label %L1

L0: ; preds = %afterstack
  ret void

L1:                                               ; preds = %afterstack
  %11 = getelementptr i32, ptr %arg2, i32 %9
  %12 = load i32, ptr %11, align 4
  %13 = mul i32 %arg8, 1
  %14 = alloca float, i32 %13, align 4
  br label %L2

L2: ; preds = %L3, %L1
  %15 = phi i32 [ 0, %L1 ], [ %36, %L3 ]
  %16 = icmp slt i32 %15, %arg8
  br i1 %16, label %L3, label %L4

L3:                                               ; preds = %L2
  %17 = mul i32 0, %arg8
  %18 = add nsw i32 %17, %15
  %19 = mul i32 %18, %arg1
  %20 = add nsw i32 %19, %12
  %21 = getelementptr float, ptr %arg7, i32 %20
  %22 = load float, ptr %21, align 4
  %23 = mul i32 0, %arg6
  %24 = add nsw i32 %23, %15
  %25 = mul i32 %24, %arg1
  %26 = add nsw i32 %25, %12
  %27 = getelementptr float, ptr %arg5, i32 %26
  %28 = load float, ptr %27, align 4
  %29 = fadd float %22, %28
  %30 = getelementptr float, ptr %0, i32 0
  store float %29, ptr %30, align 4
  %31 = getelementptr float, ptr %0, i32 0
  %32 = load float, ptr %31, align 4
  %33 = mul i32 0, %arg8
  %34 = add nsw i32 %33, %15
  %35 = getelementptr float, ptr %14, i32 %34
  store float %32, ptr %35, align 4
  %36 = add nsw i32 %15, 1
  br label %L2

L4:                                               ; preds = %L2
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
declare i32 @llvm.nvvm.read.ptx.sreg.tid.x() #0

; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
declare i32 @llvm.nvvm.read.ptx.sreg.ntid.x() #0

; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
declare i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() #0

; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
declare i32 @llvm.nvvm.read.ptx.sreg.ctaid.y() #0

; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
declare i32 @llvm.nvvm.read.ptx.sreg.nctaid.x() #0

attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWtty2zjSfhr6pksqEuBJF76QJdu__3ISlz2T3b1ygSAkYQICKgC0rH36LYA6kBSVyLvZbKY8igh0f33Ah8aBIsbwpWTsOkhugmR-RWq7Uvp6seHSMn1VqHJ7_QCGsQqsAqksFAxIIZh7rA2DcitJxSkQIRQlQJXWjFqxhaK2UCoZoMw6fSBya1dcLmGjlVwCl1Bt4eF5HITzIJz-sWLw8AwByp1swYTaBGgCpWLGW1WaL7kklsFCqwoIrPhyxTQIIpc1WTJvbkMMFDUXFoqtQyfrteCUWK4kvHEC1hu5qXnJ9M7uwbpmQDQDu_FhGVCLXUgB3glFziECpiJCgLHEHqL2BjYrTlfADfgWVroInUEmrd4WQtFvYxfeA2hGSrArbpywk9jlDDZkG6BJYww1xrrZ9XYClETx0ZqqreGlTy8IpdaduII0FILCqCKargI8l29r-57GMKroug7w3FSvWQIBnnlDzsZYiCAN2xhfaruubTMkY2j3TCt4gNq4MXVh9JjA5ZELSjtXufVDaer1Wuldhj5_ffrj7wG-63jdfOJbCNCd--s9wz2TTPscF1t4fPz6qYGBG0K_jW5l-R2Aw7fxG9PG5TMd41arJXrJLPjEtJpJWWpmzKvh_2SQxkOA3o_b5-cvzwGewoxIHysTjFrXEL4naZywZMImUR66Fp7GAZrRFQR4vk_eq7GEfvMZbGvQyGlEAZp1cKLctcyUNJZIZ8VB4lkY4NujX9BXaUx7q0SW7d4wHgbEMU4mGc5x2oeGvnobvCxB1pu2RB6GgwayE1joq7WA_WA_vMzdzMTTT38-vv7tYX77-ufnl4f7z7fztmayOIkIowDP4o7BnoIzhdFxbGZqvb3Tqnpmy6MooajBfmZLbizTDXYzPQeh8SLcQXvUvV5fA07iz1nc0TxG04vjJHFF3ElcSzE7k4C8zM6pnGdBWz3Mz6h3lR4kLGpJXUVz8uyNiPDY-_R4O325BVMXFbdAoKiXoJmrGm7ZWVm7Nm7w_eRecruqizFVVYDuhHjb_zNaa_WXm3zojhtTM-MqhyM8l1TUJWtKryZmBQWh36wmlI2PLry4iQhlXa0PC4DP1DgIJ09aLTWpgOhlXTFpnTPw40J7RIkcynMtpauda2IMBCi72-UDnlzDJyLJkukAZaAkVKqsBXNSAZ4ZW3LpsomylsNoCLOpi_Pp_SjAt_PpPTwRa5mW8CCN1XVj78UXKe7XamdsPzDeXBw2Y4Oy1ogHCIcQvodhGGaLRcyKpGR5lMOT5tL6zP3h0vnCl5KI_yOyFC6S_E3xMkBTt7Q1XWZM1y6_of-_gx_18AuWFtAH5NJeBIbaYITGKEGhW4wdVXgRoLv3PH1N45Hgsn4fLWXddNCxUeM0QDfhu1c5rM57XNzFnaQko7C2K7fEv37jQnzMiNc_MRL3nY-zFJbGx_zRIOIsPcFPuvgozxYYSOEm24fQveIJetoZxziNiiIBP0199f7L-AIQ4KlauzVd6QDP3R_Kh4S-ElG7DZM0NkCpK7-XSE1cIGOqROm-___Ll8_nqZK1_S3jIk0xaRk5zJX59P7hhYmmtVnt_8Fs091x_mX-WZVsR_smoStVsQDdWaUEXREuXYlydVKIfe2KknE4zka-jIw0E4wYdhgJwQu32Wi74kYhSpph8C53xiFAOO-FNYmzH4fVtM5UyWaqqlx9GI5rBrX0x4gS6Irofea7Pbu5-ksy4KLrZ2DSywDOF-kPMzBXrULZqpP5LwvFudkPJQp7sbAwoj8mqSrZPZNTWd5W3M6n978yDOfhSRhRNwwa0jy_kJRTIW6I4fTGHaxMh5iHdbRXAP7rQXr_T4JEvSBxkmY_DFLX8ov8ROiKS7aPpxPkSd-hzK2JtuPQL4s96OGi53zsrGOUlswtAWeNuf1Jy81B_77r2ADeed86y19BcBJnYcu3uyenvt8tfdirn0aKmdKsTQbv5wkZkn4wCYkvCOaT3_51CbBr-gWBJCQ-CSTtB7LAZSsQwZaEbpvvrZAeqvWR4P-rcBa4PAlnv-o35xhcxmm6AKqqNRfskHy3tvlVbdrdeDRmpGXv-2ojBD1P6Lxri9KcplARLv_TuAsvKwT1kRY5PV04Jr293qScfHAj7FX6uCjs47I4hNdXp_pqLNH2tRXgxZbcubdvKeplrwyjBBobPzd_NHSUaVmfFs2tlWOC0syfDVmLSuc-03D3t0O6gYZRD3N_RA5QVu0YtjtiGVVryl4XXDBJKraTQnsp1EjtbqpKYokgW1XbvRwb-UuVaRqPeITccTxC-egtSt23dPSGUYCnGI2kb_FPaXyAbT5LtuCSgTuwwfEImO8uOIhe-nuc46O_mlpbvXtE3UfcFY67vUm3N-32Zt3eZseS3ewy5Y6ah_O5278nYXP31NxBLoQi1gEQwZcS4r1coUGQggkPurBMN0CtBLRa8RQu-88N7Vqz0uxGImmhet8i30GJEE1EcejoOJZvb9XYHRnHa_s-Npotx5aX4_dmf9bSRxfry2EAfDEAtWQQIf4gwvYEIbk8iHNOpB6iqsWeGJ5RDrsllB0vIc1mL5juBHFLMO-jZTsh1BKaDKHlO8GoPcYNATmt1mCWbC862Yn6qXNkIY8aHb-g7Bn52HuM2sR89NdzJ1TrsxhAM-vnb0c5upzNZ1l9asqF0HB7ySwTrGLSuhnc3KL268IhIy3thtlCkbKnFEUD09e14_6oNcVhBp3BiAerwf6eFv-gNDx2auIjGsz8I94N7WPHckPz9Yo31pIbCA9yECRz_5DceDLuWfmIfU8LJW2RSdiD48mRTfkpm9IufXD3Me7EhH8CIR7bEyXKOgMTDnjqpPKh-RTtZ17UnsjRpD_UUX5EbScdhYOo-7kXtf1EQ4Q9MGR4_UFhG6DF2b4eOsNahM8lJ21LxUNhIDyUHJT0k4PiM8lJB1GTweRklyWnvXSjTgj5d5KTnUlOM84L56HXabK8L8Zt-uDwAv8OW5TDqBnr9m1H7ElLGofDXuFLeHJqyml-hyD4DEHwWYJ0wh8kCB4kCE4u8D-KWwOJ4zP56hRmnJyJYJBmTcWKLiiy8U8tSL1FMJt33zDfwOGyaGqt9u9xpHJ7k4LQbyDVQjMGUpmtpCBVLTdclv4FvlSSgVkzWgti_e8hNlwIzWyt5X4LTQXR7AM7Pf9a5bdzUP72Hna2ib-zi9vf2UX5_TQSazUvastM8_bPT7Xs5id4CcdpuT8qX5XXuJzgCbli11Gax0mU4zS8Wl0vaJ4lZTwhaT5BDLE0JgwniCRxkZcJQVf8GoUIh0k0ibI4DcNxlicZmqS4WOBskeDcnWYrwsXY50Hp5ZV_O3ydojxCV74qGf9jKIQk24DvdIfjZH6lr_3tQVEvjcsjN9YcUSy3gl0371vXWhWCVQY23K56v4u5qrW4_vffYHs3_xUAAP__3YvDmg">