JuliaGPU / JuliaGPU/GPUCompiler.jl
Decoding call to jl_apply_generic fails if arguments are stored in alloca
- Dominant language
- Julia
- Stars
- 187
- Forks
- 68
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 28
Description
From: https://github.com/vchuravy/GPUifyLoops.jl/pull/58#issuecomment-490147476
Looks like the issue is that calls are first stored in an alloca.
```
┌ Warning: Decoding arguments to jl_apply_generic failed, please file a bug with a reproducer.
│ inst = %8 = call nonnull %jl_value_t addrspace(10)* @jl_apply_generic(%jl_value_t addrspace(10)** nonnull %.sub, i32 1), !dbg !43
│ bb =
│
│ top:
│ %1 = alloca [2 x %jl_value_t addrspace(10)*], align 8
│ %.sub = getelementptr inbounds [2 x %jl_value_t addrspace(10)*], [2 x %jl_value_t addrspace(10)*]* %1, i64 0, i64 0
│ %2 = call fastcc %jl_value_t addrspace(10)* @ptx_gc_pool_alloc(i64 8), !dbg !43
│ %3 = getelementptr inbounds [1 x i64], [1 x i64] addrspace(11)* %0, i64 0, i64 0, !dbg !43
│ %4 = bitcast %jl_value_t addrspace(10)* %2 to i64 addrspace(10)*, !dbg !43
│ %5 = load i64, i64 addrspace(11)* %3, align 8, !dbg !43, !tbaa !44, !invariant.load !4
│ store i64 %5, i64 addrspace(10)* %4, align 8, !dbg !43, !tbaa !47
│ store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140429411225104 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %.sub, align 8, !dbg !43
│ %6 = getelementptr inbounds [2 x %jl_value_t addrspace(10)*], [2 x %jl_value_t addrspace(10)*]* %1, i64 0, i64 1, !dbg !43
│ store %jl_value_t addrspace(10)* %2, %jl_value_t addrspace(10)** %6, align 8, !dbg !43
│ %7 = call nonnull %jl_value_t addrspace(10)* @jl_f_apply_type(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* null to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** nonnull %.sub, i32 2), !dbg !43
│ store %jl_value_t addrspace(10)* %7, %jl_value_t addrspace(10)** %.sub, align 8, !dbg !43
│ %8 = call nonnull %jl_value_t addrspace(10)* @jl_apply_generic(%jl_value_t addrspace(10)** nonnull %.sub, i32 1), !dbg !43
│ ret %jl_value_t addrspace(10)* %8, !dbg !43
│
└ @ CUDAnative ~/.julia/packages/CUDAnative/wU0tS/src/compiler/validation.jl:213
┌ Warning: Decoding arguments to jl_apply_generic failed, please file a bug with a reproducer.
│ inst = %8 = call nonnull %jl_value_t addrspace(10)* @jl_apply_generic(%jl_value_t addrspace(10)** nonnull %.sub, i32 1), !dbg !43
│ bb =
│
│ top:
│ %1 = alloca [2 x %jl_value_t addrspace(10)*], align 8
│ %.sub = getelementptr inbounds [2 x %jl_value_t addrspace(10)*], [2 x %jl_value_t addrspace(10)*]* %1, i64 0, i64 0
│ %2 = call fastcc %jl_value_t addrspace(10)* @ptx_gc_pool_alloc(i64 8), !dbg !43
│ %3 = getelementptr inbounds [1 x i64], [1 x i64] addrspace(11)* %0, i64 0, i64 0, !dbg !43
│ %4 = bitcast %jl_value_t addrspace(10)* %2 to i64 addrspace(10)*, !dbg !43
│ %5 = load i64, i64 addrspace(11)* %3, align 8, !dbg !43, !tbaa !44, !invariant.load !4
│ store i64 %5, i64 addrspace(10)* %4, align 8, !dbg !43, !tbaa !47
│ store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140429411225104 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %.sub, align 8, !dbg !43
│ %6 = getelementptr inbounds [2 x %jl_value_t addrspace(10)*], [2 x %jl_value_t addrspace(10)*]* %1, i64 0, i64 1, !dbg !43
│ store %jl_value_t addrspace(10)* %2, %jl_value_t addrspace(10)** %6, align 8, !dbg !43
│ %7 = call nonnull %jl_value_t addrspace(10)* @jl_f_apply_type(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* null to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** nonnull %.sub, i32 2), !dbg !43
│ store %jl_value_t addrspace(10)* %7, %jl_value_t addrspace(10)** %.sub, align 8, !dbg !43
│ %8 = call nonnull %jl_value_t addrspace(10)* @jl_apply_generic(%jl_value_t addrspace(10)** nonnull %.sub, i32 1), !dbg !43
│ ret %jl_value_t addrspace(10)* %8, !dbg !43
│
└ @ CUDAnative ~/.julia/packages/CUDAnative/wU0tS/src/compiler/validation.jl:213
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start at CUDAnative's compiler/validation.jl:213 and inspect the argument-decoding path for jl_apply_generic calls. Use the alloca-backed LLVM IR in this report as the reproducer; done means the call's arguments are decoded without the warning.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100