Skip to content

Failure to optimize vararg method with constant globals #58717

Open
@fredrikekre

Description

@fredrikekre

MWE: zipc (global variables) fails but zipc2 works (local variables):

const X = Float64[1, 2, 3]
const Y = Float64[4, 5, 6]

Base.@ccallable function zipc()::Float64
    s = 0.0
    for (xi, yi) in zip(X, Y)
        s += xi * yi
    end
    return s
end

Base.@ccallable function zipc2(X::Vector{Float64}, Y::Vector{Float64})::Float64
    s = 0.0
    for (xi, yi) in zip(X, Y)
        s += xi * yi
    end
    return s
end

For example with --trim:

Verifier error #1: unresolved call from statement Base.Iterators.Zip(a::Any)::Base.Iterators.Zip{Is} where Is<:Tuple{Vector{Float64}, Vararg{Vector{Float64}}}
Stacktrace:
 [1] zip(::Vector{Float64}, ::Vararg{Vector{Float64}})
   @ Base.Iterators iterators.jl:363
 [2] zipc()
   @ Base.__toplevel__ ~/zipc.jl:6

Metadata

Metadata

Assignees

No one assigned

    Labels

    compiler:inferenceType inferencetrimmingIssues with trimming functionality or PR's relevant to its performance/functionality

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions