Skip to content

Commit

Permalink
Merge pull request #273 from maleadt/tb/llvm13
Browse files Browse the repository at this point in the history
Initial support for LLVM 13.
  • Loading branch information
maleadt authored Nov 30, 2021
2 parents 1f1b93c + 2036391 commit 72dcad1
Show file tree
Hide file tree
Showing 9 changed files with 6,398 additions and 93 deletions.
4 changes: 2 additions & 2 deletions Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ version = "1.3.0"

[[LLVMExtra_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "9436f02a0c9f726d914cc6539f87850701be18fc"
git-tree-sha1 = "c5fc4bef251ecd37685bea1c4068a9cfa41e8b9a"
uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab"
version = "0.0.12+0"
version = "0.0.13+0"

[[LibCURL]]
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
Expand Down
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ Unicode = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"

[compat]
CEnum = "0.2, 0.3, 0.4"
LLVMExtra_jll = "=0.0.12"
LLVMExtra_jll = "=0.0.13"
julia = "1.6"
26 changes: 23 additions & 3 deletions deps/LLVMExtra/lib/llvm-api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -401,10 +401,10 @@ class ExternalValueMaterializer : public ValueMaterializer {
ExternalValueMaterializer(LLVMValueRef (*fptr)(LLVMValueRef, void *),
void *data)
: fptr(fptr), data(data) {}

private:
virtual ~ExternalValueMaterializer() = default;
Value *materialize(Value *V) override { return unwrap(fptr(wrap(V), data)); }

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

#if LLVM_VERSION_MAJOR < 13
LLVMCloneFunctionChangeType CFGT = Changes;
#else
CloneFunctionChangeType CFGT;
switch (Changes) {
case LLVMCloneFunctionChangeTypeLocalChangesOnly:
CFGT = CloneFunctionChangeType::LocalChangesOnly;
break;
case LLVMCloneFunctionChangeTypeGlobalChanges:
CFGT = CloneFunctionChangeType::GlobalChanges;
break;
case LLVMCloneFunctionChangeTypeDifferentModule:
CFGT = CloneFunctionChangeType::DifferentModule;
break;
case LLVMCloneFunctionChangeTypeClonedModule:
CFGT = CloneFunctionChangeType::ClonedModule;
break;
}
#endif

ValueToValueMapTy VMap;
for (unsigned i = 0; i < ValueMapElements; ++i)
VMap[unwrap(ValueMap[2 * i])] = unwrap(ValueMap[2 * i + 1]);
ExternalTypeRemapper TheTypeRemapper(TypeMapper, TypeMapperData);
ExternalValueMaterializer TheMaterializer(Materializer, MaterializerData);
CloneFunctionInto(unwrap<Function>(NewFunc), unwrap<Function>(OldFunc), VMap,
Changes, Returns, NameSuffix, nullptr,
CFGT, Returns, NameSuffix, nullptr,
TypeMapper ? &TheTypeRemapper : nullptr,
Materializer ? &TheMaterializer : nullptr);
}
Expand Down
2 changes: 1 addition & 1 deletion deps/build_local.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ using Pkg, Scratch, Preferences, Libdl
# 1. Ensure that an appropriate LLVM_full_jll is installed
Pkg.activate(; temp=true)
llvm_assertions = try
cglobal(:_ZN4llvm24DisableABIBreakingChecksE, Cvoid)
cglobal((:_ZN4llvm24DisableABIBreakingChecksE, Base.libllvm_path()), Cvoid)
false
catch
true
Expand Down
79 changes: 37 additions & 42 deletions lib/11/libLLVM_h.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,45 @@ using CEnum

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

if VERSION >= v"1.6.0"
if Sys.islinux() && Sys.ARCH === :aarch64 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :aarch64 && IS_LIBC_MUSL
const off_t = Clong
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && IS_LIBC_MUSL
const off_t = Clonglong
elseif Sys.islinux() && Sys.ARCH === :i686 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :i686 && IS_LIBC_MUSL
const off_t = Clonglong
elseif Sys.iswindows() && Sys.ARCH === :i686
const off32_t = Clong
const off_t = off32_t
elseif Sys.islinux() && Sys.ARCH === :powerpc64le
const __off_t = Clong
const off_t = __off_t
elseif Sys.isapple()
const __darwin_off_t = Int64
const off_t = __darwin_off_t
elseif Sys.islinux() && Sys.ARCH === :x86_64 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :x86_64 && IS_LIBC_MUSL
const off_t = Clong
elseif Sys.isbsd() && !Sys.isapple()
const __off_t = Int64
const off_t = __off_t
elseif Sys.iswindows() && Sys.ARCH === :x86_64
const off32_t = Clong
const off_t = off32_t
end
else
const off_t = Csize_t
if Sys.islinux() && Sys.ARCH === :aarch64 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :aarch64 && IS_LIBC_MUSL
const off_t = Clong
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && IS_LIBC_MUSL
const off_t = Clonglong
elseif Sys.islinux() && Sys.ARCH === :i686 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :i686 && IS_LIBC_MUSL
const off_t = Clonglong
elseif Sys.iswindows() && Sys.ARCH === :i686
const off32_t = Clong
const off_t = off32_t
elseif Sys.islinux() && Sys.ARCH === :powerpc64le
const __off_t = Clong
const off_t = __off_t
elseif Sys.isapple()
const __darwin_off_t = Int64
const off_t = __darwin_off_t
elseif Sys.islinux() && Sys.ARCH === :x86_64 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :x86_64 && IS_LIBC_MUSL
const off_t = Clong
elseif Sys.isbsd() && !Sys.isapple()
const __off_t = Int64
const off_t = __off_t
elseif Sys.iswindows() && Sys.ARCH === :x86_64
const off32_t = Clong
const off_t = off32_t
end



const LLVMBool = Cint

mutable struct LLVMOpaqueMemoryBuffer end
Expand Down Expand Up @@ -1660,13 +1657,11 @@ end
LLVMModuleFlagBehaviorAppendUnique = 5
end

@cenum __JL_Ctag_200::Int32 begin
@cenum LLVMAttributeIndex::Int32 begin
LLVMAttributeReturnIndex = 0
LLVMAttributeFunctionIndex = -1
end

const LLVMAttributeIndex = Cuint

function LLVMShutdown()
ccall((:LLVMShutdown, libllvm[]), Cvoid, ())
end
Expand Down
79 changes: 37 additions & 42 deletions lib/12/libLLVM_h.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,45 @@ using CEnum

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

if VERSION >= v"1.6.0"
if Sys.islinux() && Sys.ARCH === :aarch64 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :aarch64 && IS_LIBC_MUSL
const off_t = Clong
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && IS_LIBC_MUSL
const off_t = Clonglong
elseif Sys.islinux() && Sys.ARCH === :i686 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :i686 && IS_LIBC_MUSL
const off_t = Clonglong
elseif Sys.iswindows() && Sys.ARCH === :i686
const off32_t = Clong
const off_t = off32_t
elseif Sys.islinux() && Sys.ARCH === :powerpc64le
const __off_t = Clong
const off_t = __off_t
elseif Sys.isapple()
const __darwin_off_t = Int64
const off_t = __darwin_off_t
elseif Sys.islinux() && Sys.ARCH === :x86_64 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :x86_64 && IS_LIBC_MUSL
const off_t = Clong
elseif Sys.isbsd() && !Sys.isapple()
const __off_t = Int64
const off_t = __off_t
elseif Sys.iswindows() && Sys.ARCH === :x86_64
const off32_t = Clong
const off_t = off32_t
end
else
const off_t = Csize_t
if Sys.islinux() && Sys.ARCH === :aarch64 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :aarch64 && IS_LIBC_MUSL
const off_t = Clong
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && startswith(string(Sys.ARCH), "arm") && IS_LIBC_MUSL
const off_t = Clonglong
elseif Sys.islinux() && Sys.ARCH === :i686 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :i686 && IS_LIBC_MUSL
const off_t = Clonglong
elseif Sys.iswindows() && Sys.ARCH === :i686
const off32_t = Clong
const off_t = off32_t
elseif Sys.islinux() && Sys.ARCH === :powerpc64le
const __off_t = Clong
const off_t = __off_t
elseif Sys.isapple()
const __darwin_off_t = Int64
const off_t = __darwin_off_t
elseif Sys.islinux() && Sys.ARCH === :x86_64 && !IS_LIBC_MUSL
const __off_t = Clong
const off_t = __off_t
elseif Sys.islinux() && Sys.ARCH === :x86_64 && IS_LIBC_MUSL
const off_t = Clong
elseif Sys.isbsd() && !Sys.isapple()
const __off_t = Int64
const off_t = __off_t
elseif Sys.iswindows() && Sys.ARCH === :x86_64
const off32_t = Clong
const off_t = off32_t
end



const LLVMBool = Cint

mutable struct LLVMOpaqueMemoryBuffer end
Expand Down Expand Up @@ -1941,13 +1938,11 @@ end
LLVMModuleFlagBehaviorAppendUnique = 5
end

@cenum __JL_Ctag_246::Int32 begin
@cenum LLVMAttributeIndex::Int32 begin
LLVMAttributeReturnIndex = 0
LLVMAttributeFunctionIndex = -1
end

const LLVMAttributeIndex = Cuint

function LLVMShutdown()
ccall((:LLVMShutdown, libllvm[]), Cvoid, ())
end
Expand Down
Loading

0 comments on commit 72dcad1

Please sign in to comment.