Skip to content

Commit 141aded

Browse files
committed
Initial support for LLVM 13.
1 parent 6998bf4 commit 141aded

File tree

6 files changed

+6394
-89
lines changed

6 files changed

+6394
-89
lines changed

deps/LLVMExtra/lib/llvm-api.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -401,10 +401,10 @@ class ExternalValueMaterializer : public ValueMaterializer {
401401
ExternalValueMaterializer(LLVMValueRef (*fptr)(LLVMValueRef, void *),
402402
void *data)
403403
: fptr(fptr), data(data) {}
404-
405-
private:
404+
virtual ~ExternalValueMaterializer() = default;
406405
Value *materialize(Value *V) override { return unwrap(fptr(wrap(V), data)); }
407406

407+
private:
408408
LLVMValueRef (*fptr)(LLVMValueRef, void *);
409409
void *data;
410410
};
@@ -420,13 +420,33 @@ void LLVMCloneFunctionInto(LLVMValueRef NewFunc, LLVMValueRef OldFunc,
420420
// NOTE: we ignore returns cloned, and don't return the code info
421421
SmallVector<ReturnInst *, 8> Returns;
422422

423+
#if LLVM_VERSION_MAJOR < 13
424+
LLVMCloneFunctionChangeType CFGT = Changes;
425+
#else
426+
CloneFunctionChangeType CFGT;
427+
switch (Changes) {
428+
case LLVMCloneFunctionChangeTypeLocalChangesOnly:
429+
CFGT = CloneFunctionChangeType::LocalChangesOnly;
430+
break;
431+
case LLVMCloneFunctionChangeTypeGlobalChanges:
432+
CFGT = CloneFunctionChangeType::GlobalChanges;
433+
break;
434+
case LLVMCloneFunctionChangeTypeDifferentModule:
435+
CFGT = CloneFunctionChangeType::DifferentModule;
436+
break;
437+
case LLVMCloneFunctionChangeTypeClonedModule:
438+
CFGT = CloneFunctionChangeType::ClonedModule;
439+
break;
440+
}
441+
#endif
442+
423443
ValueToValueMapTy VMap;
424444
for (unsigned i = 0; i < ValueMapElements; ++i)
425445
VMap[unwrap(ValueMap[2 * i])] = unwrap(ValueMap[2 * i + 1]);
426446
ExternalTypeRemapper TheTypeRemapper(TypeMapper, TypeMapperData);
427447
ExternalValueMaterializer TheMaterializer(Materializer, MaterializerData);
428448
CloneFunctionInto(unwrap<Function>(NewFunc), unwrap<Function>(OldFunc), VMap,
429-
Changes, Returns, NameSuffix, nullptr,
449+
CFGT, Returns, NameSuffix, nullptr,
430450
TypeMapper ? &TheTypeRemapper : nullptr,
431451
Materializer ? &TheMaterializer : nullptr);
432452
}

lib/11/libLLVM_h.jl

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,45 @@ using CEnum
22

33
const IS_LIBC_MUSL = occursin("musl", Base.MACHINE)
44

5-
if VERSION >= v"1.6.0"
6-
if Sys.islinux() && Sys.ARCH === :aarch64 && !IS_LIBC_MUSL
7-
const __off_t = Clong
8-
const off_t = __off_t
9-
elseif Sys.islinux() && Sys.ARCH === :aarch64 && IS_LIBC_MUSL
10-
const off_t = Clong
11-
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && !IS_LIBC_MUSL
12-
const __off_t = Clong
13-
const off_t = __off_t
14-
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && IS_LIBC_MUSL
15-
const off_t = Clonglong
16-
elseif Sys.islinux() && Sys.ARCH === :i686 && !IS_LIBC_MUSL
17-
const __off_t = Clong
18-
const off_t = __off_t
19-
elseif Sys.islinux() && Sys.ARCH === :i686 && IS_LIBC_MUSL
20-
const off_t = Clonglong
21-
elseif Sys.iswindows() && Sys.ARCH === :i686
22-
const off32_t = Clong
23-
const off_t = off32_t
24-
elseif Sys.islinux() && Sys.ARCH === :powerpc64le
25-
const __off_t = Clong
26-
const off_t = __off_t
27-
elseif Sys.isapple()
28-
const __darwin_off_t = Int64
29-
const off_t = __darwin_off_t
30-
elseif Sys.islinux() && Sys.ARCH === :x86_64 && !IS_LIBC_MUSL
31-
const __off_t = Clong
32-
const off_t = __off_t
33-
elseif Sys.islinux() && Sys.ARCH === :x86_64 && IS_LIBC_MUSL
34-
const off_t = Clong
35-
elseif Sys.isbsd() && !Sys.isapple()
36-
const __off_t = Int64
37-
const off_t = __off_t
38-
elseif Sys.iswindows() && Sys.ARCH === :x86_64
39-
const off32_t = Clong
40-
const off_t = off32_t
41-
end
42-
else
43-
const off_t = Csize_t
5+
if Sys.islinux() && Sys.ARCH === :aarch64 && !IS_LIBC_MUSL
6+
const __off_t = Clong
7+
const off_t = __off_t
8+
elseif Sys.islinux() && Sys.ARCH === :aarch64 && IS_LIBC_MUSL
9+
const off_t = Clong
10+
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && !IS_LIBC_MUSL
11+
const __off_t = Clong
12+
const off_t = __off_t
13+
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && IS_LIBC_MUSL
14+
const off_t = Clonglong
15+
elseif Sys.islinux() && Sys.ARCH === :i686 && !IS_LIBC_MUSL
16+
const __off_t = Clong
17+
const off_t = __off_t
18+
elseif Sys.islinux() && Sys.ARCH === :i686 && IS_LIBC_MUSL
19+
const off_t = Clonglong
20+
elseif Sys.iswindows() && Sys.ARCH === :i686
21+
const off32_t = Clong
22+
const off_t = off32_t
23+
elseif Sys.islinux() && Sys.ARCH === :powerpc64le
24+
const __off_t = Clong
25+
const off_t = __off_t
26+
elseif Sys.isapple()
27+
const __darwin_off_t = Int64
28+
const off_t = __darwin_off_t
29+
elseif Sys.islinux() && Sys.ARCH === :x86_64 && !IS_LIBC_MUSL
30+
const __off_t = Clong
31+
const off_t = __off_t
32+
elseif Sys.islinux() && Sys.ARCH === :x86_64 && IS_LIBC_MUSL
33+
const off_t = Clong
34+
elseif Sys.isbsd() && !Sys.isapple()
35+
const __off_t = Int64
36+
const off_t = __off_t
37+
elseif Sys.iswindows() && Sys.ARCH === :x86_64
38+
const off32_t = Clong
39+
const off_t = off32_t
4440
end
4541

4642

43+
4744
const LLVMBool = Cint
4845

4946
mutable struct LLVMOpaqueMemoryBuffer end
@@ -1660,13 +1657,11 @@ end
16601657
LLVMModuleFlagBehaviorAppendUnique = 5
16611658
end
16621659

1663-
@cenum __JL_Ctag_200::Int32 begin
1660+
@cenum LLVMAttributeIndex::Int32 begin
16641661
LLVMAttributeReturnIndex = 0
16651662
LLVMAttributeFunctionIndex = -1
16661663
end
16671664

1668-
const LLVMAttributeIndex = Cuint
1669-
16701665
function LLVMShutdown()
16711666
ccall((:LLVMShutdown, libllvm[]), Cvoid, ())
16721667
end

lib/12/libLLVM_h.jl

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,45 @@ using CEnum
22

33
const IS_LIBC_MUSL = occursin("musl", Base.MACHINE)
44

5-
if VERSION >= v"1.6.0"
6-
if Sys.islinux() && Sys.ARCH === :aarch64 && !IS_LIBC_MUSL
7-
const __off_t = Clong
8-
const off_t = __off_t
9-
elseif Sys.islinux() && Sys.ARCH === :aarch64 && IS_LIBC_MUSL
10-
const off_t = Clong
11-
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && !IS_LIBC_MUSL
12-
const __off_t = Clong
13-
const off_t = __off_t
14-
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && IS_LIBC_MUSL
15-
const off_t = Clonglong
16-
elseif Sys.islinux() && Sys.ARCH === :i686 && !IS_LIBC_MUSL
17-
const __off_t = Clong
18-
const off_t = __off_t
19-
elseif Sys.islinux() && Sys.ARCH === :i686 && IS_LIBC_MUSL
20-
const off_t = Clonglong
21-
elseif Sys.iswindows() && Sys.ARCH === :i686
22-
const off32_t = Clong
23-
const off_t = off32_t
24-
elseif Sys.islinux() && Sys.ARCH === :powerpc64le
25-
const __off_t = Clong
26-
const off_t = __off_t
27-
elseif Sys.isapple()
28-
const __darwin_off_t = Int64
29-
const off_t = __darwin_off_t
30-
elseif Sys.islinux() && Sys.ARCH === :x86_64 && !IS_LIBC_MUSL
31-
const __off_t = Clong
32-
const off_t = __off_t
33-
elseif Sys.islinux() && Sys.ARCH === :x86_64 && IS_LIBC_MUSL
34-
const off_t = Clong
35-
elseif Sys.isbsd() && !Sys.isapple()
36-
const __off_t = Int64
37-
const off_t = __off_t
38-
elseif Sys.iswindows() && Sys.ARCH === :x86_64
39-
const off32_t = Clong
40-
const off_t = off32_t
41-
end
42-
else
43-
const off_t = Csize_t
5+
if Sys.islinux() && Sys.ARCH === :aarch64 && !IS_LIBC_MUSL
6+
const __off_t = Clong
7+
const off_t = __off_t
8+
elseif Sys.islinux() && Sys.ARCH === :aarch64 && IS_LIBC_MUSL
9+
const off_t = Clong
10+
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && !IS_LIBC_MUSL
11+
const __off_t = Clong
12+
const off_t = __off_t
13+
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && IS_LIBC_MUSL
14+
const off_t = Clonglong
15+
elseif Sys.islinux() && Sys.ARCH === :i686 && !IS_LIBC_MUSL
16+
const __off_t = Clong
17+
const off_t = __off_t
18+
elseif Sys.islinux() && Sys.ARCH === :i686 && IS_LIBC_MUSL
19+
const off_t = Clonglong
20+
elseif Sys.iswindows() && Sys.ARCH === :i686
21+
const off32_t = Clong
22+
const off_t = off32_t
23+
elseif Sys.islinux() && Sys.ARCH === :powerpc64le
24+
const __off_t = Clong
25+
const off_t = __off_t
26+
elseif Sys.isapple()
27+
const __darwin_off_t = Int64
28+
const off_t = __darwin_off_t
29+
elseif Sys.islinux() && Sys.ARCH === :x86_64 && !IS_LIBC_MUSL
30+
const __off_t = Clong
31+
const off_t = __off_t
32+
elseif Sys.islinux() && Sys.ARCH === :x86_64 && IS_LIBC_MUSL
33+
const off_t = Clong
34+
elseif Sys.isbsd() && !Sys.isapple()
35+
const __off_t = Int64
36+
const off_t = __off_t
37+
elseif Sys.iswindows() && Sys.ARCH === :x86_64
38+
const off32_t = Clong
39+
const off_t = off32_t
4440
end
4541

4642

43+
4744
const LLVMBool = Cint
4845

4946
mutable struct LLVMOpaqueMemoryBuffer end
@@ -1941,13 +1938,11 @@ end
19411938
LLVMModuleFlagBehaviorAppendUnique = 5
19421939
end
19431940

1944-
@cenum __JL_Ctag_246::Int32 begin
1941+
@cenum LLVMAttributeIndex::Int32 begin
19451942
LLVMAttributeReturnIndex = 0
19461943
LLVMAttributeFunctionIndex = -1
19471944
end
19481945

1949-
const LLVMAttributeIndex = Cuint
1950-
19511946
function LLVMShutdown()
19521947
ccall((:LLVMShutdown, libllvm[]), Cvoid, ())
19531948
end

0 commit comments

Comments
 (0)