Skip to content

Commit e440c07

Browse files
committed
Compatibility with LLVM 6.
1 parent a3b83ff commit e440c07

File tree

2 files changed

+40
-25
lines changed

2 files changed

+40
-25
lines changed

src/core/function.jl

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -150,45 +150,56 @@ isintrinsic(f::Function) = API.LLVMGetIntrinsicID(ref(f)) != 0
150150
struct Intrinsic
151151
id::UInt32
152152

153-
function Intrinsic(name::String)
154-
new(API.LLVMLookupIntrinsicID(name, length(name)))
155-
end
156-
157153
function Intrinsic(f::Function)
158154
id = API.LLVMGetIntrinsicID(ref(f))
159155
id == 0 && throw(ArgumentError("Function is not an intrinsic"))
160156
new(id)
161157
end
158+
159+
function Intrinsic(name::String)
160+
@assert version() >= v"9"
161+
new(API.LLVMLookupIntrinsicID(name, length(name)))
162+
end
162163
end
163164

164165
Base.convert(::Type{UInt32}, intr::Intrinsic) = intr.id
165166

166167
function name(intr::Intrinsic)
168+
@assert version() >= v"8"
167169
len = Ref{Csize_t}()
168170
str = API.LLVMIntrinsicGetName(intr, len)
169171
unsafe_string(convert(Ptr{Cchar}, str), len[])
170172
end
171173

172174
function name(intr::Intrinsic, params::Vector{<:LLVMType})
175+
@assert version() >= v"8"
173176
len = Ref{Csize_t}()
174177
str = API.LLVMIntrinsicCopyOverloadedName(intr, ref.(params), length(params), len)
175178
unsafe_message(convert(Ptr{Cchar}, str), len[])
176179
end
177180

178-
function FunctionType(intr::Intrinsic, params::Vector{<:LLVMType}=LLVMType[];
179-
ctx::Context=GlobalContext())
180-
LLVMType(API.LLVMIntrinsicGetType(ref(ctx), intr, ref.(params), length(params)))
181+
function isoverloaded(intr::Intrinsic)
182+
@assert version() >= v"8"
183+
convert(Core.Bool, API.LLVMIntrinsicIsOverloaded(intr))
181184
end
182185

183186
function Function(mod::Module, intr::Intrinsic, params::Vector{<:LLVMType}=LLVMType[])
187+
@assert version() >= v"8"
184188
Value(API.LLVMGetIntrinsicDeclaration(ref(mod), intr, ref.(params), length(params)))
185189
end
186190

191+
function FunctionType(intr::Intrinsic, params::Vector{<:LLVMType}=LLVMType[];
192+
ctx::Context=GlobalContext())
193+
@assert version() >= v"8"
194+
LLVMType(API.LLVMIntrinsicGetType(ref(ctx), intr, ref.(params), length(params)))
195+
end
196+
187197
function Base.show(io::IO, intr::Intrinsic)
188-
print(io, "Intrinsic($(intr.id)): \"$(name(intr))\"")
189-
if isoverloaded(intr)
190-
print(io, " (overloaded)")
198+
print(io, "Intrinsic($(intr.id))")
199+
if version() >= v"8"
200+
print(io, ": \"$(name(intr))\"")
201+
if isoverloaded(intr)
202+
print(io, " (overloaded)")
203+
end
191204
end
192205
end
193-
194-
isoverloaded(intr::Intrinsic) = convert(Core.Bool, API.LLVMIntrinsicIsOverloaded(intr))

test/core.jl

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -705,23 +705,27 @@ LLVM.Module("SomeModule", ctx) do mod
705705
@test isintrinsic(intr_fn)
706706

707707
intr = Intrinsic(intr_fn)
708-
@test isoverloaded(intr)
708+
show(devnull, intr)
709709

710-
if LLVM.version() >= v"9"
711-
@test intr == Intrinsic("llvm.sin")
712-
end
710+
if LLVM.version() >= v"8"
711+
@test isoverloaded(intr)
712+
713+
@test name(intr) == "llvm.sin"
714+
@test name(intr, [LLVM.DoubleType(ctx)]) == "llvm.sin.f64"
713715

714-
@test name(intr) == "llvm.sin"
715-
@test name(intr, [LLVM.DoubleType(ctx)]) == "llvm.sin.f64"
716+
ft = FunctionType(intr, [LLVM.DoubleType(ctx)])
717+
@test ft isa FunctionType
718+
@test return_type(ft) == LLVM.DoubleType(ctx)
716719

717-
ft = FunctionType(intr, [LLVM.DoubleType(ctx)])
718-
@test ft isa FunctionType
719-
@test return_type(ft) == LLVM.DoubleType(ctx)
720+
fn = LLVM.Function(mod, intr, [LLVM.DoubleType(ctx)])
721+
@test fn isa LLVM.Function
722+
@test eltype(llvmtype(fn)) == ft
723+
@test isintrinsic(fn)
724+
end
720725

721-
fn = LLVM.Function(mod, intr, [LLVM.DoubleType(ctx)])
722-
@test fn isa LLVM.Function
723-
@test eltype(llvmtype(fn)) == ft
724-
@test isintrinsic(fn)
726+
if LLVM.version() >= v"9"
727+
@test intr == Intrinsic("llvm.sin")
728+
end
725729
end
726730
end
727731

0 commit comments

Comments
 (0)