diff --git a/cbackend.cpp b/cbackend.cpp index ab414770..454f8ba1 100644 --- a/cbackend.cpp +++ b/cbackend.cpp @@ -529,8 +529,10 @@ namespace { bool IgnoreName = false, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 const llvm::AttrListPtr &PAL = llvm::AttrListPtr() -#else // LLVM 3.3+ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 const llvm::AttributeSet &PAL = llvm::AttributeSet() +#else // LLVM 5.0+ + const llvm::AttributeList &PAL = llvm::AttributeList() #endif ); llvm::raw_ostream &printSimpleType(llvm::raw_ostream &Out, llvm::Type *Ty, @@ -540,8 +542,10 @@ namespace { void printStructReturnPointerFunctionType(llvm::raw_ostream &Out, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 const llvm::AttrListPtr &PAL, -#else // LLVM 3.3+ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 const llvm::AttributeSet &PAL, +#else // LLVM 5.0+ + const llvm::AttributeList &PAL, #endif llvm::PointerType *Ty); @@ -786,8 +790,10 @@ std::string CWriter::getArrayName(llvm::ArrayType *AT) { void CWriter::printStructReturnPointerFunctionType(llvm::raw_ostream &Out, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 const llvm::AttrListPtr &PAL, -#else // LLVM 3.3+ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 const llvm::AttributeSet &PAL, +#else // LLVM 5.0+ + const llvm::AttributeList &PAL, #endif llvm::PointerType *TheTy) { llvm::FunctionType *FTy = llvm::cast(TheTy->getElementType()); @@ -805,8 +811,10 @@ void CWriter::printStructReturnPointerFunctionType(llvm::raw_ostream &Out, llvm::Type *ArgTy = *I; #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 if (PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::ByVal)) { -#else // LLVM 3.3+ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::ByVal)) { +#else // LLVM 5.0+ + if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::ByVal)) { #endif assert(ArgTy->isPointerTy()); ArgTy = llvm::cast(ArgTy)->getElementType(); @@ -814,8 +822,10 @@ void CWriter::printStructReturnPointerFunctionType(llvm::raw_ostream &Out, printType(FunctionInnards, ArgTy, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::SExt), -#else // LLVM 3.3+ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt), +#else // LLVM 5.0+ + PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::SExt), #endif ""); PrintedType = true; @@ -831,8 +841,10 @@ void CWriter::printStructReturnPointerFunctionType(llvm::raw_ostream &Out, printType(Out, RetTy, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 PAL.getParamAttributes(0).hasAttribute(llvm::Attributes::SExt), -#else // LLVM 3.3+ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 PAL.getParamAttributes(0).hasAttribute(llvm::AttributeSet::ReturnIndex, llvm::Attribute::SExt), +#else // LLVM 5.0+ + PAL.getParamAttributes(0).hasAttribute(llvm::AttributeList::ReturnIndex, llvm::Attribute::SExt), #endif FunctionInnards.str()); } @@ -929,8 +941,10 @@ llvm::raw_ostream &CWriter::printType(llvm::raw_ostream &Out, llvm::Type *Ty, bool IgnoreName, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 const llvm::AttrListPtr &PAL -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 const llvm::AttributeSet &PAL +#else // LLVM 5.0+ + const llvm::AttributeList &PAL #endif ) { @@ -951,8 +965,10 @@ llvm::raw_ostream &CWriter::printType(llvm::raw_ostream &Out, llvm::Type *Ty, llvm::Type *ArgTy = *I; #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 if (PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::ByVal)) { -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::ByVal)) { +#else // LLVM 5.0+ + if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::ByVal)) { #endif assert(ArgTy->isPointerTy()); ArgTy = llvm::cast(ArgTy)->getElementType(); @@ -962,8 +978,10 @@ llvm::raw_ostream &CWriter::printType(llvm::raw_ostream &Out, llvm::Type *Ty, printType(FunctionInnards, ArgTy, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::SExt), -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt), +#else // LLVM 5.0+ + PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::SExt), #endif ""); ++Idx; @@ -979,8 +997,10 @@ llvm::raw_ostream &CWriter::printType(llvm::raw_ostream &Out, llvm::Type *Ty, printType(Out, FTy->getReturnType(), #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 PAL.getParamAttributes(0).hasAttribute(llvm::Attributes::SExt), -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 PAL.getParamAttributes(0).hasAttribute(llvm::AttributeSet::ReturnIndex, llvm::Attribute::SExt), +#else // LLVM 5.0+ + PAL.getParamAttributes(0).hasAttribute(llvm::AttributeList::ReturnIndex, llvm::Attribute::SExt), #endif FunctionInnards.str()); return Out; @@ -3164,8 +3184,10 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) { llvm::FunctionType *FT = llvm::cast(F->getFunctionType()); #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 const llvm::AttrListPtr &PAL = F->getAttributes(); -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 const llvm::AttributeSet &PAL = F->getAttributes(); +#else // LLVM 5.0+ + const llvm::AttributeList &PAL = F->getAttributes(); #endif std::string tstr; @@ -3202,8 +3224,10 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) { llvm::Type *ArgTy = I->getType(); #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 if (PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::ByVal)) { -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::ByVal)) { +#else // LLVM 5.0+ + if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::ByVal)) { #endif ArgTy = llvm::cast(ArgTy)->getElementType(); #if ISPC_LLVM_VERSION <= ISPC_LLVM_3_7 /* 3.2, 3.3, 3.4, 3.5, 3.6, 3.7 */ @@ -3215,8 +3239,10 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) { printType(FunctionInnards, ArgTy, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::SExt), -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt), +#else // LLVM 5.0+ + PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::SExt), #endif ArgName); PrintedArg = true; @@ -3241,8 +3267,10 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) { llvm::Type *ArgTy = *I; #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 if (PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::ByVal)) { -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::ByVal)) { +#else // LLVM 5.0+ + if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::ByVal)) { #endif assert(ArgTy->isPointerTy()); ArgTy = llvm::cast(ArgTy)->getElementType(); @@ -3250,8 +3278,10 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) { printType(FunctionInnards, ArgTy, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::SExt) -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt) +#else // LLVM 5.0+ + PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::SExt) #endif ); PrintedArg = true; @@ -3287,8 +3317,10 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) { printType(Out, RetTy, #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 PAL.getParamAttributes(0).hasAttribute(llvm::Attributes::SExt), -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 PAL.getParamAttributes(0).hasAttribute(llvm::AttributeSet::ReturnIndex, llvm::Attribute::SExt), +#else // LLVM 5.0+ + PAL.getParamAttributes(0).hasAttribute(llvm::AttributeList::ReturnIndex, llvm::Attribute::SExt), #endif FunctionInnards.str()); } @@ -4223,8 +4255,10 @@ void CWriter::visitCallInst(llvm::CallInst &I) { // parameter instead of passing it to the call. #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 const llvm::AttrListPtr &PAL = I.getAttributes(); -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 const llvm::AttributeSet &PAL = I.getAttributes(); +#else // LLVM 5.0+ + const llvm::AttributeList &PAL = I.getAttributes(); #endif bool hasByVal = I.hasByValArgument(); @@ -4336,8 +4370,10 @@ void CWriter::visitCallInst(llvm::CallInst &I) { printType(Out, FTy->getParamType(ArgNo), #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 PAL.getParamAttributes(ArgNo+1).hasAttribute(llvm::Attributes::SExt) -#else /* LLVM 3.3+ */ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 PAL.getParamAttributes(ArgNo+1).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt) +#else // LLVM 5.0+ + PAL.getParamAttributes(ArgNo+1).hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::SExt) #endif ); Out << ')'; diff --git a/func.cpp b/func.cpp index b010c3b7..925bbc2b 100644 --- a/func.cpp +++ b/func.cpp @@ -420,8 +420,10 @@ Function::emitCode(FunctionEmitContext *ctx, llvm::Function *function, ( #if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 // 3.2 (function->getFnAttributes().hasAttribute(llvm::Attributes::AlwaysInline) == false) -#else // LLVM 3.3+ +#elif ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 (function->getAttributes().getFnAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::AlwaysInline) == false) +#else // LLVM 5.0+ + (function->getAttributes().getFnAttributes().hasAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::AlwaysInline) == false) #endif && costEstimate > CHECK_MASK_AT_FUNCTION_START_COST); diff --git a/ispc.cpp b/ispc.cpp index b6e81e2b..49e846ae 100644 --- a/ispc.cpp +++ b/ispc.cpp @@ -1158,11 +1158,19 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo #endif attrBuilder.addAttribute("target-cpu", this->m_cpu); attrBuilder.addAttribute("target-features", this->m_attributes); +#if ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 this->m_tf_attributes = new llvm::AttributeSet( llvm::AttributeSet::get( *g->ctx, llvm::AttributeSet::FunctionIndex, attrBuilder)); +#else // LLVM 5.0+ + this->m_tf_attributes = new llvm::AttributeList( + llvm::AttributeList::get( + *g->ctx, + llvm::AttributeList::FunctionIndex, + attrBuilder)); +#endif } #endif @@ -1477,7 +1485,11 @@ Target::StructOffset(llvm::Type *type, int element, void Target::markFuncWithTargetAttr(llvm::Function* func) { #if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3 if (m_tf_attributes) { +#if ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 func->addAttributes(llvm::AttributeSet::FunctionIndex, *m_tf_attributes); +#else // LLVM 5.0+ + func->addAttributes(llvm::AttributeList::FunctionIndex, *m_tf_attributes); +#endif } #endif } diff --git a/ispc.h b/ispc.h index a2f0d440..43e0912d 100644 --- a/ispc.h +++ b/ispc.h @@ -72,7 +72,11 @@ // Forward declarations of a number of widely-used LLVM types namespace llvm { +#if ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 class AttributeSet; +#else // LLVM 5.0+ + class AttributeList; +#endif class BasicBlock; class Constant; class ConstantValue; @@ -86,13 +90,11 @@ namespace llvm { class TargetMachine; class Type; class Value; -#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 class DIFile; class DIType; +#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 class DIDescriptor; #else // LLVM 3.7+ - class DIFile; - class DIType; class DIScope; #endif } @@ -348,7 +350,11 @@ private: /** Target-specific LLVM attribute, which has to be attached to every function to ensure that it is generated for correct target architecture. This is requirement was introduced in LLVM 3.3 */ +#if ISPC_LLVM_VERSION <= ISPC_LLVM_4_0 llvm::AttributeSet* m_tf_attributes; +#else // LLVM 5.0+ + llvm::AttributeList* m_tf_attributes; +#endif #endif /** Native vector width of the vector instruction set. Note that this