Skip to content

Commit 2cde6e7

Browse files
committed
Adapt to new llvmcall.
1 parent e7174d8 commit 2cde6e7

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

src/device/intrinsics/atomics.jl

+11-5
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,18 @@ for A in (AS.Generic, AS.Global, AS.Shared)
158158
T_untyped_ptr = "i8 addrspace($(convert(Int, A)))*"
159159
T_typed_ptr = "$(T_val) addrspace($(convert(Int, A)))*"
160160
end
161-
@eval @inline atomic_add!(ptr::LLVMPtr{$T,$A}, val::$T) = Base.llvmcall(
162-
$("declare $T_val @$intr($T_typed_ptr, $T_val)",
163-
"%ptr = bitcast $T_untyped_ptr %0 to $T_typed_ptr
161+
mod = """
162+
declare $T_val @$intr($T_typed_ptr, $T_val)
163+
164+
define $T_val @entry($T_untyped_ptr %0, $T_val %1) #0 {
165+
%ptr = bitcast $T_untyped_ptr %0 to $T_typed_ptr
164166
%rv = call $T_val @$intr($T_typed_ptr %ptr, $T_val %1)
165-
ret $T_val %rv"), $T,
166-
Tuple{LLVMPtr{$T,$A}, $T}, ptr, val)
167+
ret $T_val %rv
168+
}
169+
170+
attributes #0 = { alwaysinline }"""
171+
@eval @inline atomic_add!(ptr::LLVMPtr{$T,$A}, val::$T) =
172+
Base.llvmcall(($mod, "entry"), $T, Tuple{LLVMPtr{$T,$A}, $T}, ptr, val)
167173
end
168174

169175
# declare i32 @llvm.nvvm.atomic.load.inc.32.p0i32(i32* address, i32 val)

src/device/llvm.jl

+11-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,14 @@
22

33
@inline trap() = ccall("llvm.trap", llvmcall, Cvoid, ())
44

5-
@inline assume(cond::Bool) =
6-
Base.llvmcall(("declare void @llvm.assume(i1)",
7-
"%cond = icmp eq i8 %0, 1
8-
call void @llvm.assume(i1 %cond)
9-
ret void"), Nothing, Tuple{Bool}, cond)
5+
@inline assume(cond::Bool) = Base.llvmcall(("""
6+
declare void @llvm.assume(i1)
7+
8+
define void @entry(i8) #0 {
9+
%cond = icmp eq i8 %0, 1
10+
call void @llvm.assume(i1 %cond)
11+
ret void
12+
}
13+
14+
attributes #0 = { alwaysinline }""", "entry"),
15+
Nothing, Tuple{Bool}, cond)

0 commit comments

Comments
 (0)