bump minimum LLVM version to 5.0
This commit is contained in:
parent
ec039c7cb1
commit
4ff90c7e0a
30 changed files with 17 additions and 268 deletions
|
@ -16,14 +16,8 @@
|
|||
#include "llvm/Object/Archive.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Bitcode/BitcodeWriterPass.h"
|
||||
|
||||
#include "llvm/IR/CallSite.h"
|
||||
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#else
|
||||
#include <cstdlib>
|
||||
#endif
|
||||
|
||||
//===----------------------------------------------------------------------===
|
||||
//
|
||||
|
@ -176,14 +170,7 @@ extern "C" void LLVMRustAddCallSiteAttribute(LLVMValueRef Instr, unsigned Index,
|
|||
LLVMRustAttribute RustAttr) {
|
||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||
Attribute Attr = Attribute::get(Call->getContext(), fromRust(RustAttr));
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
Call.addAttribute(Index, Attr);
|
||||
#else
|
||||
AttrBuilder B(Attr);
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index,
|
||||
AttributeSet::get(Call->getContext(), Index, B)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddAlignmentCallSiteAttr(LLVMValueRef Instr,
|
||||
|
@ -192,14 +179,8 @@ extern "C" void LLVMRustAddAlignmentCallSiteAttr(LLVMValueRef Instr,
|
|||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||
AttrBuilder B;
|
||||
B.addAlignmentAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index, B));
|
||||
#else
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index,
|
||||
AttributeSet::get(Call->getContext(), Index, B)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddDereferenceableCallSiteAttr(LLVMValueRef Instr,
|
||||
|
@ -208,14 +189,8 @@ extern "C" void LLVMRustAddDereferenceableCallSiteAttr(LLVMValueRef Instr,
|
|||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||
AttrBuilder B;
|
||||
B.addDereferenceableAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index, B));
|
||||
#else
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index,
|
||||
AttributeSet::get(Call->getContext(), Index, B)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddDereferenceableOrNullCallSiteAttr(LLVMValueRef Instr,
|
||||
|
@ -224,14 +199,8 @@ extern "C" void LLVMRustAddDereferenceableOrNullCallSiteAttr(LLVMValueRef Instr,
|
|||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||
AttrBuilder B;
|
||||
B.addDereferenceableOrNullAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index, B));
|
||||
#else
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index,
|
||||
AttributeSet::get(Call->getContext(), Index, B)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddFunctionAttribute(LLVMValueRef Fn, unsigned Index,
|
||||
|
@ -239,11 +208,7 @@ extern "C" void LLVMRustAddFunctionAttribute(LLVMValueRef Fn, unsigned Index,
|
|||
Function *A = unwrap<Function>(Fn);
|
||||
Attribute Attr = Attribute::get(A->getContext(), fromRust(RustAttr));
|
||||
AttrBuilder B(Attr);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
A->addAttributes(Index, B);
|
||||
#else
|
||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddAlignmentAttr(LLVMValueRef Fn,
|
||||
|
@ -252,11 +217,7 @@ extern "C" void LLVMRustAddAlignmentAttr(LLVMValueRef Fn,
|
|||
Function *A = unwrap<Function>(Fn);
|
||||
AttrBuilder B;
|
||||
B.addAlignmentAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
A->addAttributes(Index, B);
|
||||
#else
|
||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddDereferenceableAttr(LLVMValueRef Fn, unsigned Index,
|
||||
|
@ -264,11 +225,7 @@ extern "C" void LLVMRustAddDereferenceableAttr(LLVMValueRef Fn, unsigned Index,
|
|||
Function *A = unwrap<Function>(Fn);
|
||||
AttrBuilder B;
|
||||
B.addDereferenceableAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
A->addAttributes(Index, B);
|
||||
#else
|
||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddDereferenceableOrNullAttr(LLVMValueRef Fn,
|
||||
|
@ -277,11 +234,7 @@ extern "C" void LLVMRustAddDereferenceableOrNullAttr(LLVMValueRef Fn,
|
|||
Function *A = unwrap<Function>(Fn);
|
||||
AttrBuilder B;
|
||||
B.addDereferenceableOrNullAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
A->addAttributes(Index, B);
|
||||
#else
|
||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddFunctionAttrStringValue(LLVMValueRef Fn,
|
||||
|
@ -291,11 +244,7 @@ extern "C" void LLVMRustAddFunctionAttrStringValue(LLVMValueRef Fn,
|
|||
Function *F = unwrap<Function>(Fn);
|
||||
AttrBuilder B;
|
||||
B.addAttribute(Name, Value);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
F->addAttributes(Index, B);
|
||||
#else
|
||||
F->addAttributes(Index, AttributeSet::get(F->getContext(), Index, B));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustRemoveFunctionAttributes(LLVMValueRef Fn,
|
||||
|
@ -305,12 +254,7 @@ extern "C" void LLVMRustRemoveFunctionAttributes(LLVMValueRef Fn,
|
|||
Attribute Attr = Attribute::get(F->getContext(), fromRust(RustAttr));
|
||||
AttrBuilder B(Attr);
|
||||
auto PAL = F->getAttributes();
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
auto PALNew = PAL.removeAttributes(F->getContext(), Index, B);
|
||||
#else
|
||||
const AttributeSet PALNew = PAL.removeAttributes(
|
||||
F->getContext(), Index, AttributeSet::get(F->getContext(), Index, B));
|
||||
#endif
|
||||
F->setAttributes(PALNew);
|
||||
}
|
||||
|
||||
|
@ -360,7 +304,6 @@ enum class LLVMRustSynchronizationScope {
|
|||
CrossThread,
|
||||
};
|
||||
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
static SyncScope::ID fromRust(LLVMRustSynchronizationScope Scope) {
|
||||
switch (Scope) {
|
||||
case LLVMRustSynchronizationScope::SingleThread:
|
||||
|
@ -371,18 +314,6 @@ static SyncScope::ID fromRust(LLVMRustSynchronizationScope Scope) {
|
|||
report_fatal_error("bad SynchronizationScope.");
|
||||
}
|
||||
}
|
||||
#else
|
||||
static SynchronizationScope fromRust(LLVMRustSynchronizationScope Scope) {
|
||||
switch (Scope) {
|
||||
case LLVMRustSynchronizationScope::SingleThread:
|
||||
return SingleThread;
|
||||
case LLVMRustSynchronizationScope::CrossThread:
|
||||
return CrossThread;
|
||||
default:
|
||||
report_fatal_error("bad SynchronizationScope.");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildAtomicFence(LLVMBuilderRef B, LLVMAtomicOrdering Order,
|
||||
|
@ -422,18 +353,6 @@ extern "C" void LLVMRustAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm)
|
|||
|
||||
typedef DIBuilder *LLVMRustDIBuilderRef;
|
||||
|
||||
#if LLVM_VERSION_LT(5, 0)
|
||||
typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
|
||||
|
||||
namespace llvm {
|
||||
DEFINE_ISA_CONVERSION_FUNCTIONS(Metadata, LLVMMetadataRef)
|
||||
|
||||
inline Metadata **unwrap(LLVMMetadataRef *Vals) {
|
||||
return reinterpret_cast<Metadata **>(Vals);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
template <typename DIT> DIT *unwrapDIPtr(LLVMMetadataRef Ref) {
|
||||
return (DIT *)(Ref ? unwrap<MDNode>(Ref) : nullptr);
|
||||
}
|
||||
|
@ -492,13 +411,8 @@ inline LLVMRustDIFlags visibility(LLVMRustDIFlags F) {
|
|||
return static_cast<LLVMRustDIFlags>(static_cast<uint32_t>(F) & 0x3);
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_GE(4, 0)
|
||||
static DINode::DIFlags fromRust(LLVMRustDIFlags Flags) {
|
||||
DINode::DIFlags Result = DINode::DIFlags::FlagZero;
|
||||
#else
|
||||
static unsigned fromRust(LLVMRustDIFlags Flags) {
|
||||
unsigned Result = 0;
|
||||
#endif
|
||||
|
||||
switch (visibility(Flags)) {
|
||||
case LLVMRustDIFlags::FlagPrivate:
|
||||
|
@ -554,25 +468,18 @@ static unsigned fromRust(LLVMRustDIFlags Flags) {
|
|||
if (isSet(Flags & LLVMRustDIFlags::FlagRValueReference)) {
|
||||
Result |= DINode::DIFlags::FlagRValueReference;
|
||||
}
|
||||
#if LLVM_VERSION_LE(4, 0)
|
||||
if (isSet(Flags & LLVMRustDIFlags::FlagExternalTypeRef)) {
|
||||
Result |= DINode::DIFlags::FlagExternalTypeRef;
|
||||
}
|
||||
#endif
|
||||
if (isSet(Flags & LLVMRustDIFlags::FlagIntroducedVirtual)) {
|
||||
Result |= DINode::DIFlags::FlagIntroducedVirtual;
|
||||
}
|
||||
if (isSet(Flags & LLVMRustDIFlags::FlagBitField)) {
|
||||
Result |= DINode::DIFlags::FlagBitField;
|
||||
}
|
||||
#if LLVM_RUSTLLVM || LLVM_VERSION_GE(4, 0)
|
||||
if (isSet(Flags & LLVMRustDIFlags::FlagNoReturn)) {
|
||||
Result |= DINode::DIFlags::FlagNoReturn;
|
||||
}
|
||||
if (isSet(Flags & LLVMRustDIFlags::FlagMainSubprogram)) {
|
||||
Result |= DINode::DIFlags::FlagMainSubprogram;
|
||||
}
|
||||
#endif
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
@ -612,14 +519,8 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateCompileUnit(
|
|||
unsigned RuntimeVer, const char *SplitName) {
|
||||
auto *File = unwrapDI<DIFile>(FileRef);
|
||||
|
||||
#if LLVM_VERSION_GE(4, 0)
|
||||
return wrap(Builder->createCompileUnit(Lang, File, Producer, isOptimized,
|
||||
Flags, RuntimeVer, SplitName));
|
||||
#else
|
||||
return wrap(Builder->createCompileUnit(Lang, File->getFilename(),
|
||||
File->getDirectory(), Producer, isOptimized,
|
||||
Flags, RuntimeVer, SplitName));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMMetadataRef
|
||||
|
@ -657,11 +558,7 @@ extern "C" LLVMMetadataRef
|
|||
LLVMRustDIBuilderCreateBasicType(LLVMRustDIBuilderRef Builder, const char *Name,
|
||||
uint64_t SizeInBits, uint32_t AlignInBits,
|
||||
unsigned Encoding) {
|
||||
return wrap(Builder->createBasicType(Name, SizeInBits,
|
||||
#if LLVM_VERSION_LE(3, 9)
|
||||
AlignInBits,
|
||||
#endif
|
||||
Encoding));
|
||||
return wrap(Builder->createBasicType(Name, SizeInBits, Encoding));
|
||||
}
|
||||
|
||||
extern "C" LLVMMetadataRef LLVMRustDIBuilderCreatePointerType(
|
||||
|
@ -669,9 +566,7 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreatePointerType(
|
|||
uint64_t SizeInBits, uint32_t AlignInBits, const char *Name) {
|
||||
return wrap(Builder->createPointerType(unwrapDI<DIType>(PointeeTy),
|
||||
SizeInBits, AlignInBits,
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
/* DWARFAddressSpace */ None,
|
||||
#endif
|
||||
Name));
|
||||
}
|
||||
|
||||
|
@ -722,7 +617,6 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateStaticVariable(
|
|||
LLVMMetadataRef Decl = nullptr, uint32_t AlignInBits = 0) {
|
||||
llvm::GlobalVariable *InitVal = cast<llvm::GlobalVariable>(unwrap(V));
|
||||
|
||||
#if LLVM_VERSION_GE(4, 0)
|
||||
llvm::DIExpression *InitExpr = nullptr;
|
||||
if (llvm::ConstantInt *IntVal = llvm::dyn_cast<llvm::ConstantInt>(InitVal)) {
|
||||
InitExpr = Builder->createConstantValueExpression(
|
||||
|
@ -741,12 +635,6 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateStaticVariable(
|
|||
InitVal->setMetadata("dbg", VarExpr);
|
||||
|
||||
return wrap(VarExpr);
|
||||
#else
|
||||
return wrap(Builder->createGlobalVariable(
|
||||
unwrapDI<DIDescriptor>(Context), Name, LinkageName,
|
||||
unwrapDI<DIFile>(File), LineNo, unwrapDI<DIType>(Ty), IsLocalToUnit,
|
||||
InitVal, unwrapDIPtr<MDNode>(Decl)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateVariable(
|
||||
|
@ -757,12 +645,7 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateVariable(
|
|||
if (Tag == 0x100) { // DW_TAG_auto_variable
|
||||
return wrap(Builder->createAutoVariable(
|
||||
unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), LineNo,
|
||||
unwrapDI<DIType>(Ty), AlwaysPreserve, fromRust(Flags)
|
||||
#if LLVM_VERSION_GE(4, 0)
|
||||
,
|
||||
AlignInBits
|
||||
#endif
|
||||
));
|
||||
unwrapDI<DIType>(Ty), AlwaysPreserve, fromRust(Flags), AlignInBits));
|
||||
} else {
|
||||
return wrap(Builder->createParameterVariable(
|
||||
unwrapDI<DIDescriptor>(Scope), Name, ArgNo, unwrapDI<DIFile>(File),
|
||||
|
@ -854,15 +737,8 @@ LLVMRustDIBuilderCreateNameSpace(LLVMRustDIBuilderRef Builder,
|
|||
LLVMMetadataRef Scope, const char *Name,
|
||||
LLVMMetadataRef File, unsigned LineNo) {
|
||||
return wrap(Builder->createNameSpace(
|
||||
unwrapDI<DIDescriptor>(Scope), Name
|
||||
#if LLVM_VERSION_LT(5, 0)
|
||||
,
|
||||
unwrapDI<DIFile>(File), LineNo
|
||||
#endif
|
||||
#if LLVM_VERSION_GE(4, 0)
|
||||
,
|
||||
unwrapDI<DIDescriptor>(Scope), Name,
|
||||
false // ExportSymbols (only relevant for C++ anonymous namespaces)
|
||||
#endif
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -891,12 +767,7 @@ extern "C" int64_t LLVMRustDIBuilderCreateOpDeref() {
|
|||
}
|
||||
|
||||
extern "C" int64_t LLVMRustDIBuilderCreateOpPlusUconst() {
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
return dwarf::DW_OP_plus_uconst;
|
||||
#else
|
||||
// older LLVM used `plus` to behave like `plus_uconst`.
|
||||
return dwarf::DW_OP_plus;
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustWriteTypeToString(LLVMTypeRef Ty, RustStringRef Str) {
|
||||
|
@ -968,21 +839,12 @@ extern "C" void LLVMRustUnpackOptimizationDiagnostic(
|
|||
*FunctionOut = wrap(&Opt->getFunction());
|
||||
|
||||
RawRustStringOstream FilenameOS(FilenameOut);
|
||||
#if LLVM_VERSION_GE(5,0)
|
||||
DiagnosticLocation loc = Opt->getLocation();
|
||||
if (loc.isValid()) {
|
||||
*Line = loc.getLine();
|
||||
*Column = loc.getColumn();
|
||||
FilenameOS << loc.getFilename();
|
||||
}
|
||||
#else
|
||||
const DebugLoc &loc = Opt->getDebugLoc();
|
||||
if (loc) {
|
||||
*Line = loc.getLine();
|
||||
*Column = loc.getCol();
|
||||
FilenameOS << cast<DIScope>(loc.getScope())->getFilename();
|
||||
}
|
||||
#endif
|
||||
|
||||
RawRustStringOstream MessageOS(MessageOut);
|
||||
MessageOS << Opt->getMsg();
|
||||
|
@ -1402,7 +1264,6 @@ LLVMRustModuleCost(LLVMModuleRef M) {
|
|||
}
|
||||
|
||||
// Vector reductions:
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef B, LLVMValueRef Acc, LLVMValueRef Src) {
|
||||
return wrap(unwrap(B)->CreateFAddReduce(unwrap(Acc),unwrap(Src)));
|
||||
|
@ -1448,62 +1309,6 @@ LLVMRustBuildVectorReduceFMax(LLVMBuilderRef B, LLVMValueRef Src, bool NoNaN) {
|
|||
return wrap(unwrap(B)->CreateFPMaxReduce(unwrap(Src), NoNaN));
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceFMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceAdd(LLVMBuilderRef, LLVMValueRef) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceMul(LLVMBuilderRef, LLVMValueRef) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceAnd(LLVMBuilderRef, LLVMValueRef) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceOr(LLVMBuilderRef, LLVMValueRef) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceXor(LLVMBuilderRef, LLVMValueRef) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceMin(LLVMBuilderRef, LLVMValueRef, bool) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceMax(LLVMBuilderRef, LLVMValueRef, bool) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceFMin(LLVMBuilderRef, LLVMValueRef, bool) {
|
||||
return nullptr;
|
||||
}
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildVectorReduceFMax(LLVMBuilderRef, LLVMValueRef, bool) {
|
||||
return nullptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if LLVM_VERSION_LT(4, 0)
|
||||
extern "C" LLVMValueRef
|
||||
LLVMBuildExactUDiv(LLVMBuilderRef B, LLVMValueRef LHS,
|
||||
LLVMValueRef RHS, const char *Name) {
|
||||
return wrap(unwrap(B)->CreateExactUDiv(unwrap(LHS), unwrap(RHS), Name));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if LLVM_VERSION_GE(6, 0)
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildMinNum(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue