Skip to content

Unsupported jl_apply_generic IR pattern #576

@maleadt

Description

@maleadt
using Test

using CUDAdrv, CUDAnative

function vadd(a::AbstractArray{T}) where {T}
    Base.unsafe_store!(unsafe_convert(CUDAnative.DevicePtr{T,AS.Global}, C_NULL), 1, 1, Val(1))
    return
end

function main()
    tt = Tuple{CuDeviceArray{Float32,1,AS.Global}}
    CUDAnative.code_sass(vadd, tt)
end
┌ Warning: Decoding arguments to jl_apply_generic failed, please file a bug with a reproducer.
│   inst =   %11 = call nonnull %jl_value_t addrspace(10)* @jl_apply_generic(%jl_value_t addrspace(10)* %8, %jl_value_t addrspace(10)** nonnull %.sub, i32 2), !dbg !33
│   bb =
│    
│    julia_vadd_38.exit:                               ; preds = %found.i, %err.i
│      store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140613733290384 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %.sub, align 8, !dbg !33
│      %10 = getelementptr inbounds [4 x %jl_value_t addrspace(10)*], [4 x %jl_value_t addrspace(10)*]* %1, i64 0, i64 1, !dbg !33
│      store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140613799821008 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %10, align 8, !dbg !33
│      %11 = call nonnull %jl_value_t addrspace(10)* @jl_apply_generic(%jl_value_t addrspace(10)* %8, %jl_value_t addrspace(10)** nonnull %.sub, i32 2), !dbg !33
│      store %jl_value_t addrspace(10)* %11, %jl_value_t addrspace(10)** %.sub, align 8, !dbg !33
│      store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140613704188000 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %10, align 8, !dbg !33
│      %12 = getelementptr inbounds [4 x %jl_value_t addrspace(10)*], [4 x %jl_value_t addrspace(10)*]* %1, i64 0, i64 2, !dbg !33
│      store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140613704188000 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %12, align 8, !dbg !33
│      %13 = getelementptr inbounds [4 x %jl_value_t addrspace(10)*], [4 x %jl_value_t addrspace(10)*]* %1, i64 0, i64 3, !dbg !33
│      store %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140613798418304 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** %13, align 8, !dbg !33
│      %14 = call nonnull %jl_value_t addrspace(10)* @jl_apply_generic(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140613817508064 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t addrspace(10)** nonnull %.sub, i32 4), !dbg !33
│      ret void
│    
└ @ CUDAnative ~/Julia/pkg/CUDAnative/src/compiler/validation.jl:222
ERROR: InvalidIRError: compiling vadd(CuDeviceArray{Float32,1,CUDAnative.AS.Global}) resulted in invalid LLVM IR
Reason: unsupported use of an undefined name (use of 'unsafe_convert')
Stacktrace:
 [1] vadd at /home/tbesard/Julia/wip2.jl:6
Reason: unsupported call to the Julia runtime (call to jl_apply_generic)
Stacktrace:
 [1] vadd at /home/tbesard/Julia/wip2.jl:6
Reason: unsupported dynamic function invocation (call to unsafe_store!)
Stacktrace:
 [1] vadd at /home/tbesard/Julia/wip2.jl:6
Stacktrace:
 [1] check_ir(::CUDAnative.CompilerJob, ::LLVM.Module) at /home/tbesard/Julia/pkg/CUDAnative/src/compiler/validation.jl:114
 [2] macro expansion at /home/tbesard/Julia/pkg/CUDAnative/src/compiler/driver.jl:188 [inlined]
 [3] macro expansion at /home/tbesard/Julia/pkg/depot/packages/TimerOutputs/7zSea/src/TimerOutput.jl:216 [inlined]
 [4] #codegen#130(::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::typeof(CUDAnative.codegen), ::Symbol, ::CUDAnative.CompilerJob) at /home/tbesard/Julia/pkg/CUDAnative/src/compiler/driver.jl:186
 [5] codegen at /home/tbesard/Julia/pkg/CUDAnative/src/compiler/driver.jl:57 [inlined]
 [6] code_sass(::Base.TTY, ::CUDAnative.CompilerJob) at /home/tbesard/Julia/pkg/CUDAnative/src/reflection.jl:110
 [7] #code_sass#189(::VersionNumber, ::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(CUDAnative.code_sass), ::Base.TTY, ::Any, ::Any) at /home/tbesard/Julia/pkg/CUDAnative/src/reflection.jl:100
 [8] code_sass(::Base.TTY, ::Any, ::Any) at /home/tbesard/Julia/pkg/CUDAnative/src/reflection.jl:98
 [9] #code_sass#190(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(CUDAnative.code_sass), ::Any, ::Any) at /home/tbesard/Julia/pkg/CUDAnative/src/reflection.jl:134
 [10] code_sass at /home/tbesard/Julia/pkg/CUDAnative/src/reflection.jl:134 [inlined]
 [11] main() at /home/tbesard/Julia/wip2.jl:12
 [12] top-level scope at REPL[5]:1

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions