Merge pull request #1057 from ncos/ispc-versions
New LLVM version macro
This commit is contained in:
40
builtins.cpp
40
builtins.cpp
@@ -47,10 +47,8 @@
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Attributes.h>
|
||||
#endif
|
||||
#if defined(LLVM_3_2)
|
||||
#include <llvm/LLVMContext.h>
|
||||
#include <llvm/Module.h>
|
||||
#include <llvm/Type.h>
|
||||
@@ -66,7 +64,7 @@
|
||||
#include <llvm/IR/Intrinsics.h>
|
||||
#include <llvm/IR/DerivedTypes.h>
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5
|
||||
#include <llvm/Linker/Linker.h>
|
||||
#else
|
||||
#include <llvm/Linker.h>
|
||||
@@ -784,13 +782,13 @@ void
|
||||
AddBitcodeToModule(const unsigned char *bitcode, int length,
|
||||
llvm::Module *module, SymbolTable *symbolTable, bool warn) {
|
||||
llvm::StringRef sb = llvm::StringRef((char *)bitcode, length);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::MemoryBuffer *bcBuf = llvm::MemoryBuffer::getMemBuffer(sb);
|
||||
#else // LLVM 3.6+
|
||||
llvm::MemoryBufferRef bcBuf = llvm::MemoryBuffer::getMemBuffer(sb)->getMemBufferRef();
|
||||
#endif
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5
|
||||
llvm::ErrorOr<llvm::Module *> ModuleOrErr = llvm::parseBitcodeFile(bcBuf, *g->ctx);
|
||||
if (std::error_code EC = ModuleOrErr.getError())
|
||||
Error(SourcePos(), "Error parsing stdlib bitcode: %s", EC.message().c_str());
|
||||
@@ -850,7 +848,7 @@ AddBitcodeToModule(const unsigned char *bitcode, int length,
|
||||
// architecture and investigate what happened.
|
||||
// Generally we allow library DataLayout to be subset of module
|
||||
// DataLayout or library DataLayout to be empty.
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5
|
||||
if (!VerifyDataLayoutCompatibility(module->getDataLayoutStr(),
|
||||
bcModule->getDataLayoutStr())
|
||||
&& warn) {
|
||||
@@ -880,7 +878,7 @@ AddBitcodeToModule(const unsigned char *bitcode, int length,
|
||||
|
||||
std::string(linkError);
|
||||
if (llvm::Linker::LinkModules(module, bcModule
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
, llvm::Linker::DestroySource,
|
||||
&linkError))
|
||||
Error(SourcePos(), "Error linking stdlib bitcode: %s", linkError.c_str());
|
||||
@@ -917,7 +915,7 @@ lDefineConstantInt(const char *name, int val, llvm::Module *module,
|
||||
symbolTable->AddVariable(sym);
|
||||
|
||||
if (m->diBuilder != NULL) {
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIFile file;
|
||||
llvm::DIType diType = sym->type->GetDIType(file);
|
||||
Assert(diType.Verify());
|
||||
@@ -932,7 +930,7 @@ lDefineConstantInt(const char *name, int val, llvm::Module *module,
|
||||
// have the DW_AT_artifical attribute. It's not clear if this
|
||||
// matters for anything though.
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::DIGlobalVariable var = m->diBuilder->createGlobalVariable(
|
||||
name,
|
||||
file,
|
||||
@@ -940,7 +938,7 @@ lDefineConstantInt(const char *name, int val, llvm::Module *module,
|
||||
diType,
|
||||
true /* static */,
|
||||
sym->storagePtr);
|
||||
#elif defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_6 // LLVM 3.6
|
||||
llvm::Constant *sym_const_storagePtr = llvm::dyn_cast<llvm::Constant>(sym->storagePtr);
|
||||
Assert(sym_const_storagePtr);
|
||||
llvm::DIGlobalVariable var = m->diBuilder->createGlobalVariable(
|
||||
@@ -965,10 +963,10 @@ lDefineConstantInt(const char *name, int val, llvm::Module *module,
|
||||
true /* static */,
|
||||
sym_const_storagePtr);
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
Assert(var.Verify());
|
||||
#else // LLVM 3.7+
|
||||
//comming soon
|
||||
//coming soon
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -984,7 +982,7 @@ lDefineConstantIntFunc(const char *name, int val, llvm::Module *module,
|
||||
|
||||
llvm::Function *func = module->getFunction(name);
|
||||
Assert(func != NULL); // it should be declared already...
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
func->addFnAttr(llvm::Attributes::AlwaysInline);
|
||||
#else // LLVM 3.3+
|
||||
func->addFnAttr(llvm::Attribute::AlwaysInline);
|
||||
@@ -1019,7 +1017,7 @@ lDefineProgramIndex(llvm::Module *module, SymbolTable *symbolTable) {
|
||||
symbolTable->AddVariable(sym);
|
||||
|
||||
if (m->diBuilder != NULL) {
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIFile file;
|
||||
llvm::DIType diType = sym->type->GetDIType(file);
|
||||
Assert(diType.Verify());
|
||||
@@ -1030,7 +1028,7 @@ lDefineProgramIndex(llvm::Module *module, SymbolTable *symbolTable) {
|
||||
llvm::DIType *diType = sym->type->GetDIType(file);
|
||||
// Assert(diType.Verify());
|
||||
#endif
|
||||
#if defined(LLVM_3_6)// LLVM 3.6+
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_6 // LLVM 3.6
|
||||
llvm::Constant *sym_const_storagePtr = llvm::dyn_cast<llvm::Constant>(sym->storagePtr);
|
||||
Assert(sym_const_storagePtr);
|
||||
llvm::DIGlobalVariable var = m->diBuilder->createGlobalVariable(
|
||||
@@ -1042,7 +1040,7 @@ lDefineProgramIndex(llvm::Module *module, SymbolTable *symbolTable) {
|
||||
diType,
|
||||
false /* static */,
|
||||
sym_const_storagePtr);
|
||||
#elif defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::DIGlobalVariable var = m->diBuilder->createGlobalVariable(
|
||||
sym->name.c_str(),
|
||||
file,
|
||||
@@ -1050,7 +1048,7 @@ lDefineProgramIndex(llvm::Module *module, SymbolTable *symbolTable) {
|
||||
diType,
|
||||
false /* static */,
|
||||
sym->storagePtr);
|
||||
#else
|
||||
#else // LLVM 3.7+
|
||||
llvm::Constant *sym_const_storagePtr = llvm::dyn_cast<llvm::Constant>(sym->storagePtr);
|
||||
Assert(sym_const_storagePtr);
|
||||
m->diBuilder->createGlobalVariable(
|
||||
@@ -1062,11 +1060,11 @@ lDefineProgramIndex(llvm::Module *module, SymbolTable *symbolTable) {
|
||||
diType,
|
||||
false /* static */,
|
||||
sym_const_storagePtr);
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#endif
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
Assert(var.Verify());
|
||||
#else // LLVM 3.7+
|
||||
//comming soon
|
||||
//coming soon
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
205
cbackend.cpp
205
cbackend.cpp
@@ -32,7 +32,7 @@
|
||||
|
||||
#include "llvmutil.h"
|
||||
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/CallingConv.h"
|
||||
@@ -41,7 +41,7 @@
|
||||
#include "llvm/Intrinsics.h"
|
||||
#include "llvm/IntrinsicInst.h"
|
||||
#include "llvm/InlineAsm.h"
|
||||
#else
|
||||
#else // LLVM 3.3+
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/CallingConv.h"
|
||||
@@ -52,29 +52,29 @@
|
||||
#include "llvm/IR/InlineAsm.h"
|
||||
#endif
|
||||
#include "llvm/Pass.h"
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 // <= 3.6
|
||||
#include "llvm/PassManager.h"
|
||||
#else // LLVM 3.7+
|
||||
#include "llvm/IR/LegacyPassManager.h"
|
||||
#endif
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include "llvm/TypeFinder.h"
|
||||
#else // LLVM_3_3 +
|
||||
#else // LLVM_3_3+
|
||||
#include "llvm/IR/TypeFinder.h"
|
||||
#endif
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#if defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_4 // 3.2, 3.3, 3.4
|
||||
#include "llvm/Support/InstIterator.h"
|
||||
#else
|
||||
#else // 3.5+
|
||||
#include "llvm/IR/InstIterator.h"
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
#include "llvm/Analysis/FindUsedTypes.h"
|
||||
#endif
|
||||
#include "llvm/Analysis/LoopInfo.h"
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5
|
||||
#include "llvm/IR/Verifier.h"
|
||||
#include <llvm/IR/IRPrintingPasses.h>
|
||||
#include "llvm/IR/CallSite.h"
|
||||
@@ -100,16 +100,16 @@
|
||||
#include "llvm/MC/MCRegisterInfo.h"
|
||||
#include "llvm/MC/MCSubtargetInfo.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 // 3.2
|
||||
#include "llvm/DataLayout.h"
|
||||
#else // LLVM 3.3+
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#endif
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 // 3.2
|
||||
#include "llvm/Support/InstVisitor.h"
|
||||
#elif defined (LLVM_3_3) || defined (LLVM_3_4)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_4 // 3.3, 3.4
|
||||
#include "llvm/InstVisitor.h"
|
||||
#else // LLVM 3.5+
|
||||
#include "llvm/IR/InstVisitor.h"
|
||||
@@ -119,7 +119,7 @@
|
||||
#include "llvm/Support/Host.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_4 // 3.2, 3.3, 3.4
|
||||
#include "llvm/Config/config.h"
|
||||
#endif
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
namespace constant_scanner {
|
||||
class constant_iterator : public std::iterator<std::forward_iterator_tag,
|
||||
const llvm::Constant, ptrdiff_t> {
|
||||
llvm::const_inst_iterator InstI; // Method instruction iterator
|
||||
llvm::const_inst_iterator InstI; // Method instruction iterator
|
||||
unsigned OpIdx; // Operand index
|
||||
|
||||
bool isAtConstant() const {
|
||||
@@ -206,7 +206,7 @@ namespace {
|
||||
// To avoid walking constant expressions multiple times and other IR
|
||||
// objects, we keep several helper maps.
|
||||
llvm::DenseSet<const llvm::Value*> VisitedConstants;
|
||||
#if !defined (LLVM_3_2) && !defined (LLVM_3_3) && !defined (LLVM_3_4) && !defined (LLVM_3_5)// LLVN 3.6++
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
llvm::DenseSet<const llvm::Metadata*> VisitedMDNodes;
|
||||
#endif
|
||||
llvm::DenseSet<llvm::Type*> VisitedTypes;
|
||||
@@ -312,12 +312,12 @@ namespace {
|
||||
/// walked in other ways. GlobalValues, basic blocks, instructions, and
|
||||
/// inst operands are all explicitly enumerated.
|
||||
void incorporateValue(const llvm::Value *V) {
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // 3.2, 3.3, 3.4, 3.5
|
||||
if (const llvm::MDNode *M = llvm::dyn_cast<llvm::MDNode>(V)) {
|
||||
incorporateMDNode(M);
|
||||
return;
|
||||
}
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
if (const llvm::MetadataAsValue *MV = llvm::dyn_cast<llvm::MetadataAsValue>(V)) {
|
||||
incorporateMDNode(MV->getMetadata());
|
||||
return;
|
||||
@@ -339,7 +339,7 @@ namespace {
|
||||
incorporateValue(*I);
|
||||
}
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // 3.2, 3.3, 3.4, 3.5
|
||||
void incorporateMDNode(const llvm::MDNode *V) {
|
||||
|
||||
// Already visited?
|
||||
@@ -397,7 +397,7 @@ namespace {
|
||||
public:
|
||||
CBEMCAsmInfo() {
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_4 // 3.2, 3.3, 3.4
|
||||
GlobalPrefix = "";
|
||||
#endif
|
||||
PrivateGlobalPrefix = "";
|
||||
@@ -449,7 +449,7 @@ namespace {
|
||||
OpaqueCounter(0), NextAnonValueNumber(0),
|
||||
includeName(incname ? incname : "generic_defs.h"),
|
||||
vectorWidth(vecwidth) {
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 // <= 3.6
|
||||
initializeLoopInfoPass(*llvm::PassRegistry::getPassRegistry());
|
||||
#else // LLVM 3.7+
|
||||
initializeLoopInfoWrapperPassPass(*llvm::PassRegistry::getPassRegistry());
|
||||
@@ -461,7 +461,7 @@ namespace {
|
||||
virtual const char *getPassName() const { return "C backend"; }
|
||||
|
||||
void getAnalysisUsage(llvm::AnalysisUsage &AU) const {
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 // <= 3.6
|
||||
AU.addRequired<llvm::LoopInfo>();
|
||||
#else // LLVM 3.7+
|
||||
AU.addRequired<llvm::LoopInfoWrapperPass>();
|
||||
@@ -477,7 +477,7 @@ namespace {
|
||||
if (F.hasAvailableExternallyLinkage())
|
||||
return false;
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 // <= 3.6
|
||||
LI = &getAnalysis<llvm::LoopInfo>();
|
||||
#else // LLVM 3.7+
|
||||
LI = &getAnalysis<llvm::LoopInfoWrapperPass>().getLoopInfo();
|
||||
@@ -519,9 +519,9 @@ namespace {
|
||||
bool isSigned = false,
|
||||
const std::string &VariableName = "",
|
||||
bool IgnoreName = false,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
const llvm::AttrListPtr &PAL = llvm::AttrListPtr()
|
||||
#else
|
||||
#else // LLVM 3.3+
|
||||
const llvm::AttributeSet &PAL = llvm::AttributeSet()
|
||||
#endif
|
||||
);
|
||||
@@ -530,9 +530,9 @@ namespace {
|
||||
const std::string &NameSoFar = "");
|
||||
|
||||
void printStructReturnPointerFunctionType(llvm::raw_ostream &Out,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
const llvm::AttrListPtr &PAL,
|
||||
#else
|
||||
#else // LLVM 3.3+
|
||||
const llvm::AttributeSet &PAL,
|
||||
#endif
|
||||
llvm::PointerType *Ty);
|
||||
@@ -610,7 +610,7 @@ namespace {
|
||||
if (llvm::isa<llvm::CmpInst>(I) && llvm::isa<llvm::VectorType>(I.getType()) == false)
|
||||
return true;
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // 3.5+
|
||||
// This instruction returns a struct on LLVM older than 3.4, and can not be inlined
|
||||
if (llvm::isa<llvm::AtomicCmpXchgInst>(I))
|
||||
return false;
|
||||
@@ -628,7 +628,7 @@ namespace {
|
||||
// Must not be used in inline asm, extractelement, or shufflevector.
|
||||
if (I.hasOneUse()) {
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // 3.5+
|
||||
const llvm::Instruction &User = llvm::cast<llvm::Instruction>(*I.user_back());
|
||||
#else
|
||||
const llvm::Instruction &User = llvm::cast<llvm::Instruction>(*I.use_back());
|
||||
@@ -640,7 +640,7 @@ namespace {
|
||||
}
|
||||
|
||||
// Only inline instruction it if it's use is in the same BB as the inst.
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // 3.5+
|
||||
return I.getParent() == llvm::cast<llvm::Instruction>(I.user_back())->getParent();
|
||||
#else
|
||||
return I.getParent() == llvm::cast<llvm::Instruction>(I.use_back())->getParent();
|
||||
@@ -776,9 +776,9 @@ std::string CWriter::getArrayName(llvm::ArrayType *AT) {
|
||||
/// return type, except, instead of printing the type as void (*)(Struct*, ...)
|
||||
/// print it as "Struct (*)(...)", for struct return functions.
|
||||
void CWriter::printStructReturnPointerFunctionType(llvm::raw_ostream &Out,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
const llvm::AttrListPtr &PAL,
|
||||
#else
|
||||
#else // LLVM 3.3+
|
||||
const llvm::AttributeSet &PAL,
|
||||
#endif
|
||||
llvm::PointerType *TheTy) {
|
||||
@@ -795,18 +795,18 @@ void CWriter::printStructReturnPointerFunctionType(llvm::raw_ostream &Out,
|
||||
if (PrintedType)
|
||||
FunctionInnards << ", ";
|
||||
llvm::Type *ArgTy = *I;
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
if (PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::ByVal)) {
|
||||
#else
|
||||
#else // LLVM 3.3+
|
||||
if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::ByVal)) {
|
||||
#endif
|
||||
assert(ArgTy->isPointerTy());
|
||||
ArgTy = llvm::cast<llvm::PointerType>(ArgTy)->getElementType();
|
||||
}
|
||||
printType(FunctionInnards, ArgTy,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::SExt),
|
||||
#else
|
||||
#else // LLVM 3.3+
|
||||
PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt),
|
||||
#endif
|
||||
"");
|
||||
@@ -821,9 +821,9 @@ void CWriter::printStructReturnPointerFunctionType(llvm::raw_ostream &Out,
|
||||
}
|
||||
FunctionInnards << ')';
|
||||
printType(Out, RetTy,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
PAL.getParamAttributes(0).hasAttribute(llvm::Attributes::SExt),
|
||||
#else
|
||||
#else // LLVM 3.3+
|
||||
PAL.getParamAttributes(0).hasAttribute(llvm::AttributeSet::ReturnIndex, llvm::Attribute::SExt),
|
||||
#endif
|
||||
FunctionInnards.str());
|
||||
@@ -919,9 +919,9 @@ CWriter::printSimpleType(llvm::raw_ostream &Out, llvm::Type *Ty, bool isSigned,
|
||||
llvm::raw_ostream &CWriter::printType(llvm::raw_ostream &Out, llvm::Type *Ty,
|
||||
bool isSigned, const std::string &NameSoFar,
|
||||
bool IgnoreName,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
const llvm::AttrListPtr &PAL
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
const llvm::AttributeSet &PAL
|
||||
#endif
|
||||
) {
|
||||
@@ -941,9 +941,9 @@ llvm::raw_ostream &CWriter::printType(llvm::raw_ostream &Out, llvm::Type *Ty,
|
||||
for (llvm::FunctionType::param_iterator I = FTy->param_begin(),
|
||||
E = FTy->param_end(); I != E; ++I) {
|
||||
llvm::Type *ArgTy = *I;
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
if (PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::ByVal)) {
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::ByVal)) {
|
||||
#endif
|
||||
assert(ArgTy->isPointerTy());
|
||||
@@ -952,9 +952,9 @@ llvm::raw_ostream &CWriter::printType(llvm::raw_ostream &Out, llvm::Type *Ty,
|
||||
if (I != FTy->param_begin())
|
||||
FunctionInnards << ", ";
|
||||
printType(FunctionInnards, ArgTy,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::SExt),
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt),
|
||||
#endif
|
||||
"");
|
||||
@@ -969,9 +969,9 @@ llvm::raw_ostream &CWriter::printType(llvm::raw_ostream &Out, llvm::Type *Ty,
|
||||
}
|
||||
FunctionInnards << ')';
|
||||
printType(Out, FTy->getReturnType(),
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
PAL.getParamAttributes(0).hasAttribute(llvm::Attributes::SExt),
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
PAL.getParamAttributes(0).hasAttribute(llvm::AttributeSet::ReturnIndex, llvm::Attribute::SExt),
|
||||
#endif
|
||||
FunctionInnards.str());
|
||||
@@ -1585,7 +1585,8 @@ void CWriter::printConstant(llvm::Constant *CPV, bool Static) {
|
||||
Out << CI->getZExtValue() << "ull";
|
||||
else if (Ty->getPrimitiveSizeInBits() > 64) {
|
||||
Out << "\"";
|
||||
const uint64_t *Ptr64 = CPV->getUniqueInteger().getRawData();
|
||||
//const uint64_t *Ptr64 = CPV->getUniqueInteger().getRawData();
|
||||
const uint64_t *Ptr64 = CI->getValue().getRawData();
|
||||
for (int i = 0; i < Ty->getPrimitiveSizeInBits(); i++) {
|
||||
Out << ((Ptr64[i / (sizeof (uint64_t) * 8)] >> (i % (sizeof (uint64_t) * 8))) & 1);
|
||||
}
|
||||
@@ -1956,9 +1957,9 @@ std::string CWriter::GetValueName(const llvm::Value *Operand) {
|
||||
|
||||
// Resolve potential alias.
|
||||
if (const llvm::GlobalAlias *GA = llvm::dyn_cast<llvm::GlobalAlias>(Operand)) {
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 /* LLVM 3.5+ */
|
||||
if (const llvm::Value *V = GA->getAliasee())
|
||||
#else
|
||||
#else /* <= LLVM 3.4 */
|
||||
if (const llvm::Value *V = GA->resolveAliasedGlobal(false))
|
||||
#endif
|
||||
Operand = V;
|
||||
@@ -2332,7 +2333,7 @@ static SpecialGlobalClass getGlobalVariableClass(const llvm::GlobalVariable *GV)
|
||||
|
||||
// Otherwise, if it is other metadata, don't print it. This catches things
|
||||
// like debug information.
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 /* LLVM 3.5+ */
|
||||
// Here we compare char *
|
||||
if (!strcmp(GV->getSection(), "llvm.metadata"))
|
||||
#else
|
||||
@@ -2390,7 +2391,7 @@ bool CWriter::doInitialization(llvm::Module &M) {
|
||||
#endif
|
||||
TAsm = new CBEMCAsmInfo();
|
||||
MRI = new llvm::MCRegisterInfo();
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 // LLVM 3.4+
|
||||
TCtx = new llvm::MCContext(TAsm, MRI, NULL);
|
||||
#else
|
||||
TCtx = new llvm::MCContext(*TAsm, *MRI, NULL);
|
||||
@@ -2514,7 +2515,7 @@ bool CWriter::doInitialization(llvm::Module &M) {
|
||||
if (I->hasExternalLinkage() || I->hasExternalWeakLinkage() ||
|
||||
I->hasCommonLinkage())
|
||||
Out << "extern ";
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
else if (I->hasDLLImportStorageClass())
|
||||
#else
|
||||
else if (I->hasDLLImportLinkage())
|
||||
@@ -2691,7 +2692,7 @@ bool CWriter::doInitialization(llvm::Module &M) {
|
||||
|
||||
if (I->hasLocalLinkage())
|
||||
Out << "static ";
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
else if (I->hasDLLImportStorageClass()) Out << "__declspec(dllimport) ";
|
||||
else if (I->hasDLLExportStorageClass()) Out << "__declspec(dllexport) ";
|
||||
#else
|
||||
@@ -3040,7 +3041,7 @@ void CWriter::printContainedStructs(llvm::Type *Ty,
|
||||
|
||||
if (llvm::StructType *ST = llvm::dyn_cast<llvm::StructType>(Ty)) {
|
||||
// Check to see if we have already printed this struct.
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) // LLVM 3.6+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
if (!Printed.insert(Ty).second) return;
|
||||
#else
|
||||
if (!Printed.insert(Ty)) return;
|
||||
@@ -3051,7 +3052,7 @@ void CWriter::printContainedStructs(llvm::Type *Ty,
|
||||
Out << ";\n\n";
|
||||
}
|
||||
if (llvm::ArrayType *AT = llvm::dyn_cast<llvm::ArrayType>(Ty)) {
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) // LLVM 3.6+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
if (!Printed.insert(Ty).second) return;
|
||||
#else
|
||||
if (!Printed.insert(Ty)) return;
|
||||
@@ -3065,7 +3066,7 @@ void CWriter::printContainedStructs(llvm::Type *Ty,
|
||||
|
||||
void CWriter::printContainedArrays(llvm::ArrayType *ATy,
|
||||
llvm::SmallPtrSet<llvm::Type *, 16> &Printed) {
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) // LLVM 3.6+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
if (!Printed.insert(ATy).second)
|
||||
return;
|
||||
#else
|
||||
@@ -3086,7 +3087,7 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) {
|
||||
bool isStructReturn = F->hasStructRetAttr();
|
||||
|
||||
if (F->hasLocalLinkage()) Out << "static ";
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
if (F->hasDLLImportStorageClass()) Out << "__declspec(dllimport) ";
|
||||
if (F->hasDLLExportStorageClass()) Out << "__declspec(dllexport) ";
|
||||
#else
|
||||
@@ -3109,9 +3110,9 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) {
|
||||
|
||||
// Loop over the arguments, printing them...
|
||||
llvm::FunctionType *FT = llvm::cast<llvm::FunctionType>(F->getFunctionType());
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
const llvm::AttrListPtr &PAL = F->getAttributes();
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
const llvm::AttributeSet &PAL = F->getAttributes();
|
||||
#endif
|
||||
|
||||
@@ -3143,18 +3144,18 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) {
|
||||
else
|
||||
ArgName = "";
|
||||
llvm::Type *ArgTy = I->getType();
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
if (PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::ByVal)) {
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::ByVal)) {
|
||||
#endif
|
||||
ArgTy = llvm::cast<llvm::PointerType>(ArgTy)->getElementType();
|
||||
ByValParams.insert(I);
|
||||
}
|
||||
printType(FunctionInnards, ArgTy,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::SExt),
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt),
|
||||
#endif
|
||||
ArgName);
|
||||
@@ -3178,18 +3179,18 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) {
|
||||
for (; I != E; ++I) {
|
||||
if (PrintedArg) FunctionInnards << ", ";
|
||||
llvm::Type *ArgTy = *I;
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
if (PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::ByVal)) {
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
if (PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::ByVal)) {
|
||||
#endif
|
||||
assert(ArgTy->isPointerTy());
|
||||
ArgTy = llvm::cast<llvm::PointerType>(ArgTy)->getElementType();
|
||||
}
|
||||
printType(FunctionInnards, ArgTy,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
PAL.getParamAttributes(Idx).hasAttribute(llvm::Attributes::SExt)
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
PAL.getParamAttributes(Idx).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt)
|
||||
#endif
|
||||
);
|
||||
@@ -3224,9 +3225,9 @@ void CWriter::printFunctionSignature(const llvm::Function *F, bool Prototype) {
|
||||
|
||||
// Print out the return type and the signature built above.
|
||||
printType(Out, RetTy,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
PAL.getParamAttributes(0).hasAttribute(llvm::Attributes::SExt),
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
PAL.getParamAttributes(0).hasAttribute(llvm::AttributeSet::ReturnIndex, llvm::Attribute::SExt),
|
||||
#endif
|
||||
FunctionInnards.str());
|
||||
@@ -3412,7 +3413,7 @@ void CWriter::visitSwitchInst(llvm::SwitchInst &SI) {
|
||||
printPHICopiesForSuccessor (SI.getParent(), Succ, 2);
|
||||
printBranchToBlock(SI.getParent(), Succ, 2);
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
if (llvm::Function::iterator(Succ) == std::next(llvm::Function::iterator(SI.getParent())))
|
||||
#else
|
||||
if (llvm::Function::iterator(Succ) == llvm::next(llvm::Function::iterator(SI.getParent())))
|
||||
@@ -3437,7 +3438,7 @@ bool CWriter::isGotoCodeNecessary(llvm::BasicBlock *From, llvm::BasicBlock *To)
|
||||
/// FIXME: This should be reenabled, but loop reordering safe!!
|
||||
return true;
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
if (std::next(llvm::Function::iterator(From)) != llvm::Function::iterator(To))
|
||||
#else
|
||||
if (llvm::next(llvm::Function::iterator(From)) != llvm::Function::iterator(To))
|
||||
@@ -4079,9 +4080,9 @@ void CWriter::lowerIntrinsics(llvm::Function &F) {
|
||||
const char *BuiltinName = "";
|
||||
#define GET_GCC_BUILTIN_NAME
|
||||
#define Intrinsic llvm::Intrinsic
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include "llvm/Intrinsics.gen"
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
#include "llvm/IR/Intrinsics.gen"
|
||||
#endif
|
||||
#undef Intrinsic
|
||||
@@ -4092,7 +4093,7 @@ void CWriter::lowerIntrinsics(llvm::Function &F) {
|
||||
// All other intrinsic calls we must lower.
|
||||
llvm::Instruction *Before = 0;
|
||||
if (CI != &BB->front())
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
Before = std::prev(llvm::BasicBlock::iterator(CI));
|
||||
#else
|
||||
Before = prior(llvm::BasicBlock::iterator(CI));
|
||||
@@ -4148,9 +4149,9 @@ void CWriter::visitCallInst(llvm::CallInst &I) {
|
||||
|
||||
// If this is a call to a struct-return function, assign to the first
|
||||
// parameter instead of passing it to the call.
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
const llvm::AttrListPtr &PAL = I.getAttributes();
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
const llvm::AttributeSet &PAL = I.getAttributes();
|
||||
#endif
|
||||
bool hasByVal = I.hasByValArgument();
|
||||
@@ -4258,9 +4259,9 @@ void CWriter::visitCallInst(llvm::CallInst &I) {
|
||||
(*AI)->getType() != FTy->getParamType(ArgNo)) {
|
||||
Out << '(';
|
||||
printType(Out, FTy->getParamType(ArgNo),
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
PAL.getParamAttributes(ArgNo+1).hasAttribute(llvm::Attributes::SExt)
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
PAL.getParamAttributes(ArgNo+1).hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::SExt)
|
||||
#endif
|
||||
);
|
||||
@@ -4268,9 +4269,9 @@ void CWriter::visitCallInst(llvm::CallInst &I) {
|
||||
}
|
||||
// Check if the argument is expected to be passed by value.
|
||||
if (I.paramHasAttr(ArgNo+1,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
llvm::Attributes::ByVal
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
llvm::Attribute::ByVal
|
||||
#endif
|
||||
)) {
|
||||
@@ -4296,9 +4297,9 @@ bool CWriter::visitBuiltinCall(llvm::CallInst &I, llvm::Intrinsic::ID ID,
|
||||
const char *BuiltinName = "";
|
||||
#define GET_GCC_BUILTIN_NAME
|
||||
#define Intrinsic llvm::Intrinsic
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include "llvm/Intrinsics.gen"
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
#include "llvm/IR/Intrinsics.gen"
|
||||
#endif
|
||||
#undef Intrinsic
|
||||
@@ -4817,7 +4818,7 @@ void CWriter::visitAtomicRMWInst(llvm::AtomicRMWInst &AI) {
|
||||
|
||||
void CWriter::visitAtomicCmpXchgInst(llvm::AtomicCmpXchgInst &ACXI) {
|
||||
Out << "(";
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
printType(Out, ACXI.getType(), false);
|
||||
Out << "::init("; // LLVM cmpxchg returns a struct, so we need make an assighment properly
|
||||
#endif
|
||||
@@ -4828,7 +4829,7 @@ void CWriter::visitAtomicCmpXchgInst(llvm::AtomicCmpXchgInst &ACXI) {
|
||||
Out << ", ";
|
||||
writeOperand(ACXI.getNewValOperand());
|
||||
Out << ")";
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
Out << ", true /* There is no way to learn the value of this bit inside ISPC, so making it constant */)";
|
||||
#endif
|
||||
Out << ")";
|
||||
@@ -4932,7 +4933,11 @@ SmearCleanupPass::getShuffleSmearValue(llvm::Instruction* inst) const {
|
||||
// Check that the shuffle is a broadcast of the element of the first vector,
|
||||
// i.e. mask vector is vector with equal elements of expected size.
|
||||
if (!(mask &&
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
(mask->isNullValue() || (shuffleInst->getMask()->getType()->isVectorTy() && llvm::dyn_cast<llvm::ConstantVector>(shuffleInst->getMask())->getSplatValue() != 0 ) ) &&
|
||||
#else
|
||||
(mask->isNullValue() || (shuffleInst->getMask()->getSplatValue() != 0))&&
|
||||
#endif
|
||||
llvm::dyn_cast<llvm::VectorType>(mask->getType())->getNumElements() == vectorWidth)) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -4973,8 +4978,14 @@ SmearCleanupPass::getShuffleSmearValue(llvm::Instruction* inst) const {
|
||||
return NULL;
|
||||
}
|
||||
llvm::Instruction *extractCall =
|
||||
llvm::ExtractElementInst::Create(shuffleInst->getOperand(0), mask->getSplatValue(),
|
||||
"__extract_element", inst);
|
||||
llvm::ExtractElementInst::Create(shuffleInst->getOperand(0),
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
// mask is of VectorType
|
||||
llvm::dyn_cast<llvm::ConstantVector>(mask)->getSplatValue(),
|
||||
#else
|
||||
mask->getSplatValue(),
|
||||
#endif
|
||||
"__extract_element", inst);
|
||||
return extractCall;
|
||||
}
|
||||
|
||||
@@ -5150,10 +5161,10 @@ public:
|
||||
notFunc =
|
||||
llvm::dyn_cast<llvm::Function>(m->getOrInsertFunction("__not", mt, mt, NULL));
|
||||
assert(notFunc != NULL);
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
notFunc->addFnAttr(llvm::Attributes::NoUnwind);
|
||||
notFunc->addFnAttr(llvm::Attributes::ReadNone);
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
notFunc->addFnAttr(llvm::Attribute::NoUnwind);
|
||||
notFunc->addFnAttr(llvm::Attribute::ReadNone);
|
||||
#endif
|
||||
@@ -5162,10 +5173,10 @@ public:
|
||||
llvm::dyn_cast<llvm::Function>(m->getOrInsertFunction("__and_not1", mt, mt, mt,
|
||||
NULL));
|
||||
assert(andNotFuncs[0] != NULL);
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
andNotFuncs[0]->addFnAttr(llvm::Attributes::NoUnwind);
|
||||
andNotFuncs[0]->addFnAttr(llvm::Attributes::ReadNone);
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
andNotFuncs[0]->addFnAttr(llvm::Attribute::NoUnwind);
|
||||
andNotFuncs[0]->addFnAttr(llvm::Attribute::ReadNone);
|
||||
#endif
|
||||
@@ -5173,10 +5184,10 @@ public:
|
||||
llvm::dyn_cast<llvm::Function>(m->getOrInsertFunction("__and_not2", mt, mt, mt,
|
||||
NULL));
|
||||
assert(andNotFuncs[1] != NULL);
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
andNotFuncs[1]->addFnAttr(llvm::Attributes::NoUnwind);
|
||||
andNotFuncs[1]->addFnAttr(llvm::Attributes::ReadNone);
|
||||
#else
|
||||
#else /* LLVM 3.3+ */
|
||||
andNotFuncs[1]->addFnAttr(llvm::Attribute::NoUnwind);
|
||||
andNotFuncs[1]->addFnAttr(llvm::Attribute::ReadNone);
|
||||
#endif
|
||||
@@ -5304,7 +5315,7 @@ bool
|
||||
WriteCXXFile(llvm::Module *module, const char *fn, int vectorWidth,
|
||||
const char *includeName) {
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 // 3.2, 3.3, 3.4, 3.5, 3.6
|
||||
llvm::PassManager pm;
|
||||
#else // LLVM 3.7+
|
||||
llvm::legacy::PassManager pm;
|
||||
@@ -5316,13 +5327,13 @@ WriteCXXFile(llvm::Module *module, const char *fn, int vectorWidth,
|
||||
pm.add(new llvm::TargetData(module));
|
||||
#endif
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3 // 3.2, 3.3
|
||||
int flags = 0;
|
||||
#else
|
||||
#else // LLVM 3.4+
|
||||
llvm::sys::fs::OpenFlags flags = llvm::sys::fs::F_None;
|
||||
#endif
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // 3.2, 3.3, 3.4, 3.5
|
||||
std::string error;
|
||||
#else // LLVM 3.6+
|
||||
std::error_code error;
|
||||
@@ -5330,7 +5341,7 @@ WriteCXXFile(llvm::Module *module, const char *fn, int vectorWidth,
|
||||
|
||||
llvm::tool_output_file *of = new llvm::tool_output_file(fn, error, flags);
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // 3.2, 3.3, 3.4, 3.5
|
||||
if (error.size()) {
|
||||
#else // LLVM 3.6+
|
||||
if (error) {
|
||||
@@ -5350,7 +5361,7 @@ WriteCXXFile(llvm::Module *module, const char *fn, int vectorWidth,
|
||||
pm.add(llvm::createDeadCodeEliminationPass()); // clean up after smear pass
|
||||
//CO pm.add(llvm::createPrintModulePass(&fos));
|
||||
pm.add(new CWriter(fos, includeName, vectorWidth));
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
// This interface is depricated for 3.3+
|
||||
pm.add(llvm::createGCInfoDeleter());
|
||||
#endif
|
||||
|
||||
124
ctx.cpp
124
ctx.cpp
@@ -46,7 +46,7 @@
|
||||
#include "sym.h"
|
||||
#include <map>
|
||||
#include <llvm/Support/Dwarf.h>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Metadata.h>
|
||||
#include <llvm/Module.h>
|
||||
#include <llvm/Instructions.h>
|
||||
@@ -337,25 +337,27 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym,
|
||||
|
||||
/* If debugging is enabled, tell the debug information emission
|
||||
code about this new function */
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
diFile = funcStartPos.GetDIFile();
|
||||
AssertPos(currentPos, diFile.Verify());
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
diFile = funcStartPos.GetDIFile();
|
||||
#endif
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3 /* 3.2, 3.3 */
|
||||
llvm::DIScope scope = llvm::DIScope(m->diBuilder->getCU());
|
||||
#elif defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.4, 3.5, 3.6 */
|
||||
llvm::DIScope scope = llvm::DIScope(m->diCompileUnit);
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIScope *scope = m->diCompileUnit;
|
||||
//llvm::MDScope *scope = m->diCompileUnit;
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
llvm::DIType diSubprogramType;
|
||||
AssertPos(currentPos, scope.Verify());
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIType *diSubprogramType = NULL;
|
||||
//llvm::MDType *diSubprogramType = NULL;
|
||||
#endif
|
||||
|
||||
const FunctionType *functionType = function->GetType();
|
||||
@@ -363,21 +365,22 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym,
|
||||
AssertPos(currentPos, m->errorCount > 0);
|
||||
else {
|
||||
diSubprogramType = functionType->GetDIType(scope);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
AssertPos(currentPos, diSubprogramType.Verify());
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
//comming soon
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3 /* 3.2, 3.3 */
|
||||
llvm::DIType diSubprogramType_n = diSubprogramType;
|
||||
#elif defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
int flags = llvm::DIDescriptor::FlagPrototyped;
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.4, 3.5, 3.6 */
|
||||
Assert(diSubprogramType.isCompositeType());
|
||||
llvm::DICompositeType diSubprogramType_n =
|
||||
static_cast<llvm::DICompositeType>(diSubprogramType);
|
||||
int flags = llvm::DIDescriptor::FlagPrototyped;
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
Assert(llvm::isa<llvm::DICompositeTypeBase>(diSubprogramType));
|
||||
llvm::DISubroutineType *diSubprogramType_n =
|
||||
llvm::cast<llvm::DISubroutineType>(getDICompositeType(diSubprogramType));
|
||||
@@ -392,7 +395,7 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym,
|
||||
bool isOptimized = (g->opt.level > 0);
|
||||
int firstLine = funcStartPos.first_line;
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
diSubprogram =
|
||||
m->diBuilder->createFunction(diFile /* scope */, funSym->name,
|
||||
mangledName, diFile,
|
||||
@@ -401,7 +404,7 @@ FunctionEmitContext::FunctionEmitContext(Function *func, Symbol *funSym,
|
||||
firstLine, flags,
|
||||
isOptimized, llvmFunction);
|
||||
AssertPos(currentPos, diSubprogram.Verify());
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
diSubprogram =
|
||||
m->diBuilder->createFunction(diFile /* scope */, funSym->name,
|
||||
mangledName, diFile,
|
||||
@@ -1610,9 +1613,9 @@ lGetStringAsValue(llvm::BasicBlock *bblock, const char *s) {
|
||||
sConstant, var_name.c_str());
|
||||
llvm::Value *indices[2] = { LLVMInt32(0), LLVMInt32(0) };
|
||||
llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
return llvm::GetElementPtrInst::Create(sPtr, arrayRef, "sptr", bblock);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
return llvm::GetElementPtrInst::Create(PTYPE(sPtr),
|
||||
sPtr, arrayRef, "sptr", bblock);
|
||||
#endif
|
||||
@@ -1654,10 +1657,11 @@ FunctionEmitContext::GetDebugPos() const {
|
||||
|
||||
void
|
||||
FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
llvm::DIScope *scope) {
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIScope *scope) {
|
||||
//llvm::MDScope *scope) {
|
||||
#endif
|
||||
llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(value);
|
||||
if (inst != NULL && m->diBuilder) {
|
||||
@@ -1668,9 +1672,9 @@ FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
|
||||
// for those functions
|
||||
inst->setDebugLoc(llvm::DebugLoc::get(p.first_line, p.first_column,
|
||||
scope ?
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
*scope
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
scope
|
||||
#endif
|
||||
: GetDIScope()));
|
||||
@@ -1681,12 +1685,14 @@ FunctionEmitContext::AddDebugPos(llvm::Value *value, const SourcePos *pos,
|
||||
void
|
||||
FunctionEmitContext::StartScope() {
|
||||
if (m->diBuilder != NULL) {
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
llvm::DIScope parentScope;
|
||||
llvm::DILexicalBlock lexicalBlock;
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIScope *parentScope;
|
||||
llvm::DILexicalBlock *lexicalBlock;
|
||||
//llvm::MDScope *parentScope;
|
||||
//llvm::MDLexicalBlock *lexicalBlock;
|
||||
#endif
|
||||
if (debugScopes.size() > 0)
|
||||
parentScope = debugScopes.back();
|
||||
@@ -1696,7 +1702,7 @@ FunctionEmitContext::StartScope() {
|
||||
lexicalBlock =
|
||||
m->diBuilder->createLexicalBlock(parentScope, diFile,
|
||||
currentPos.first_line,
|
||||
#if defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_5
|
||||
// Revision 202736 in LLVM adds support of DWARF discriminator
|
||||
// to the last argument and revision 202737 in clang adds 0
|
||||
// for the last argument by default.
|
||||
@@ -1706,11 +1712,12 @@ FunctionEmitContext::StartScope() {
|
||||
// as the last argument
|
||||
currentPos.first_column);
|
||||
#endif // LLVM 3.2, 3.3, 3.4 and 3.6+
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
AssertPos(currentPos, lexicalBlock.Verify());
|
||||
debugScopes.push_back(lexicalBlock);
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
debugScopes.push_back(llvm::cast<llvm::DILexicalBlockBase>(lexicalBlock));
|
||||
//debugScopes.push_back(llvm::cast<llvm::MDLexicalBlockBase>(lexicalBlock));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1725,10 +1732,11 @@ FunctionEmitContext::EndScope() {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
llvm::DIScope
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIScope*
|
||||
//llvm::MDScope*
|
||||
#endif
|
||||
FunctionEmitContext::GetDIScope() const {
|
||||
AssertPos(currentPos, debugScopes.size() > 0);
|
||||
@@ -1741,15 +1749,18 @@ FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
|
||||
if (m->diBuilder == NULL)
|
||||
return;
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
llvm::DIScope scope = GetDIScope();
|
||||
llvm::DIType diType = sym->type->GetDIType(scope);
|
||||
AssertPos(currentPos, diType.Verify());
|
||||
llvm::DIVariable var =
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIScope *scope = GetDIScope();
|
||||
llvm::DIType *diType = sym->type->GetDIType(scope);
|
||||
llvm::DILocalVariable *var =
|
||||
//llvm::MDScope *scope = GetDIScope();
|
||||
//llvm::MDType *diType = sym->type->GetDIType(scope);
|
||||
//llvm::MDLocalVariable *var =
|
||||
#endif
|
||||
m->diBuilder->createLocalVariable(llvm::dwarf::DW_TAG_auto_variable,
|
||||
scope,
|
||||
@@ -1758,16 +1769,16 @@ FunctionEmitContext::EmitVariableDebugInfo(Symbol *sym) {
|
||||
sym->pos.first_line,
|
||||
diType,
|
||||
true /* preserve through opts */);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
AssertPos(currentPos, var.Verify());
|
||||
llvm::Instruction *declareInst =
|
||||
m->diBuilder->insertDeclare(sym->storagePtr, var,
|
||||
#if defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_6
|
||||
m->diBuilder->createExpression(),
|
||||
#endif
|
||||
bblock);
|
||||
AddDebugPos(declareInst, &sym->pos, &scope);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::Instruction *declareInst =
|
||||
m->diBuilder->insertDeclare(sym->storagePtr, var,
|
||||
m->diBuilder->createExpression(),
|
||||
@@ -1785,15 +1796,18 @@ FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum) {
|
||||
return;
|
||||
|
||||
int flags = 0;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
llvm::DIScope scope = diSubprogram;
|
||||
llvm::DIType diType = sym->type->GetDIType(scope);
|
||||
AssertPos(currentPos, diType.Verify());
|
||||
llvm::DIVariable var =
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIScope *scope = diSubprogram;
|
||||
llvm::DIType *diType = sym->type->GetDIType(scope);
|
||||
llvm::DILocalVariable *var =
|
||||
//llvm::MDScope *scope = diSubprogram;
|
||||
//llvm::MDType *diType = sym->type->GetDIType(scope);
|
||||
//llvm::MDLocalVariable *var =
|
||||
#endif
|
||||
m->diBuilder->createLocalVariable(llvm::dwarf::DW_TAG_arg_variable,
|
||||
scope,
|
||||
@@ -1804,16 +1818,16 @@ FunctionEmitContext::EmitFunctionParameterDebugInfo(Symbol *sym, int argNum) {
|
||||
true /* preserve through opts */,
|
||||
flags,
|
||||
argNum + 1);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
AssertPos(currentPos, var.Verify());
|
||||
llvm::Instruction *declareInst =
|
||||
m->diBuilder->insertDeclare(sym->storagePtr, var,
|
||||
#if defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_6
|
||||
m->diBuilder->createExpression(),
|
||||
#endif
|
||||
bblock);
|
||||
AddDebugPos(declareInst, &sym->pos, &scope);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::Instruction *declareInst =
|
||||
m->diBuilder->insertDeclare(sym->storagePtr, var,
|
||||
m->diBuilder->createExpression(),
|
||||
@@ -2430,11 +2444,11 @@ FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index,
|
||||
// uniform, so just emit the regular LLVM GEP instruction
|
||||
llvm::Value *ind[1] = { index };
|
||||
llvm::ArrayRef<llvm::Value *> arrayRef(&ind[0], &ind[1]);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
llvm::Instruction *inst =
|
||||
llvm::GetElementPtrInst::Create(basePtr, arrayRef,
|
||||
name ? name : "gep", bblock);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::Instruction *inst =
|
||||
llvm::GetElementPtrInst::Create(PTYPE(basePtr),
|
||||
basePtr, arrayRef,
|
||||
@@ -2497,11 +2511,11 @@ FunctionEmitContext::GetElementPtrInst(llvm::Value *basePtr, llvm::Value *index0
|
||||
// uniform, so just emit the regular LLVM GEP instruction
|
||||
llvm::Value *indices[2] = { index0, index1 };
|
||||
llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
llvm::Instruction *inst =
|
||||
llvm::GetElementPtrInst::Create(basePtr, arrayRef,
|
||||
name ? name : "gep", bblock);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::Instruction *inst =
|
||||
llvm::GetElementPtrInst::Create(PTYPE(basePtr),
|
||||
basePtr, arrayRef,
|
||||
@@ -2598,11 +2612,11 @@ FunctionEmitContext::AddElementOffset(llvm::Value *fullBasePtr, int elementNum,
|
||||
// If the pointer is uniform, we can use the regular LLVM GEP.
|
||||
llvm::Value *offsets[2] = { LLVMInt32(0), LLVMInt32(elementNum) };
|
||||
llvm::ArrayRef<llvm::Value *> arrayRef(&offsets[0], &offsets[2]);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 /* 3.2, 3.3, 3.4, 3.5, 3.6 */
|
||||
resultPtr =
|
||||
llvm::GetElementPtrInst::Create(basePtr, arrayRef,
|
||||
name ? name : "struct_offset", bblock);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
resultPtr =
|
||||
llvm::GetElementPtrInst::Create(PTYPE(basePtr), basePtr, arrayRef,
|
||||
name ? name : "struct_offset", bblock);
|
||||
@@ -2909,41 +2923,41 @@ FunctionEmitContext::addGSMetadata(llvm::Value *v, SourcePos pos) {
|
||||
llvm::Instruction *inst = llvm::dyn_cast<llvm::Instruction>(v);
|
||||
if (inst == NULL)
|
||||
return;
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 /* 3.2, 3.3, 3.4, 3.5 */
|
||||
llvm::Value *str = llvm::MDString::get(*g->ctx, pos.name);
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::MDString *str = llvm::MDString::get(*g->ctx, pos.name);
|
||||
#endif
|
||||
llvm::MDNode *md = llvm::MDNode::get(*g->ctx, str);
|
||||
inst->setMetadata("filename", md);
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 /* 3.2, 3.3, 3.4, 3.5 */
|
||||
llvm::Value *first_line = LLVMInt32(pos.first_line);
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::Metadata *first_line = llvm::ConstantAsMetadata::get(LLVMInt32(pos.first_line));
|
||||
#endif
|
||||
md = llvm::MDNode::get(*g->ctx, first_line);
|
||||
inst->setMetadata("first_line", md);
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 /* 3.2, 3.3, 3.4, 3.5 */
|
||||
llvm::Value *first_column = LLVMInt32(pos.first_column);
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::Metadata *first_column = llvm::ConstantAsMetadata::get(LLVMInt32(pos.first_column));
|
||||
#endif
|
||||
md = llvm::MDNode::get(*g->ctx, first_column);
|
||||
inst->setMetadata("first_column", md);
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 /* 3.2, 3.3, 3.4, 3.5 */
|
||||
llvm::Value *last_line = LLVMInt32(pos.last_line);
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::Metadata *last_line = llvm::ConstantAsMetadata::get(LLVMInt32(pos.last_line));
|
||||
#endif
|
||||
md = llvm::MDNode::get(*g->ctx, last_line);
|
||||
inst->setMetadata("last_line", md);
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 /* 3.2, 3.3, 3.4, 3.5 */
|
||||
llvm::Value *last_column = LLVMInt32(pos.last_column);
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::Metadata *last_column = llvm::ConstantAsMetadata::get(LLVMInt32(pos.last_column));
|
||||
#endif
|
||||
md = llvm::MDNode::get(*g->ctx, last_column);
|
||||
@@ -3577,7 +3591,7 @@ FunctionEmitContext::CallInst(llvm::Value *func, const FunctionType *funcType,
|
||||
// alias analysis.
|
||||
// TODO: what other attributes needs to be copied?
|
||||
// TODO: do the same for varing path.
|
||||
#if !defined (LLVM_3_2) // LLVM 3.3+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3 // LLVM 3.3+
|
||||
llvm::CallInst *cc = llvm::dyn_cast<llvm::CallInst>(ci);
|
||||
if (cc &&
|
||||
cc->getCalledFunction() &&
|
||||
|
||||
21
ctx.h
21
ctx.h
@@ -40,19 +40,19 @@
|
||||
|
||||
#include "ispc.h"
|
||||
#include <map>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/InstrTypes.h>
|
||||
#include <llvm/Instructions.h>
|
||||
#else
|
||||
#else // 3.3+
|
||||
#include <llvm/IR/InstrTypes.h>
|
||||
#include <llvm/IR/Instructions.h>
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#include <llvm/IR/DebugInfo.h>
|
||||
#include <llvm/IR/DIBuilder.h>
|
||||
#else
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_4
|
||||
#include <llvm/DebugInfo.h>
|
||||
#include <llvm/DIBuilder.h>
|
||||
#else // 3.5+
|
||||
#include <llvm/IR/DebugInfo.h>
|
||||
#include <llvm/IR/DIBuilder.h>
|
||||
#endif
|
||||
|
||||
struct CFInfo;
|
||||
@@ -352,10 +352,11 @@ public:
|
||||
Instructions stored using Value pointers; the code here returns
|
||||
silently if it's not actually given an instruction. */
|
||||
void AddDebugPos(llvm::Value *instruction, const SourcePos *pos = NULL,
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIScope *scope = NULL);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIScope *scope = NULL);
|
||||
//llvm::MDScope *scope = NULL );
|
||||
#endif
|
||||
|
||||
/** Inform the debugging information generation code that a new scope
|
||||
@@ -368,7 +369,7 @@ public:
|
||||
|
||||
/** Returns the llvm::DIScope corresponding to the current program
|
||||
scope. */
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIScope GetDIScope() const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIScope *GetDIScope() const;
|
||||
@@ -683,7 +684,7 @@ private:
|
||||
emitted. */
|
||||
std::vector<CFInfo *> controlFlowInfo;
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
/** DIFile object corresponding to the source file where the current
|
||||
function was defined (used for debugging info). */
|
||||
llvm::DIFile diFile;
|
||||
|
||||
4
expr.cpp
4
expr.cpp
@@ -56,7 +56,7 @@
|
||||
#include <list>
|
||||
#include <set>
|
||||
#include <stdio.h>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Module.h>
|
||||
#include <llvm/Type.h>
|
||||
#include <llvm/Instructions.h>
|
||||
@@ -74,7 +74,7 @@
|
||||
#include <llvm/IR/CallingConv.h>
|
||||
#endif
|
||||
#include <llvm/ExecutionEngine/GenericValue.h>
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
#include <llvm/IR/InstIterator.h>
|
||||
#else
|
||||
#include <llvm/Support/InstIterator.h>
|
||||
|
||||
30
func.cpp
30
func.cpp
@@ -46,7 +46,7 @@
|
||||
#include "util.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 // 3.2
|
||||
#ifdef ISPC_NVPTX_ENABLED
|
||||
#include <llvm/Metadata.h>
|
||||
#endif /* ISPC_NVPTX_ENABLED */
|
||||
@@ -67,7 +67,7 @@
|
||||
#include <llvm/IR/Intrinsics.h>
|
||||
#include <llvm/IR/DerivedTypes.h>
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
#include "llvm/PassManager.h"
|
||||
#else // LLVM 3.7+
|
||||
#include "llvm/IR/LegacyPassManager.h"
|
||||
@@ -78,7 +78,7 @@
|
||||
#include <llvm/Support/FileUtilities.h>
|
||||
#include <llvm/Target/TargetMachine.h>
|
||||
#include <llvm/Target/TargetOptions.h>
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
#include <llvm/IR/Verifier.h>
|
||||
#include <llvm/IR/IRPrintingPasses.h>
|
||||
#include <llvm/IR/CFG.h>
|
||||
@@ -360,11 +360,19 @@ Function::emitCode(FunctionEmitContext *ctx, llvm::Function *function,
|
||||
{
|
||||
llvm::NamedMDNode* annotations =
|
||||
m->module->getOrInsertNamedMetadata("nvvm.annotations");
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
llvm::SmallVector<llvm::Metadata*, 3> av;
|
||||
av.push_back(llvm::ValueAsMetadata::get(function));
|
||||
av.push_back(llvm::MDString::get(*g->ctx, "kernel"));
|
||||
av.push_back(llvm::ConstantAsMetadata::get(LLVMInt32(1)));
|
||||
annotations->addOperand(llvm::MDNode::get(*g->ctx, llvm::ArrayRef<llvm::Metadata*>(av)));
|
||||
#else
|
||||
llvm::SmallVector<llvm::Value*, 3> av;
|
||||
av.push_back(function);
|
||||
av.push_back(llvm::MDString::get(*g->ctx, "kernel"));
|
||||
av.push_back(LLVMInt32(1));
|
||||
annotations->addOperand(llvm::MDNode::get(*g->ctx, av));
|
||||
#endif
|
||||
}
|
||||
#endif /* ISPC_NVPTX_ENABLED */
|
||||
}
|
||||
@@ -384,7 +392,7 @@ Function::emitCode(FunctionEmitContext *ctx, llvm::Function *function,
|
||||
// isn't worth the code bloat / overhead.
|
||||
bool checkMask = (type->isTask == true) ||
|
||||
(
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 // 3.2
|
||||
(function->getFnAttributes().hasAttribute(llvm::Attributes::AlwaysInline) == false)
|
||||
#else // LLVM 3.3+
|
||||
(function->getAttributes().getFnAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::AlwaysInline) == false)
|
||||
@@ -569,11 +577,21 @@ Function::GenerateIR() {
|
||||
{
|
||||
llvm::NamedMDNode* annotations =
|
||||
m->module->getOrInsertNamedMetadata("nvvm.annotations");
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
|
||||
llvm::SmallVector<llvm::Metadata*, 3> av;
|
||||
av.push_back(llvm::ValueAsMetadata::get(function));
|
||||
av.push_back(llvm::MDString::get(*g->ctx, "kernel"));
|
||||
av.push_back(llvm::ConstantAsMetadata::get(llvm::ConstantInt::get(llvm::IntegerType::get(*g->ctx,32), 1)));
|
||||
annotations->addOperand(llvm::MDNode::get(*g->ctx, llvm::ArrayRef<llvm::Metadata*>(av)));
|
||||
#else
|
||||
llvm::SmallVector<llvm::Value*, 3> av;
|
||||
av.push_back(appFunction);
|
||||
av.push_back(function);
|
||||
av.push_back(llvm::MDString::get(*g->ctx, "kernel"));
|
||||
av.push_back(llvm::ConstantInt::get(llvm::IntegerType::get(*g->ctx,32), 1));
|
||||
annotations->addOperand(llvm::MDNode::get(*g->ctx, av));
|
||||
annotations->addOperand(llvm::MDNode::get(*g->ctx, av));
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif /* ISPC_NVPTX_ENABLED */
|
||||
}
|
||||
|
||||
89
ispc.cpp
89
ispc.cpp
@@ -50,22 +50,22 @@
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/LLVMContext.h>
|
||||
#include <llvm/Module.h>
|
||||
#include <llvm/Instructions.h>
|
||||
#else
|
||||
#else /* 3.3+ */
|
||||
#include <llvm/IR/LLVMContext.h>
|
||||
#include <llvm/IR/Module.h>
|
||||
#include <llvm/IR/Instructions.h>
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) // LLVM 3.6+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
#include <llvm/Target/TargetSubtargetInfo.h>
|
||||
#if !defined(LLVM_3_6) // LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
#include <llvm/Target/TargetLowering.h>
|
||||
#endif
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
#include <llvm/IR/DebugInfo.h>
|
||||
#include <llvm/IR/DIBuilder.h>
|
||||
#else // LLVM 3.2, 3.3, 3.4
|
||||
@@ -75,7 +75,7 @@
|
||||
#include <llvm/Support/Dwarf.h>
|
||||
#include <llvm/Target/TargetMachine.h>
|
||||
#include <llvm/Target/TargetOptions.h>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/DataLayout.h>
|
||||
#else // LLVM 3.3+
|
||||
#include <llvm/IR/DataLayout.h>
|
||||
@@ -233,17 +233,17 @@ typedef enum {
|
||||
// Haswell. Supports AVX 2.
|
||||
CPU_Haswell,
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) // LLVM 3.6+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
// Broadwell. Supports AVX 2 + ADX/RDSEED/SMAP.
|
||||
CPU_Broadwell,
|
||||
#endif
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6)// LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
// KNL. Supports AVX512.
|
||||
CPU_KNL,
|
||||
#endif
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) // LLVM 3.4+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 // LLVM 3.4+
|
||||
// Late Atom-like design. Supports SSE 4.2 + POPCNT/LZCNT.
|
||||
CPU_Silvermont,
|
||||
#endif
|
||||
@@ -302,7 +302,7 @@ public:
|
||||
|
||||
names[CPU_Penryn].push_back("penryn");
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) // LLVM 3.4+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 // LLVM 3.4+
|
||||
names[CPU_Silvermont].push_back("slm");
|
||||
names[CPU_Silvermont].push_back("silvermont");
|
||||
#endif
|
||||
@@ -319,11 +319,11 @@ public:
|
||||
names[CPU_Haswell].push_back("core-avx2");
|
||||
names[CPU_Haswell].push_back("haswell");
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) // LLVM 3.6+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6 // LLVM 3.6+
|
||||
names[CPU_Broadwell].push_back("broadwell");
|
||||
#endif
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6)// LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
names[CPU_KNL].push_back("knl");
|
||||
#endif
|
||||
|
||||
@@ -338,24 +338,24 @@ public:
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) // LLVM 3.4+
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3 // LLVM 3.2 or 3.3
|
||||
#define CPU_Silvermont CPU_Nehalem
|
||||
#else
|
||||
#else /* LLVM 3.4+ */
|
||||
compat[CPU_Silvermont] = Set(CPU_Generic, CPU_Bonnell, CPU_Penryn,
|
||||
CPU_Core2, CPU_Nehalem, CPU_Silvermont,
|
||||
CPU_None);
|
||||
#endif
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6)// LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
compat[CPU_KNL] = Set(CPU_KNL, CPU_Generic, CPU_Bonnell, CPU_Penryn,
|
||||
CPU_Core2, CPU_Nehalem, CPU_Silvermont,
|
||||
CPU_SandyBridge, CPU_IvyBridge,
|
||||
CPU_Haswell, CPU_Broadwell, CPU_None);
|
||||
#endif
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) // LLVM 3.6+
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // LLVM 3.2, 3.3, 3.4 or 3.5
|
||||
#define CPU_Broadwell CPU_Haswell
|
||||
#else
|
||||
#else /* LLVM 3.6+ */
|
||||
compat[CPU_Broadwell] = Set(CPU_Generic, CPU_Bonnell, CPU_Penryn,
|
||||
CPU_Core2, CPU_Nehalem, CPU_Silvermont,
|
||||
CPU_SandyBridge, CPU_IvyBridge,
|
||||
@@ -446,7 +446,7 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
m_is32Bit(true),
|
||||
m_cpu(""),
|
||||
m_attributes(""),
|
||||
#if !defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3
|
||||
m_tf_attributes(NULL),
|
||||
#endif
|
||||
m_nativeVectorWidth(-1),
|
||||
@@ -507,13 +507,13 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6)// LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
case CPU_KNL:
|
||||
isa = "avx512knl-i32x16";
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6
|
||||
case CPU_Broadwell:
|
||||
#endif
|
||||
case CPU_Haswell:
|
||||
@@ -531,7 +531,7 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
// Penryn is here because ISPC does not use SSE 4.2
|
||||
case CPU_Penryn:
|
||||
case CPU_Nehalem:
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4
|
||||
case CPU_Silvermont:
|
||||
#endif
|
||||
isa = "sse4-i32x4";
|
||||
@@ -569,7 +569,7 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
|
||||
// Make sure the target architecture is a known one; print an error
|
||||
// with the valid ones otherwise.
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6) // 3.7 +
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
for (llvm::TargetRegistry::iterator iter = llvm::TargetRegistry::targets().begin();
|
||||
iter != llvm::TargetRegistry::targets().end(); ++iter) {
|
||||
#else
|
||||
@@ -584,7 +584,7 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
if (this->m_target == NULL) {
|
||||
fprintf(stderr, "Invalid architecture \"%s\"\nOptions: ", arch);
|
||||
llvm::TargetRegistry::iterator iter;
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6) // 3.7 +
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
for (iter = llvm::TargetRegistry::targets().begin();
|
||||
iter != llvm::TargetRegistry::targets().end(); ++iter)
|
||||
#else
|
||||
@@ -891,7 +891,7 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
this->m_hasGather = true;
|
||||
CPUfromISA = CPU_Haswell;
|
||||
}
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6)// LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
else if (!strcasecmp(isa, "avx512knl-i32x16")) {
|
||||
this->m_isa = Target::KNL_AVX512;
|
||||
this->m_nativeVectorWidth = 16;
|
||||
@@ -1020,7 +1020,7 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
#endif
|
||||
if (g->opt.disableFMA == false)
|
||||
options.AllowFPOpFusion = llvm::FPOpFusion::Fast;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
#ifdef ISPC_IS_WINDOWS
|
||||
if (strcmp("x86", arch) == 0) {
|
||||
// Workaround for issue #503 (LLVM issue 14646).
|
||||
@@ -1034,18 +1034,17 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
relocModel);
|
||||
Assert(m_targetMachine != NULL);
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
m_targetMachine->setAsmVerbosityDefault(true);
|
||||
#else
|
||||
#else /* LLVM 3.7+ */
|
||||
m_targetMachine->Options.MCOptions.AsmVerbose = true;
|
||||
#endif
|
||||
// Initialize TargetData/DataLayout in 3 steps.
|
||||
// 1. Get default data layout first
|
||||
std::string dl_string;
|
||||
|
||||
#if defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_6
|
||||
dl_string = m_targetMachine->getSubtargetImpl()->getDataLayout()->getStringRepresentation();
|
||||
#else // LLVM 3.5- and LLVM 3.7+
|
||||
#else // LLVM 3.5- or LLVM 3.7+
|
||||
dl_string = m_targetMachine->getDataLayout()->getStringRepresentation();
|
||||
#endif
|
||||
// 2. Adjust for generic
|
||||
@@ -1076,7 +1075,7 @@ Target::Target(const char *arch, const char *cpu, const char *isa, bool pic, boo
|
||||
|
||||
this->m_is32Bit = (getDataLayout()->getPointerSize() == 4);
|
||||
|
||||
#if !defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3
|
||||
// This is LLVM 3.3+ feature.
|
||||
// Initialize target-specific "target-feature" attribute.
|
||||
if (!m_attributes.empty()) {
|
||||
@@ -1135,11 +1134,11 @@ Target::SupportedTargets() {
|
||||
"avx1-i32x8, avx1-i32x16, avx1-i64x4, "
|
||||
"avx1.1-i32x8, avx1.1-i32x16, avx1.1-i64x4, "
|
||||
"avx2-i32x8, avx2-i32x16, avx2-i64x4, "
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6)// LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
"avx512knl-i32x16, "
|
||||
#endif
|
||||
"generic-x1, generic-x4, generic-x8, generic-x16, "
|
||||
"generic-x32, generic-x64, *-generic-x16"
|
||||
"generic-x32, generic-x64, *-generic-x16, "
|
||||
#ifdef ISPC_ARM_ENABLED
|
||||
", neon-i8x16, neon-i16x8, neon-i32x4"
|
||||
#endif
|
||||
@@ -1208,7 +1207,7 @@ Target::ISAToString(ISA isa) {
|
||||
return "avx11";
|
||||
case Target::AVX2:
|
||||
return "avx2";
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6)// LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
case Target::KNL_AVX512:
|
||||
return "avx512knl-i32x16";
|
||||
#endif
|
||||
@@ -1256,7 +1255,7 @@ Target::ISAToTargetString(ISA isa) {
|
||||
return "avx1.1-i32x8";
|
||||
case Target::AVX2:
|
||||
return "avx2-i32x8";
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6)// LLVM 3.7+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
case Target::KNL_AVX512:
|
||||
return "avx512knl-i32x16";
|
||||
#endif
|
||||
@@ -1325,11 +1324,11 @@ Target::SizeOf(llvm::Type *type,
|
||||
llvm::PointerType *ptrType = llvm::PointerType::get(type, 0);
|
||||
llvm::Value *voidPtr = llvm::ConstantPointerNull::get(ptrType);
|
||||
llvm::ArrayRef<llvm::Value *> arrayRef(&index[0], &index[1]);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::Instruction *gep =
|
||||
llvm::GetElementPtrInst::Create(voidPtr, arrayRef, "sizeof_gep",
|
||||
insertAtEnd);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::Instruction *gep =
|
||||
llvm::GetElementPtrInst::Create(PTYPE(voidPtr), voidPtr,
|
||||
arrayRef, "sizeof_gep",
|
||||
@@ -1363,11 +1362,11 @@ Target::StructOffset(llvm::Type *type, int element,
|
||||
llvm::PointerType *ptrType = llvm::PointerType::get(type, 0);
|
||||
llvm::Value *voidPtr = llvm::ConstantPointerNull::get(ptrType);
|
||||
llvm::ArrayRef<llvm::Value *> arrayRef(&indices[0], &indices[2]);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::Instruction *gep =
|
||||
llvm::GetElementPtrInst::Create(voidPtr, arrayRef, "offset_gep",
|
||||
insertAtEnd);
|
||||
#else // LLVM 3.7++
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::Instruction *gep =
|
||||
llvm::GetElementPtrInst::Create(PTYPE(voidPtr), voidPtr,
|
||||
arrayRef, "offset_gep",
|
||||
@@ -1399,7 +1398,7 @@ Target::StructOffset(llvm::Type *type, int element,
|
||||
}
|
||||
|
||||
void Target::markFuncWithTargetAttr(llvm::Function* func) {
|
||||
#if !defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3
|
||||
if (m_tf_attributes) {
|
||||
func->addAttributes(llvm::AttributeSet::FunctionIndex, *m_tf_attributes);
|
||||
}
|
||||
@@ -1484,19 +1483,21 @@ SourcePos::SourcePos(const char *n, int fl, int fc, int ll, int lc) {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIFile
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIFile*
|
||||
//llvm::MDFile*
|
||||
#endif
|
||||
SourcePos::GetDIFile() const {
|
||||
std::string directory, filename;
|
||||
GetDirectoryAndFileName(g->currentDirectory, name, &directory, &filename);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIFile ret = m->diBuilder->createFile(filename, directory);
|
||||
Assert(ret.Verify());
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DIFile *ret = m->diBuilder->createFile(filename, directory);
|
||||
//llvm::MDFile *ret = m->diBuilder->createFile(filename, directory);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
14
ispc.h
14
ispc.h
@@ -38,9 +38,9 @@
|
||||
#ifndef ISPC_H
|
||||
#define ISPC_H
|
||||
|
||||
#define ISPC_VERSION "1.8.3dev"
|
||||
#include "ispc_version.h"
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5) && !defined(LLVM_3_6) && !defined(LLVM_3_7)
|
||||
#if ISPC_LLVM_VERSION < OLDEST_SUPPORTED_LLVM || ISPC_LLVM_VERSION > LATEST_SUPPORTED_LLVM
|
||||
#error "Only LLVM 3.2, 3.3, 3.4, 3.5, 3.6 and 3.7 development branch are supported"
|
||||
#endif
|
||||
|
||||
@@ -86,11 +86,11 @@ namespace llvm {
|
||||
class TargetMachine;
|
||||
class Type;
|
||||
class Value;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
class DIFile;
|
||||
class DIType;
|
||||
class DIDescriptor;
|
||||
#else // LLVM 3.7++
|
||||
#else // LLVM 3.7+
|
||||
class DIFile;
|
||||
class DIType;
|
||||
class DIScope;
|
||||
@@ -144,7 +144,7 @@ struct SourcePos {
|
||||
/** Prints the filename and line/column range to standard output. */
|
||||
void Print() const;
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
/** Returns a LLVM DIFile object that represents the SourcePos's file */
|
||||
llvm::DIFile GetDIFile() const;
|
||||
#else
|
||||
@@ -259,7 +259,7 @@ public:
|
||||
|
||||
// Note the same name of method for 3.1 and 3.2+, this allows
|
||||
// to reduce number ifdefs on client side.
|
||||
llvm::DataLayout *getDataLayout() const {return m_dataLayout;}
|
||||
const llvm::DataLayout *getDataLayout() const {return m_dataLayout;}
|
||||
|
||||
/** Reports if Target object has valid state. */
|
||||
bool isValid() const {return m_valid;}
|
||||
@@ -344,7 +344,7 @@ private:
|
||||
/** Target-specific attribute string to pass along to the LLVM backend */
|
||||
std::string m_attributes;
|
||||
|
||||
#if !defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3
|
||||
/** 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 */
|
||||
|
||||
68
ispc_version.h
Normal file
68
ispc_version.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
Copyright (c) 2015, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Intel Corporation nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
||||
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/** @file ispc_version.h
|
||||
@brief defines the ISPC version
|
||||
*/
|
||||
|
||||
#ifndef ISPC_VERSION_H
|
||||
#define ISPC_VERSION_H
|
||||
|
||||
#define ISPC_VERSION "1.8.3dev"
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
|
||||
#define ISPC_LLVM_VERSION ( LLVM_VERSION_MAJOR * 10000 + LLVM_VERSION_MINOR * 100 )
|
||||
|
||||
#define ISPC_LLVM_3_2 30200
|
||||
#define ISPC_LLVM_3_3 30300
|
||||
#define ISPC_LLVM_3_4 30400
|
||||
#define ISPC_LLVM_3_5 30500
|
||||
#define ISPC_LLVM_3_6 30600
|
||||
#define ISPC_LLVM_3_7 30700
|
||||
|
||||
#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_3_2
|
||||
#define LATEST_SUPPORTED_LLVM ISPC_LLVM_3_7
|
||||
|
||||
#ifdef __ispc__xstr
|
||||
#undef __ispc__xstr
|
||||
#endif
|
||||
#define __ispc__xstr(s) __ispc__str(s)
|
||||
#define __ispc__str(s) #s
|
||||
|
||||
#define ISPC_LLVM_VERSION_STRING __ispc__xstr(LLVM_VERSION_MAJOR) "." __ispc__xstr(LLVM_VERSION_MINOR)
|
||||
|
||||
#if ISPC_LLVM_VERSION < OLDEST_SUPPORTED_LLVM || ISPC_LLVM_VERSION > LATEST_SUPPORTED_LLVM
|
||||
#error "Unhandled LLVM version"
|
||||
#endif
|
||||
|
||||
#endif // ISPC_VERSION_H
|
||||
@@ -38,7 +38,7 @@
|
||||
#include "llvmutil.h"
|
||||
#include "ispc.h"
|
||||
#include "type.h"
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Instructions.h>
|
||||
#include <llvm/BasicBlock.h>
|
||||
#else
|
||||
|
||||
@@ -38,12 +38,13 @@
|
||||
#ifndef ISPC_LLVMUTIL_H
|
||||
#define ISPC_LLVMUTIL_H 1
|
||||
|
||||
#if defined(LLVM_3_2)
|
||||
#include "ispc_version.h"
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/LLVMContext.h>
|
||||
#include <llvm/Type.h>
|
||||
#include <llvm/DerivedTypes.h>
|
||||
#include <llvm/Constants.h>
|
||||
#else
|
||||
#else // 3.3+
|
||||
#include <llvm/IR/LLVMContext.h>
|
||||
#include <llvm/IR/Type.h>
|
||||
#include <llvm/IR/DerivedTypes.h>
|
||||
|
||||
21
main.cpp
21
main.cpp
@@ -62,21 +62,7 @@ static void
|
||||
lPrintVersion() {
|
||||
printf("Intel(r) SPMD Program Compiler (ispc), %s (build %s @ %s, LLVM %s)\n",
|
||||
ISPC_VERSION, BUILD_VERSION, BUILD_DATE,
|
||||
#if defined(LLVM_3_2)
|
||||
"3.2"
|
||||
#elif defined(LLVM_3_3)
|
||||
"3.3"
|
||||
#elif defined(LLVM_3_4)
|
||||
"3.4"
|
||||
#elif defined(LLVM_3_5)
|
||||
"3.5"
|
||||
#elif defined(LLVM_3_6)
|
||||
"3.6"
|
||||
#elif defined(LLVM_3_7)
|
||||
"3.7"
|
||||
#else
|
||||
#error "Unhandled LLVM version"
|
||||
#endif
|
||||
ISPC_LLVM_VERSION_STRING
|
||||
);
|
||||
}
|
||||
|
||||
@@ -172,8 +158,7 @@ devUsage(int ret) {
|
||||
printf(" disable-uniform-memory-optimizations\tDisable uniform-based coherent memory access\n");
|
||||
printf(" [--yydebug]\t\t\t\tPrint debugging information during parsing\n");
|
||||
printf(" [--debug-phase=<value>]\t\tSet optimization phases to dump. --debug-phase=first,210:220,300,305,310:last\n");
|
||||
|
||||
#if defined(LLVM_3_4) || defined(LLVM_3_5) // only 3.4 and 3.5
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_4 || ISPC_LLVM_VERSION == ISPC_LLVM_3_5 // 3.4, 3.5
|
||||
printf(" [--debug-ir=<value>]\t\tSet optimization phase to generate debugIR after it\n");
|
||||
#endif
|
||||
printf(" [--off-phase=<value>]\t\tSwitch off optimization phases. --off-phase=first,210:220,300,305,310:last\n");
|
||||
@@ -570,7 +555,7 @@ int main(int Argc, char *Argv[]) {
|
||||
g->debug_stages = ParsingPhases(argv[i] + strlen("--debug-phase="));
|
||||
}
|
||||
|
||||
#if defined(LLVM_3_4) || defined(LLVM_3_5) // only 3.4 and 3.5
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_4 || ISPC_LLVM_VERSION == ISPC_LLVM_3_5 // 3.4, 3.5
|
||||
else if (strncmp(argv[i], "--debug-ir=", 11) == 0) {
|
||||
g->debugIR = ParsingPhaseName(argv[i] + strlen("--debug-ir="));
|
||||
}
|
||||
|
||||
109
module.cpp
109
module.cpp
@@ -66,8 +66,7 @@
|
||||
#include <io.h>
|
||||
#define strcasecmp stricmp
|
||||
#endif
|
||||
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/LLVMContext.h>
|
||||
#include <llvm/Module.h>
|
||||
#include <llvm/Type.h>
|
||||
@@ -85,14 +84,14 @@
|
||||
#include <llvm/IR/Intrinsics.h>
|
||||
#include <llvm/IR/DerivedTypes.h>
|
||||
#ifdef ISPC_NVPTX_ENABLED
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 /* 3.5+ */
|
||||
#include <llvm/IR/AssemblyAnnotationWriter.h>
|
||||
#else
|
||||
#include <llvm/Assembly/AssemblyAnnotationWriter.h>
|
||||
#endif
|
||||
#endif /* ISPC_NVPTX_ENABLED */
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
#include "llvm/PassManager.h"
|
||||
#else // LLVM 3.7+
|
||||
#include "llvm/IR/LegacyPassManager.h"
|
||||
@@ -103,14 +102,14 @@
|
||||
#include <llvm/Support/FileUtilities.h>
|
||||
#include <llvm/Target/TargetMachine.h>
|
||||
#include <llvm/Target/TargetOptions.h>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/DataLayout.h>
|
||||
#include <llvm/TargetTransformInfo.h>
|
||||
#else // LLVM 3.3+
|
||||
#include <llvm/IR/DataLayout.h>
|
||||
#include <llvm/Analysis/TargetTransformInfo.h>
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5
|
||||
#include <llvm/IR/Verifier.h>
|
||||
#include <llvm/IR/IRPrintingPasses.h>
|
||||
#include <llvm/IR/InstIterator.h>
|
||||
@@ -170,9 +169,9 @@ static void
|
||||
lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
if (g->generateDebuggingSymbols == false)
|
||||
return;
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // <= 3.5
|
||||
std::set<llvm::Value *> SPall;
|
||||
#else // LLVM 3.6++
|
||||
#else // LLVM 3.6+
|
||||
std::set<llvm::Metadata *> SPall;
|
||||
#endif
|
||||
// OK, now we are to determine which functions actually survived the
|
||||
@@ -191,7 +190,7 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
while (node) {
|
||||
// get the scope of the current instruction`s location
|
||||
// node becomes NULL if this was the original location
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5) || (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6 // <= 3.6
|
||||
llvm::DILocation dloc(node);
|
||||
llvm::DIScope scope = dloc.getScope();
|
||||
node = dloc.getOrigLocation();
|
||||
@@ -209,6 +208,8 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
#else // LLVM 3.7+
|
||||
llvm::DILocation *dloc = llvm::cast<llvm::DILocation>(node);
|
||||
llvm::DIScope *scope = dloc->getScope();
|
||||
//llvm::MDLocation *dloc = llvm::cast<llvm::MDLocation>(node);
|
||||
//llvm::MDScope *scope = dloc->getScope();
|
||||
node = dloc->getInlinedAt();
|
||||
// now following a chain of nested scopes
|
||||
while (!0) {
|
||||
@@ -232,34 +233,36 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
if (llvm::NamedMDNode *cuNodes = module->getNamedMetadata("llvm.dbg.cu")) {
|
||||
for (unsigned i = 0, ie = cuNodes->getNumOperands(); i != ie; ++i) {
|
||||
llvm::MDNode *cuNode = cuNodes->getOperand(i);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DICompileUnit cu(cuNode);
|
||||
llvm::DIArray subprograms = cu.getSubprograms();
|
||||
if (subprograms.getNumElements() == 0) {
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::DICompileUnit *cu = llvm::cast<llvm::DICompileUnit>(cuNode);
|
||||
llvm::DISubprogramArray subprograms = cu->getSubprograms();
|
||||
//llvm::MDCompileUnit *cu = llvm::cast<llvm::MDCompileUnit>(cuNode);
|
||||
//llvm::MDSubprogramArray subprograms = cu->getSubprograms();
|
||||
if (subprograms.size() == 0) {
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
std::set<llvm::Value *> SPset;
|
||||
std::vector<llvm::Value *> usedSubprograms;
|
||||
#else // LLVM 3.6+
|
||||
#else /* LLVM 3.6+ */
|
||||
std::set<llvm::Metadata *> SPset;
|
||||
std::vector<llvm::Metadata *> usedSubprograms;
|
||||
#endif
|
||||
|
||||
// determine what functions of those extracted belong to the unit
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
for (unsigned j = 0, je = subprograms.getNumElements(); j != je; ++j)
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
for (unsigned j = 0, je = subprograms.size(); j != je; ++j)
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
SPset.insert(subprograms->getOperand(j));
|
||||
#elif defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_6
|
||||
SPset.insert(subprograms.getElement(j));
|
||||
#else // LLVM 3.7+
|
||||
SPset.insert(subprograms [j]);
|
||||
@@ -271,9 +274,9 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
|
||||
Debug(SourcePos(), "%d / %d functions left in module with debug "
|
||||
"info.", (int)usedSubprograms.size(),
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
(int)subprograms.getNumElements());
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
(int)subprograms.size());
|
||||
#endif
|
||||
|
||||
@@ -296,7 +299,7 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
// stuff and remove it later on. Removing it is useful, as it
|
||||
// reduces size of the binary significantly (manyfold for small
|
||||
// programs).
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 // 3.2
|
||||
llvm::MDNode *nodeSPMD =
|
||||
llvm::dyn_cast<llvm::MDNode>(cuNode->getOperand(12));
|
||||
Assert(nodeSPMD != NULL);
|
||||
@@ -314,7 +317,7 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
llvm::MDNode *replNode =
|
||||
llvm::MDNode::get(*g->ctx, llvm::ArrayRef<llvm::Value *>(usedSubprogramsArray));
|
||||
cuNode->replaceOperandWith(12, replNode);
|
||||
#elif defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // 3.3, 3.4, 3.5
|
||||
llvm::MDNode *nodeSPMDArray =
|
||||
llvm::dyn_cast<llvm::MDNode>(cuNode->getOperand(9));
|
||||
Assert(nodeSPMDArray != NULL);
|
||||
@@ -328,8 +331,7 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
llvm::MDNode *replNode =
|
||||
m->diBuilder->getOrCreateArray(llvm::ArrayRef<llvm::Value *>(usedSubprograms));
|
||||
cuNode->replaceOperandWith(9, replNode);
|
||||
#else // LLVM 3.6+
|
||||
#if defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_6 // 3.6
|
||||
llvm::DIArray nodeSPs = cu.getSubprograms();
|
||||
Assert(nodeSPs.getNumElements() == subprograms.getNumElements());
|
||||
for (int i = 0; i < (int)nodeSPs.getNumElements(); ++i)
|
||||
@@ -340,8 +342,9 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
llvm::MDNode *replNode = llvm::MDNode::get(module->getContext(),
|
||||
llvm::ArrayRef<llvm::Metadata *>(usedSubprograms));
|
||||
cu.replaceSubprograms(llvm::DIArray(replNode));
|
||||
#else // LLVM 3.7+
|
||||
#else // LLVM 3.7+
|
||||
llvm::DISubprogramArray nodeSPs = cu->getSubprograms();
|
||||
//llvm::MDSubprogramArray nodeSPs = cu->getSubprograms();
|
||||
Assert(nodeSPs.size() == subprograms.size());
|
||||
for (int i = 0; i < (int)nodeSPs.size(); ++i)
|
||||
Assert(nodeSPs [i] == subprograms [i]);
|
||||
@@ -350,7 +353,6 @@ lStripUnusedDebugInfo(llvm::Module *module) {
|
||||
// confidence...
|
||||
cu->replaceSubprograms(llvm::MDTuple::get(cu->getContext(),
|
||||
llvm::ArrayRef<llvm::Metadata *>(usedSubprograms)));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -418,7 +420,7 @@ Module::Module(const char *fn) {
|
||||
sprintf(producerString, "ispc version %s (built on %s)",
|
||||
ISPC_VERSION, __DATE__);
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 // LLVM 3.4+
|
||||
diCompileUnit =
|
||||
#endif // LLVM_3_4+
|
||||
diBuilder->createCompileUnit(llvm::dwarf::DW_LANG_C99, /* lang */
|
||||
@@ -698,7 +700,7 @@ Module::AddGlobalVariable(const std::string &name, const Type *type, Expr *initE
|
||||
}
|
||||
|
||||
if (diBuilder) {
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5 // 3.2, 3.3, 3.4, 3.5
|
||||
llvm::DIFile file = pos.GetDIFile();
|
||||
llvm::DIGlobalVariable var = diBuilder->createGlobalVariable(
|
||||
name,
|
||||
@@ -707,7 +709,7 @@ Module::AddGlobalVariable(const std::string &name, const Type *type, Expr *initE
|
||||
sym->type->GetDIType(file),
|
||||
(sym->storageClass == SC_STATIC),
|
||||
sym->storagePtr);
|
||||
#elif defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_6 // 3.6
|
||||
llvm::DIFile file = pos.GetDIFile();
|
||||
llvm::Constant *sym_const_storagePtr = llvm::dyn_cast<llvm::Constant>(sym->storagePtr);
|
||||
Assert(sym_const_storagePtr);
|
||||
@@ -722,6 +724,7 @@ Module::AddGlobalVariable(const std::string &name, const Type *type, Expr *initE
|
||||
sym_const_storagePtr);
|
||||
#else // LLVM 3.7+
|
||||
llvm::DIFile *file = pos.GetDIFile();
|
||||
//llvm::MDFile *file = pos.GetDIFile();
|
||||
llvm::Constant *sym_const_storagePtr = llvm::dyn_cast<llvm::Constant>(sym->storagePtr);
|
||||
Assert(sym_const_storagePtr);
|
||||
diBuilder->createGlobalVariable(
|
||||
@@ -734,7 +737,7 @@ Module::AddGlobalVariable(const std::string &name, const Type *type, Expr *initE
|
||||
(sym->storageClass == SC_STATIC),
|
||||
sym_const_storagePtr);
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
Assert(var.Verify());
|
||||
#else // LLVM 3.7+
|
||||
//comming soon
|
||||
@@ -1159,7 +1162,7 @@ Module::writeOutput(OutputType outputType, const char *outFileName,
|
||||
if (diBuilder && (outputType != Header) && (outputType != Deps))
|
||||
lStripUnusedDebugInfo(module);
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) // LLVM 3.4+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 /* 3.4+ */
|
||||
// In LLVM_3_4 after r195494 and r195504 revisions we should pass
|
||||
// "Debug Info Version" constant to the module. LLVM will ignore
|
||||
// our Debug Info metadata without it.
|
||||
@@ -1393,7 +1396,7 @@ Module::writeBitcode(llvm::Module *module, const char *outFileName) {
|
||||
|
||||
std::string s;
|
||||
llvm::raw_string_ostream out(s);
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 /* 3.5+ */
|
||||
std::unique_ptr<llvm::AssemblyAnnotationWriter> Annotator;
|
||||
#else
|
||||
llvm::OwningPtr<llvm::AssemblyAnnotationWriter> Annotator;
|
||||
@@ -1406,7 +1409,7 @@ Module::writeBitcode(llvm::Module *module, const char *outFileName) {
|
||||
input.push_back(s);
|
||||
output = input;
|
||||
|
||||
#if !(defined(LLVM_3_1) || defined(LLVM_3_2))
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3 /* 3.3+ */
|
||||
/* do not fix attributed with LLVM 3.2, everything is fine there */
|
||||
lFixAttributes(input,output);
|
||||
#endif
|
||||
@@ -1442,28 +1445,28 @@ Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine,
|
||||
llvm::TargetMachine::CodeGenFileType fileType = (outputType == Object) ?
|
||||
llvm::TargetMachine::CGFT_ObjectFile : llvm::TargetMachine::CGFT_AssemblyFile;
|
||||
bool binary = (fileType == llvm::TargetMachine::CGFT_ObjectFile);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3 // 3.2, 3.3
|
||||
unsigned int flags = binary ? llvm::raw_fd_ostream::F_Binary : 0;
|
||||
#elif defined(LLVM_3_4)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_4 // 3.4
|
||||
llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_Binary :
|
||||
llvm::sys::fs::F_None;
|
||||
#else
|
||||
#else // LLVM 3.5+
|
||||
llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None :
|
||||
llvm::sys::fs::F_Text;
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
std::string error;
|
||||
#else // LLVM 3.6+
|
||||
#else // LLVM 3.6+
|
||||
std::error_code error;
|
||||
#endif
|
||||
|
||||
llvm::tool_output_file *of = new llvm::tool_output_file(outFileName, error, flags);
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
if (error.size()) {
|
||||
#else // LLVM 3.6+
|
||||
#else // LLVM 3.6+
|
||||
if (error) {
|
||||
#endif
|
||||
|
||||
@@ -1471,23 +1474,23 @@ Module::writeObjectFileOrAssembly(llvm::TargetMachine *targetMachine,
|
||||
return false;
|
||||
}
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::PassManager pm;
|
||||
#else // LLVM 3.7+
|
||||
llvm::legacy::PassManager pm;
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_4 // 3.2, 3.3, 3.4
|
||||
pm.add(new llvm::DataLayout(*g->target->getDataLayout()));
|
||||
#elif defined(LLVM_3_5)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_5 // 3.5
|
||||
pm.add(new llvm::DataLayoutPass(*g->target->getDataLayout()));
|
||||
#elif defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_6 // 3.6
|
||||
llvm::DataLayoutPass *dlp= new llvm::DataLayoutPass();
|
||||
dlp->doInitialization(*module);
|
||||
pm.add(dlp);
|
||||
#endif // LLVM 3.7+ doesn't have DataLayoutPass anymore.
|
||||
|
||||
{
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::formatted_raw_ostream fos(of->os());
|
||||
#else // LLVM 3.7+
|
||||
llvm::raw_fd_ostream &fos(of->os());
|
||||
@@ -1578,7 +1581,7 @@ lEmitStructDecl(const StructType *st, std::vector<const StructType *> *emittedSt
|
||||
char sSOA[48];
|
||||
bool pack, needsAlign = false;
|
||||
llvm::Type *stype = st->LLVMType(g->ctx);
|
||||
llvm::DataLayout *DL = g->target->getDataLayout();
|
||||
const llvm::DataLayout *DL = g->target->getDataLayout();
|
||||
|
||||
if (!(pack = llvm::dyn_cast<llvm::StructType>(stype)->isPacked()))
|
||||
for (int i = 0; !needsAlign && (i < st->GetElementCount()); ++i) {
|
||||
@@ -2431,7 +2434,7 @@ Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *ostre
|
||||
|
||||
inst.setDiagnostics(diagEngine);
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_4 // 3.2, 3.3, 3.4
|
||||
clang::TargetOptions &options = inst.getTargetOpts();
|
||||
#else // LLVM 3.5+
|
||||
const std::shared_ptr< clang::TargetOptions > &options =
|
||||
@@ -2443,16 +2446,16 @@ Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *ostre
|
||||
triple.setTriple(llvm::sys::getDefaultTargetTriple());
|
||||
}
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_4 // 3.2, 3.3, 3.4
|
||||
options.Triple = triple.getTriple();
|
||||
#else // LLVM 3.5+
|
||||
options->Triple = triple.getTriple();
|
||||
#endif
|
||||
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2 // 3.2
|
||||
clang::TargetInfo *target =
|
||||
clang::TargetInfo::CreateTargetInfo(inst.getDiagnostics(), options);
|
||||
#elif defined(LLVM_3_3) || defined(LLVM_3_4)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_4 // 3.3, 3.4
|
||||
clang::TargetInfo *target =
|
||||
clang::TargetInfo::CreateTargetInfo(inst.getDiagnostics(), &options);
|
||||
#else // LLVM 3.5+
|
||||
@@ -2469,7 +2472,7 @@ Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *ostre
|
||||
// track the source file position by handling them ourselves.
|
||||
inst.getPreprocessorOutputOpts().ShowComments = 1;
|
||||
|
||||
#if !defined(LLVM_3_2) // LLVM 3.3+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3 // LLVM 3.3+
|
||||
inst.getPreprocessorOutputOpts().ShowCPP = 1;
|
||||
#endif
|
||||
|
||||
@@ -2481,7 +2484,7 @@ Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *ostre
|
||||
headerOpts.Verbose = 1;
|
||||
for (int i = 0; i < (int)g->includePath.size(); ++i) {
|
||||
headerOpts.AddPath(g->includePath[i], clang::frontend::Angled,
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
true /* is user supplied */,
|
||||
#endif
|
||||
false /* not a framework */,
|
||||
@@ -2560,7 +2563,7 @@ Module::execPreprocessor(const char *infilename, llvm::raw_string_ostream *ostre
|
||||
|
||||
inst.getLangOpts().LineComment = 1;
|
||||
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 /* 3.5+ */
|
||||
inst.createPreprocessor(clang::TU_Complete);
|
||||
#else
|
||||
inst.createPreprocessor();
|
||||
@@ -2905,7 +2908,7 @@ static void lEmitDispatchModule(llvm::Module *module,
|
||||
|
||||
// Do some rudimentary cleanup of the final result and make sure that
|
||||
// the module is all ok.
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::PassManager optPM;
|
||||
#else // LLVM 3.7+
|
||||
llvm::legacy::PassManager optPM;
|
||||
|
||||
11
module.h
11
module.h
@@ -41,10 +41,9 @@
|
||||
|
||||
#include "ispc.h"
|
||||
#include "ast.h"
|
||||
#if defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_4
|
||||
#include <llvm/DebugInfo.h>
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#elif ISPC_LLVM_VERSION >= ISPC_LLVM_3_5
|
||||
#include <llvm/IR/DebugInfo.h>
|
||||
#endif
|
||||
|
||||
@@ -161,10 +160,10 @@ public:
|
||||
/** The diBuilder manages generating debugging information */
|
||||
llvm::DIBuilder *diBuilder;
|
||||
|
||||
#if defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 && ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DICompileUnit diCompileUnit;
|
||||
#elif !defined(LLVM_3_2) && !defined(LLVM_3_3) // LLVM 3.7++
|
||||
llvm::DICompileUnit *diCompileUnit;
|
||||
#elif ISPC_LLVM_VERSION >= ISPC_LLVM_3_7
|
||||
llvm::DICompileUnit* diCompileUnit;
|
||||
#endif // LLVM_3_4+
|
||||
|
||||
private:
|
||||
|
||||
72
opt.cpp
72
opt.cpp
@@ -48,7 +48,7 @@
|
||||
#include <set>
|
||||
|
||||
#include <llvm/Pass.h>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Module.h>
|
||||
#include <llvm/Instructions.h>
|
||||
#include <llvm/Intrinsics.h>
|
||||
@@ -58,7 +58,7 @@
|
||||
#ifdef ISPC_NVPTX_ENABLED
|
||||
#include <llvm/InlineAsm.h>
|
||||
#endif /* ISPC_NVPTX_ENABLED */
|
||||
#else
|
||||
#else // LLVM 3.3+
|
||||
#include <llvm/IR/Module.h>
|
||||
#include <llvm/IR/Instructions.h>
|
||||
#include <llvm/IR/Intrinsics.h>
|
||||
@@ -69,28 +69,28 @@
|
||||
#include <llvm/IR/InlineAsm.h>
|
||||
#endif /* ISPC_NVPTX_ENABLED */
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) // LLVM 3.4+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 // LLVM 3.4+
|
||||
#include <llvm/Transforms/Instrumentation.h>
|
||||
#endif
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
#include "llvm/PassManager.h"
|
||||
#else // LLVM 3.7+
|
||||
#include "llvm/IR/LegacyPassManager.h"
|
||||
#endif
|
||||
#include <llvm/PassRegistry.h>
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
#include <llvm/IR/Verifier.h>
|
||||
#include <llvm/IR/IRPrintingPasses.h>
|
||||
#include <llvm/IR/PatternMatch.h>
|
||||
#include <llvm/IR/DebugInfo.h>
|
||||
#else
|
||||
#else // < 3.5
|
||||
#include <llvm/Analysis/Verifier.h>
|
||||
#include <llvm/Assembly/PrintModulePass.h>
|
||||
#include <llvm/Support/PatternMatch.h>
|
||||
#include <llvm/DebugInfo.h>
|
||||
#endif
|
||||
#include <llvm/Analysis/ConstantFolding.h>
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
#include <llvm/Target/TargetLibraryInfo.h>
|
||||
#else // LLVM 3.7+
|
||||
#include <llvm/Analysis/TargetLibraryInfo.h>
|
||||
@@ -101,7 +101,7 @@
|
||||
#include <llvm/Transforms/IPO.h>
|
||||
#include <llvm/Transforms/Utils/BasicBlockUtils.h>
|
||||
#include <llvm/Target/TargetOptions.h>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/DataLayout.h>
|
||||
#else // LLVM 3.3+
|
||||
#include <llvm/IR/DataLayout.h>
|
||||
@@ -111,7 +111,7 @@
|
||||
#include <llvm/Analysis/Passes.h>
|
||||
#include <llvm/Support/raw_ostream.h>
|
||||
#include <llvm/Support/Dwarf.h>
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) && !defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_6
|
||||
#include <llvm/IR/IntrinsicInst.h>
|
||||
#endif
|
||||
#ifdef ISPC_IS_LINUX
|
||||
@@ -238,33 +238,33 @@ lGetSourcePosFromMetadata(const llvm::Instruction *inst, SourcePos *pos) {
|
||||
llvm::MDString *str = llvm::dyn_cast<llvm::MDString>(filename->getOperand(0));
|
||||
Assert(str);
|
||||
llvm::ConstantInt *first_lnum =
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::dyn_cast<llvm::ConstantInt>(first_line->getOperand(0));
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::mdconst::extract<llvm::ConstantInt>(first_line->getOperand(0));
|
||||
#endif
|
||||
Assert(first_lnum);
|
||||
|
||||
llvm::ConstantInt *first_colnum =
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::dyn_cast<llvm::ConstantInt>(first_column->getOperand(0));
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::mdconst::extract<llvm::ConstantInt>(first_column->getOperand(0));
|
||||
#endif
|
||||
Assert(first_column);
|
||||
|
||||
llvm::ConstantInt *last_lnum =
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::dyn_cast<llvm::ConstantInt>(last_line->getOperand(0));
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::mdconst::extract<llvm::ConstantInt>(last_line->getOperand(0));
|
||||
#endif
|
||||
Assert(last_lnum);
|
||||
|
||||
llvm::ConstantInt *last_colnum =
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3)|| defined (LLVM_3_4)|| defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::dyn_cast<llvm::ConstantInt>(last_column->getOperand(0));
|
||||
#else // LLVN 3.6++
|
||||
#else /* LLVN 3.6+ */
|
||||
llvm::mdconst::extract<llvm::ConstantInt>(last_column->getOperand(0));
|
||||
#endif
|
||||
Assert(last_column);
|
||||
@@ -330,10 +330,10 @@ lGEPInst(llvm::Value *ptr, llvm::Value *offset, const char *name,
|
||||
llvm::Instruction *insertBefore) {
|
||||
llvm::Value *index[1] = { offset };
|
||||
llvm::ArrayRef<llvm::Value *> arrayRef(&index[0], &index[1]);
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
return llvm::GetElementPtrInst::Create(ptr, arrayRef, name,
|
||||
insertBefore);
|
||||
#else // LLVM 3.7++
|
||||
#else // LLVM 3.7+
|
||||
return llvm::GetElementPtrInst::Create(PTYPE(ptr), ptr, arrayRef,
|
||||
name, insertBefore);
|
||||
#endif
|
||||
@@ -466,15 +466,15 @@ public:
|
||||
DebugPassManager():number(0){}
|
||||
void add(llvm::Pass * P, int stage);
|
||||
bool run(llvm::Module& M) {return PM.run(M);}
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::PassManager& getPM() {return PM;}
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::legacy::PassManager& getPM() {return PM;}
|
||||
#endif
|
||||
private:
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::PassManager PM;
|
||||
#else // LLVM 3.7+
|
||||
#else /* LLVM 3.7+ */
|
||||
llvm::legacy::PassManager PM;
|
||||
#endif
|
||||
int number;
|
||||
@@ -500,7 +500,7 @@ DebugPassManager::add(llvm::Pass * P, int stage = -1) {
|
||||
PM.add(CreateDebugPass(buf));
|
||||
}
|
||||
|
||||
#if defined(LLVM_3_4) || defined(LLVM_3_5) // only 3.4 and 3.5
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_4 || ISPC_LLVM_VERSION == ISPC_LLVM_3_5 // only 3.4 and 3.5
|
||||
if (g->debugIR == number) {
|
||||
// adding generating of LLVM IR debug after optimization
|
||||
char buf[100];
|
||||
@@ -521,7 +521,7 @@ Optimize(llvm::Module *module, int optLevel) {
|
||||
DebugPassManager optPM;
|
||||
optPM.add(llvm::createVerifierPass(),0);
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::TargetLibraryInfo *targetLibraryInfo =
|
||||
new llvm::TargetLibraryInfo(llvm::Triple(module->getTargetTriple()));
|
||||
optPM.add(targetLibraryInfo);
|
||||
@@ -529,11 +529,11 @@ Optimize(llvm::Module *module, int optLevel) {
|
||||
optPM.add(new llvm::TargetLibraryInfoWrapperPass(llvm::Triple(module->getTargetTriple())));
|
||||
#endif
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_4
|
||||
optPM.add(new llvm::DataLayout(*g->target->getDataLayout()));
|
||||
#elif defined(LLVM_3_5)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_5
|
||||
optPM.add(new llvm::DataLayoutPass(*g->target->getDataLayout()));
|
||||
#elif defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_6
|
||||
llvm::DataLayoutPass *dlp= new llvm::DataLayoutPass();
|
||||
dlp->doInitialization(*module);
|
||||
optPM.add(dlp);
|
||||
@@ -541,10 +541,10 @@ Optimize(llvm::Module *module, int optLevel) {
|
||||
|
||||
llvm::TargetMachine *targetMachine = g->target->GetTargetMachine();
|
||||
|
||||
#ifdef LLVM_3_2
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
optPM.add(new llvm::TargetTransformInfo(targetMachine->getScalarTargetTransformInfo(),
|
||||
targetMachine->getVectorTargetTransformInfo()));
|
||||
#elif defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6) // LLVM 3.3 - 3.6
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
targetMachine->addAnalysisPasses(optPM.getPM());
|
||||
#else // LLVM 3.7+
|
||||
optPM.getPM().add(createTargetTransformInfoWrapperPass(targetMachine->getTargetIRAnalysis()));
|
||||
@@ -660,7 +660,7 @@ Optimize(llvm::Module *module, int optLevel) {
|
||||
optPM.add(llvm::createCFGSimplificationPass());
|
||||
|
||||
optPM.add(llvm::createArgumentPromotionPass());
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3
|
||||
// Starting from 3.4 this functionality was moved to
|
||||
// InstructionCombiningPass. See r184459 for details.
|
||||
optPM.add(llvm::createSimplifyLibCallsPass(), 240);
|
||||
@@ -810,7 +810,7 @@ Optimize(llvm::Module *module, int optLevel) {
|
||||
optPM.add(llvm::createCFGSimplificationPass());
|
||||
|
||||
optPM.add(llvm::createArgumentPromotionPass());
|
||||
#if defined(LLVM_3_1) || defined(LLVM_3_2) || defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3
|
||||
// Starting from 3.4 this functionality was moved to
|
||||
// InstructionCombiningPass. See r184459 for details.
|
||||
optPM.add(llvm::createSimplifyLibCallsPass());
|
||||
@@ -4924,7 +4924,7 @@ PeepholePass::PeepholePass()
|
||||
: BasicBlockPass(ID) {
|
||||
}
|
||||
|
||||
#if !defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3
|
||||
|
||||
using namespace llvm::PatternMatch;
|
||||
|
||||
@@ -5258,7 +5258,7 @@ PeepholePass::runOnBasicBlock(llvm::BasicBlock &bb) {
|
||||
llvm::Instruction *inst = &*iter;
|
||||
|
||||
llvm::Instruction *builtinCall = NULL;
|
||||
#if !defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3
|
||||
if (!builtinCall)
|
||||
builtinCall = lMatchAvgUpUInt8(inst);
|
||||
if (!builtinCall)
|
||||
@@ -5471,9 +5471,7 @@ llvm::Instruction* FixBooleanSelectPass::fixSelect(llvm::SelectInst* sel, llvm::
|
||||
bool
|
||||
FixBooleanSelectPass::runOnFunction(llvm::Function &F) {
|
||||
bool modifiedAny = false;
|
||||
|
||||
// LLVM 3.3 only
|
||||
#if defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_3 // LLVM 3.3 only
|
||||
|
||||
// Don't optimize generic targets.
|
||||
if (g->target->getISA() == Target::GENERIC) {
|
||||
|
||||
2
parse.yy
2
parse.yy
@@ -83,7 +83,7 @@ struct ForeachDimension;
|
||||
#include "util.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Constants.h>
|
||||
#else
|
||||
#include <llvm/IR/Constants.h>
|
||||
|
||||
10
stmt.cpp
10
stmt.cpp
@@ -48,7 +48,7 @@
|
||||
#include <stdio.h>
|
||||
#include <map>
|
||||
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Module.h>
|
||||
#include <llvm/Type.h>
|
||||
#include <llvm/Instructions.h>
|
||||
@@ -190,7 +190,11 @@ static llvm::Value* lConvertToGenericPtr(FunctionEmitContext *ctx, llvm::Value *
|
||||
llvm::Function *func_warp_index = m->module->getFunction("__warp_index");
|
||||
llvm::Value *warpId = ctx->CallInst(func_warp_index, NULL, std::vector<llvm::Value*>(), "gep2gen_warp_index");
|
||||
llvm::Value *offset = ctx->BinaryOperator(llvm::Instruction::Mul, warpId, LLVMInt32(numEl), "gep2gen_offset");
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
value = llvm::GetElementPtrInst::Create(value, offset, "gep2gen_offset", ctx->GetCurrentBasicBlock());
|
||||
#else
|
||||
value = llvm::GetElementPtrInst::Create(NULL, value, offset, "gep2gen_offset", ctx->GetCurrentBasicBlock());
|
||||
#endif
|
||||
}
|
||||
|
||||
/* convert arrElTy* to elTy* */
|
||||
@@ -1535,7 +1539,11 @@ lUpdateVaryingCounter(int dim, int nDims, FunctionEmitContext *ctx,
|
||||
ptr_arrayidx_indices.push_back(LLVMInt32(0));
|
||||
ptr_arrayidx_indices.push_back(laneIdx);
|
||||
#if 1
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::Instruction* ptr_arrayidx = llvm::GetElementPtrInst::Create(globalDelta, ptr_arrayidx_indices, "arrayidx", ctx->GetCurrentBasicBlock());
|
||||
#else
|
||||
llvm::Instruction* ptr_arrayidx = llvm::GetElementPtrInst::Create(NULL, globalDelta, ptr_arrayidx_indices, "arrayidx", ctx->GetCurrentBasicBlock());
|
||||
#endif
|
||||
llvm::LoadInst* int8_39 = new llvm::LoadInst(ptr_arrayidx, "", false, ctx->GetCurrentBasicBlock());
|
||||
llvm::Value * int32_39 = ctx->ZExtInst(int8_39, LLVMTypes::Int32Type);
|
||||
|
||||
|
||||
118
type.cpp
118
type.cpp
@@ -43,14 +43,14 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <map>
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Value.h>
|
||||
#include <llvm/Module.h>
|
||||
#else
|
||||
#include <llvm/IR/Value.h>
|
||||
#include <llvm/IR/Module.h>
|
||||
#endif
|
||||
#if !defined(LLVM_3_2) && !defined(LLVM_3_3) && !defined(LLVM_3_4) // LLVM 3.5+
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_5 // LLVM 3.5+
|
||||
#include <llvm/IR/DebugInfo.h>
|
||||
#include <llvm/IR/DIBuilder.h>
|
||||
#else
|
||||
@@ -79,12 +79,13 @@ lShouldPrintName(const std::string &name) {
|
||||
|
||||
/** Utility routine to create a llvm array type of the given number of
|
||||
the given element type. */
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5) || defined (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
static llvm::DIType lCreateDIArray(llvm::DIType eltType, int count) {
|
||||
#else // LLVM 3.7++
|
||||
static llvm::DIType *lCreateDIArray(llvm::DIType *eltType, int count) {
|
||||
#endif
|
||||
#ifdef LLVM_3_2
|
||||
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
int lowerBound = 0, upperBound = count-1;
|
||||
|
||||
if (count == 0) {
|
||||
@@ -94,11 +95,11 @@ static llvm::DIType *lCreateDIArray(llvm::DIType *eltType, int count) {
|
||||
}
|
||||
|
||||
llvm::Value *sub = m->diBuilder->getOrCreateSubrange(lowerBound, upperBound);
|
||||
#elif defined (LLVM_3_3)|| defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::Value *sub = m->diBuilder->getOrCreateSubrange(0, count);
|
||||
#endif
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
std::vector<llvm::Value *> subs;
|
||||
#else // LLVM 3.6++
|
||||
llvm::Metadata *sub = m->diBuilder->getOrCreateSubrange(0, count);
|
||||
@@ -106,7 +107,7 @@ static llvm::DIType *lCreateDIArray(llvm::DIType *eltType, int count) {
|
||||
#endif
|
||||
subs.push_back(sub);
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5) || defined (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIArray subArray = m->diBuilder->getOrCreateArray(subs);
|
||||
uint64_t size = eltType.getSizeInBits() * count;
|
||||
uint64_t align = eltType.getAlignInBits();
|
||||
@@ -525,7 +526,7 @@ AtomicType::LLVMType(llvm::LLVMContext *ctx) const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType AtomicType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
#else //LLVM 3.7++
|
||||
llvm::DIType *AtomicType::GetDIType(llvm::DIScope *scope) const {
|
||||
@@ -535,7 +536,7 @@ llvm::DIType *AtomicType::GetDIType(llvm::DIScope *scope) const {
|
||||
if (variability.type == Variability::Uniform) {
|
||||
switch (basicType) {
|
||||
case TYPE_VOID:
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
return llvm::DIType();
|
||||
#else //LLVM 3.7++
|
||||
return NULL;
|
||||
@@ -586,29 +587,31 @@ llvm::DIType *AtomicType::GetDIType(llvm::DIScope *scope) const {
|
||||
break;
|
||||
default:
|
||||
FATAL("unhandled basic type in AtomicType::GetDIType()");
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
return llvm::DIType();
|
||||
#else //LLVM 3.7++
|
||||
#else //LLVM 3.7+
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (variability == Variability::Varying) {
|
||||
#ifdef LLVM_3_2
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
llvm::Value *sub = m->diBuilder->getOrCreateSubrange(0, g->target->getVectorWidth()-1);
|
||||
#elif defined (LLVM_3_3)|| defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#elif ISPC_LLVM_VERSION > ISPC_VERSION_3_2 && ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::Value *sub = m->diBuilder->getOrCreateSubrange(0, g->target->getVectorWidth());
|
||||
#else // LLVM 3.6++
|
||||
#else // LLVM 3.6+
|
||||
llvm::Metadata *sub = m->diBuilder->getOrCreateSubrange(0, g->target->getVectorWidth());
|
||||
#endif
|
||||
#if defined (LLVM_3_3)|| defined (LLVM_3_4) || defined (LLVM_3_5) || defined (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION > ISPC_VERSION_3_2 && ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIArray subArray = m->diBuilder->getOrCreateArray(sub);
|
||||
llvm::DIType unifType = GetAsUniformType()->GetDIType(scope);
|
||||
uint64_t size = unifType.getSizeInBits() * g->target->getVectorWidth();
|
||||
uint64_t align = unifType.getAlignInBits() * g->target->getVectorWidth();
|
||||
#else // LLVM 3.7++
|
||||
#else // LLVM 3.7+
|
||||
llvm::DINodeArray subArray = m->diBuilder->getOrCreateArray(sub);
|
||||
llvm::DIType *unifType = GetAsUniformType()->GetDIType(scope);
|
||||
//llvm::DebugNodeArray subArray = m->diBuilder->getOrCreateArray(sub);
|
||||
//llvm::MDType *unifType = GetAsUniformType()->GetDIType(scope);
|
||||
uint64_t size = unifType->getSizeInBits() * g->target->getVectorWidth();
|
||||
uint64_t align = unifType->getAlignInBits()* g->target->getVectorWidth();
|
||||
#endif
|
||||
@@ -844,15 +847,15 @@ EnumType::LLVMType(llvm::LLVMContext *ctx) const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType EnumType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
#else // LLVM 3.7++
|
||||
#else // LLVM 3.7+
|
||||
llvm::DIType *EnumType::GetDIType(llvm::DIScope *scope) const {
|
||||
#endif
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
std::vector<llvm::Value *> enumeratorDescriptors;
|
||||
#else // LLVM 3.6++
|
||||
#else // LLVM 3.6+
|
||||
std::vector<llvm::Metadata *> enumeratorDescriptors;
|
||||
#endif
|
||||
for (unsigned int i = 0; i < enumerators.size(); ++i) {
|
||||
@@ -860,15 +863,15 @@ llvm::DIType *EnumType::GetDIType(llvm::DIScope *scope) const {
|
||||
Assert(enumerators[i]->constValue != NULL);
|
||||
int count = enumerators[i]->constValue->GetValues(&enumeratorValue);
|
||||
Assert(count == 1);
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::Value *descriptor =
|
||||
#else // LLVM 3.6++
|
||||
#else // LLVM 3.6+
|
||||
llvm::Metadata *descriptor =
|
||||
#endif
|
||||
m->diBuilder->createEnumerator(enumerators[i]->name, enumeratorValue);
|
||||
enumeratorDescriptors.push_back(descriptor);
|
||||
}
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIArray elementArray =
|
||||
m->diBuilder->getOrCreateArray(enumeratorDescriptors);
|
||||
llvm::DIFile diFile = pos.GetDIFile();
|
||||
@@ -877,7 +880,7 @@ llvm::DIType *EnumType::GetDIType(llvm::DIScope *scope) const {
|
||||
32 /* size in bits */,
|
||||
32 /* align in bits */,
|
||||
elementArray, llvm::DIType());
|
||||
#else // LLVM 3.7++
|
||||
#else // LLVM 3.7+
|
||||
llvm::DINodeArray elementArray =
|
||||
m->diBuilder->getOrCreateArray(enumeratorDescriptors);
|
||||
llvm::DIFile *diFile = pos.GetDIFile();
|
||||
@@ -891,19 +894,20 @@ llvm::DIType *EnumType::GetDIType(llvm::DIScope *scope) const {
|
||||
case Variability::Uniform:
|
||||
return diType;
|
||||
case Variability::Varying: {
|
||||
#ifdef LLVM_3_2
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
llvm::Value *sub = m->diBuilder->getOrCreateSubrange(0, g->target->getVectorWidth()-1);
|
||||
#elif defined (LLVM_3_3)|| defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::Value *sub = m->diBuilder->getOrCreateSubrange(0, g->target->getVectorWidth());
|
||||
#else // LLVM 3.6++
|
||||
llvm::Metadata *sub = m->diBuilder->getOrCreateSubrange(0, g->target->getVectorWidth());
|
||||
#endif
|
||||
#if defined (LLVM_3_3)|| defined (LLVM_3_4) || defined (LLVM_3_5) || defined (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIArray subArray = m->diBuilder->getOrCreateArray(sub);
|
||||
uint64_t size = diType.getSizeInBits() * g->target->getVectorWidth();
|
||||
uint64_t size = diType.getSizeInBits() * g->target->getVectorWidth();
|
||||
uint64_t align = diType.getAlignInBits() * g->target->getVectorWidth();
|
||||
#else // LLVM 3.7++
|
||||
#elif ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
llvm::DINodeArray subArray = m->diBuilder->getOrCreateArray(sub);
|
||||
//llvm::DebugNodeArray subArray = m->diBuilder->getOrCreateArray(sub);
|
||||
uint64_t size = diType->getSizeInBits() * g->target->getVectorWidth();
|
||||
uint64_t align = diType->getAlignInBits()* g->target->getVectorWidth();
|
||||
#endif
|
||||
@@ -914,7 +918,7 @@ llvm::DIType *EnumType::GetDIType(llvm::DIScope *scope) const {
|
||||
}
|
||||
default:
|
||||
FATAL("Unexpected variability in EnumType::GetDIType()");
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
return llvm::DIType();
|
||||
#else //LLVM 3.7++
|
||||
return NULL;
|
||||
@@ -1252,7 +1256,7 @@ PointerType::LLVMType(llvm::LLVMContext *ctx) const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType PointerType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
if (baseType == NULL) {
|
||||
Assert(m->errorCount > 0);
|
||||
@@ -1275,7 +1279,7 @@ llvm::DIType *PointerType::GetDIType(llvm::DIScope *scope) const {
|
||||
ptrAlignBits);
|
||||
case Variability::Varying: {
|
||||
// emit them as an array of pointers
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType eltType =
|
||||
#else //LLVM 3.7++
|
||||
llvm::DIDerivedType *eltType =
|
||||
@@ -1289,7 +1293,7 @@ llvm::DIType *PointerType::GetDIType(llvm::DIScope *scope) const {
|
||||
}
|
||||
default:
|
||||
FATAL("Unexpected variability in PointerType::GetDIType()");
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
return llvm::DIType();
|
||||
#else //LLVM 3.7++
|
||||
return NULL;
|
||||
@@ -1567,7 +1571,7 @@ ArrayType::TotalElementCount() const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType ArrayType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
if (child == NULL) {
|
||||
Assert(m->errorCount > 0);
|
||||
@@ -1816,16 +1820,16 @@ VectorType::LLVMType(llvm::LLVMContext *ctx) const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType VectorType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
llvm::DIType eltType = base->GetDIType(scope);
|
||||
#else //LLVM 3.7++
|
||||
llvm::DIType *VectorType::GetDIType(llvm::DIScope *scope) const {
|
||||
llvm::DIType *eltType = base->GetDIType(scope);
|
||||
#endif
|
||||
#ifdef LLVM_3_2
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
llvm::Value *sub = m->diBuilder->getOrCreateSubrange(0, numElements-1);
|
||||
#elif defined (LLVM_3_3)|| defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::Value *sub = m->diBuilder->getOrCreateSubrange(0, numElements);
|
||||
#else // LLVM 3.6++
|
||||
llvm::Metadata *sub = m->diBuilder->getOrCreateSubrange(0, numElements);
|
||||
@@ -1834,7 +1838,7 @@ llvm::DIType *VectorType::GetDIType(llvm::DIScope *scope) const {
|
||||
// vectors of varying types are already naturally aligned to the
|
||||
// machine's vector width, but arrays of uniform types need to be
|
||||
// explicitly aligned to the machines natural vector alignment.
|
||||
#if defined (LLVM_3_3)|| defined (LLVM_3_4) || defined (LLVM_3_5) || defined (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIArray subArray = m->diBuilder->getOrCreateArray(sub);
|
||||
uint64_t sizeBits = eltType.getSizeInBits() * numElements;
|
||||
uint64_t align = eltType.getAlignInBits();
|
||||
@@ -1855,7 +1859,7 @@ llvm::DIType *VectorType::GetDIType(llvm::DIScope *scope) const {
|
||||
}
|
||||
else {
|
||||
FATAL("Unexpected variability in VectorType::GetDIType()");
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
return llvm::DIType();
|
||||
#else // LLVM 3.7++
|
||||
return NULL;
|
||||
@@ -2259,13 +2263,13 @@ StructType::LLVMType(llvm::LLVMContext *ctx) const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType StructType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
#else //LLVM 3.7++
|
||||
llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
|
||||
#endif
|
||||
uint64_t currentSize = 0, align = 0;
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
std::vector<llvm::Value *> elementLLVMTypes;
|
||||
#else // LLVM 3.6++
|
||||
std::vector<llvm::Metadata *> elementLLVMTypes;
|
||||
@@ -2274,7 +2278,7 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
|
||||
// alignment and size, using that to figure out its offset w.r.t. the
|
||||
// start of the structure.
|
||||
for (unsigned int i = 0; i < elementTypes.size(); ++i) {
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5) || defined (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType eltType = GetElementType(i)->GetDIType(scope);
|
||||
uint64_t eltAlign = eltType.getAlignInBits();
|
||||
uint64_t eltSize = eltType.getSizeInBits();
|
||||
@@ -2296,7 +2300,7 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
|
||||
Assert((currentSize == 0) || (currentSize % eltAlign) == 0);
|
||||
|
||||
int line = elementPositions[i].first_line;
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5) || defined (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIFile diFile = elementPositions[i].GetDIFile();
|
||||
llvm::DIType fieldType =
|
||||
#else // LLVM 3.7++
|
||||
@@ -2316,7 +2320,7 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
|
||||
if (currentSize > 0 && (currentSize % align))
|
||||
currentSize += align - (currentSize % align);
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5) || defined (LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIArray elements = m->diBuilder->getOrCreateArray(elementLLVMTypes);
|
||||
llvm::DIFile diFile = pos.GetDIFile();
|
||||
#else // LLVM 3.7++
|
||||
@@ -2331,9 +2335,9 @@ llvm::DIType *StructType::GetDIType(llvm::DIScope *scope) const {
|
||||
currentSize, // Size in bits
|
||||
align, // Alignment in bits
|
||||
0, // Flags
|
||||
#if defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3 && ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType(), // DerivedFrom
|
||||
#elif !defined(LLVM_3_2) // LLVM 3.7++
|
||||
#elif ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7++
|
||||
NULL,
|
||||
#endif
|
||||
elements);
|
||||
@@ -2564,7 +2568,7 @@ UndefinedStructType::LLVMType(llvm::LLVMContext *ctx) const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType UndefinedStructType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
llvm::DIFile diFile = pos.GetDIFile();
|
||||
llvm::DIArray elements;
|
||||
@@ -2581,9 +2585,9 @@ llvm::DIType *UndefinedStructType::GetDIType(llvm::DIScope *scope) const {
|
||||
0, // Size
|
||||
0, // Align
|
||||
0, // Flags
|
||||
#if defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_3 && ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType(), // DerivedFrom
|
||||
#elif !defined(LLVM_3_2) // LLVM 3.7++
|
||||
#elif ISPC_LLVM_VERSION >= ISPC_LLVM_3_7 // LLVM 3.7+
|
||||
NULL,
|
||||
#endif
|
||||
elements);
|
||||
@@ -2838,7 +2842,7 @@ ReferenceType::LLVMType(llvm::LLVMContext *ctx) const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType ReferenceType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
if (targetType == NULL) {
|
||||
Assert(m->errorCount > 0);
|
||||
@@ -3117,13 +3121,13 @@ FunctionType::LLVMType(llvm::LLVMContext *ctx) const {
|
||||
}
|
||||
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType FunctionType::GetDIType(llvm::DIDescriptor scope) const {
|
||||
#else //LLVM 3.7++
|
||||
llvm::DIType *FunctionType::GetDIType(llvm::DIScope *scope) const {
|
||||
#endif
|
||||
|
||||
#if defined (LLVM_3_2) || defined (LLVM_3_3) || defined (LLVM_3_4) || defined (LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
std::vector<llvm::Value *> retArgTypes;
|
||||
#else // LLVM 3.6++
|
||||
std::vector<llvm::Metadata *> retArgTypes;
|
||||
@@ -3133,28 +3137,28 @@ llvm::DIType *FunctionType::GetDIType(llvm::DIScope *scope) const {
|
||||
const Type *t = GetParameterType(i);
|
||||
if (t == NULL)
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3
|
||||
return llvm::DIType();
|
||||
#elif defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
return llvm::DICompositeType();
|
||||
#else // LLVM 3.7++
|
||||
return NULL;
|
||||
#endif
|
||||
retArgTypes.push_back(t->GetDIType(scope));
|
||||
}
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_5
|
||||
llvm::DIArray retArgTypesArray =
|
||||
m->diBuilder->getOrCreateArray(llvm::ArrayRef<llvm::Value *>(retArgTypes));
|
||||
llvm::DIType diType =
|
||||
// FIXME: DIFile
|
||||
m->diBuilder->createSubroutineType(llvm::DIFile(), retArgTypesArray);
|
||||
#elif defined(LLVM_3_6)
|
||||
#elif ISPC_LLVM_VERSION == ISPC_LLVM_3_6
|
||||
llvm::DITypeArray retArgTypesArray =
|
||||
m->diBuilder->getOrCreateTypeArray(retArgTypes);
|
||||
llvm::DIType diType =
|
||||
// FIXME: DIFile
|
||||
m->diBuilder->createSubroutineType(llvm::DIFile(), retArgTypesArray);
|
||||
#else // LLVM 3.7++
|
||||
#else // LLVM 3.7+
|
||||
llvm::DITypeRefArray retArgTypesArray =
|
||||
m->diBuilder->getOrCreateTypeArray(retArgTypes);
|
||||
llvm::DIType *diType =
|
||||
|
||||
24
type.h
24
type.h
@@ -40,10 +40,10 @@
|
||||
|
||||
#include "ispc.h"
|
||||
#include "util.h"
|
||||
#if defined(LLVM_3_2)
|
||||
#if ISPC_LLVM_VERSION == ISPC_LLVM_3_2
|
||||
#include <llvm/Type.h>
|
||||
#include <llvm/DerivedTypes.h>
|
||||
#else
|
||||
#else // >= 3.3
|
||||
#include <llvm/IR/Type.h>
|
||||
#include <llvm/IR/DerivedTypes.h>
|
||||
#endif
|
||||
@@ -222,7 +222,7 @@ public:
|
||||
/** Returns the LLVM type corresponding to this ispc type */
|
||||
virtual llvm::Type *LLVMType(llvm::LLVMContext *ctx) const = 0;
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
/** Returns the DIType (LLVM's debugging information structure),
|
||||
corresponding to this type. */
|
||||
virtual llvm::DIType GetDIType(llvm::DIDescriptor scope) const = 0;
|
||||
@@ -317,7 +317,7 @@ public:
|
||||
std::string GetCDeclaration(const std::string &name) const;
|
||||
|
||||
llvm::Type *LLVMType(llvm::LLVMContext *ctx) const;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
@@ -400,7 +400,7 @@ public:
|
||||
const std::string &GetEnumName() const { return name; }
|
||||
|
||||
llvm::Type *LLVMType(llvm::LLVMContext *ctx) const;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
@@ -485,7 +485,7 @@ public:
|
||||
std::string GetCDeclaration(const std::string &name) const;
|
||||
|
||||
llvm::Type *LLVMType(llvm::LLVMContext *ctx) const;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
@@ -591,7 +591,7 @@ public:
|
||||
std::string Mangle() const;
|
||||
std::string GetCDeclaration(const std::string &name) const;
|
||||
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
@@ -663,7 +663,7 @@ public:
|
||||
std::string GetCDeclaration(const std::string &name) const;
|
||||
|
||||
llvm::Type *LLVMType(llvm::LLVMContext *ctx) const;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
@@ -718,7 +718,7 @@ public:
|
||||
std::string GetCDeclaration(const std::string &name) const;
|
||||
|
||||
llvm::Type *LLVMType(llvm::LLVMContext *ctx) const;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
@@ -810,7 +810,7 @@ public:
|
||||
std::string GetCDeclaration(const std::string &name) const;
|
||||
|
||||
llvm::Type *LLVMType(llvm::LLVMContext *ctx) const;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
@@ -857,7 +857,7 @@ public:
|
||||
std::string GetCDeclaration(const std::string &name) const;
|
||||
|
||||
llvm::Type *LLVMType(llvm::LLVMContext *ctx) const;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
@@ -915,7 +915,7 @@ public:
|
||||
std::string GetCDeclarationForDispatch(const std::string &fname) const;
|
||||
|
||||
llvm::Type *LLVMType(llvm::LLVMContext *ctx) const;
|
||||
#if defined(LLVM_3_2) || defined(LLVM_3_3) || defined(LLVM_3_4) || defined(LLVM_3_5) || defined(LLVM_3_6)
|
||||
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_6
|
||||
llvm::DIType GetDIType(llvm::DIDescriptor scope) const;
|
||||
#else // LLVM 3.7++
|
||||
llvm::DIType *GetDIType(llvm::DIScope *scope) const;
|
||||
|
||||
Reference in New Issue
Block a user