Merge pull request #1259 from dbabokin/llvm50

Enabling LLVM 5.0 and making fixes to track changes in LLVM for the past couple months.
This commit is contained in:
Dmitry Babokin
2017-03-01 11:39:53 -08:00
committed by GitHub
12 changed files with 99 additions and 16 deletions

View File

@@ -137,6 +137,9 @@ def checkout_LLVM(component, use_git, version_LLVM, revision, target_dir, from_v
if version_LLVM == "trunk": if version_LLVM == "trunk":
SVN_PATH="trunk" SVN_PATH="trunk"
GIT_BRANCH="master" GIT_BRANCH="master"
elif version_LLVM == "4_0":
SVN_PATH="branches/release_40"
GIT_BRANCH="release_40"
elif version_LLVM == "3_9": elif version_LLVM == "3_9":
SVN_PATH="tags/RELEASE_390/final" SVN_PATH="tags/RELEASE_390/final"
GIT_BRANCH="release_39" GIT_BRANCH="release_39"
@@ -392,6 +395,7 @@ def unsupported_llvm_targets(LLVM_VERSION):
"3.8":[], "3.8":[],
"3.9":[], "3.9":[],
"4.0":[], "4.0":[],
"5.0":[],
"trunk":[]} "trunk":[]}
return prohibited_list[LLVM_VERSION] return prohibited_list[LLVM_VERSION]
@@ -518,8 +522,10 @@ def build_ispc(version_LLVM, make):
temp = "3_8" temp = "3_8"
if version_LLVM == "3.9": if version_LLVM == "3.9":
temp = "3_9" temp = "3_9"
if version_LLVM == "trunk": if version_LLVM == "4.0":
temp = "4_0" temp = "4_0"
if version_LLVM == "trunk":
temp = "5_0"
os.environ["LLVM_VERSION"] = "LLVM_" + temp os.environ["LLVM_VERSION"] = "LLVM_" + temp
try_do_LLVM("clean ISPC for building", "msbuild ispc.vcxproj /t:clean", True) try_do_LLVM("clean ISPC for building", "msbuild ispc.vcxproj /t:clean", True)
try_do_LLVM("build ISPC with LLVM version " + version_LLVM + " ", "msbuild ispc.vcxproj /V:m /p:Platform=Win32 /p:Configuration=Release /t:rebuild", True) try_do_LLVM("build ISPC with LLVM version " + version_LLVM + " ", "msbuild ispc.vcxproj /V:m /p:Platform=Win32 /p:Configuration=Release /t:rebuild", True)
@@ -659,7 +665,7 @@ def validation_run(only, only_targets, reference_branch, number, notify, update,
archs.append("x86-64") archs.append("x86-64")
if "native" in only: if "native" in only:
sde_targets_t = [] sde_targets_t = []
for i in ["3.2", "3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "trunk"]: for i in ["3.2", "3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "4.0", "trunk"]:
if i in only: if i in only:
LLVM.append(i) LLVM.append(i)
if "current" in only: if "current" in only:
@@ -945,7 +951,7 @@ def Main():
if os.environ.get("SMTP_ISPC") == None: if os.environ.get("SMTP_ISPC") == None:
error("you have no SMTP_ISPC in your environment for option notify", 1) error("you have no SMTP_ISPC in your environment for option notify", 1)
if options.only != "": if options.only != "":
test_only_r = " 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 trunk current build stability performance x86 x86-64 x86_64 -O0 -O2 native debug nodebug " test_only_r = " 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 trunk current build stability performance x86 x86-64 x86_64 -O0 -O2 native debug nodebug "
test_only = options.only.split(" ") test_only = options.only.split(" ")
for iterator in test_only: for iterator in test_only:
if not (" " + iterator + " " in test_only_r): if not (" " + iterator + " " in test_only_r):
@@ -1058,7 +1064,7 @@ if __name__ == '__main__':
llvm_group = OptionGroup(parser, "Options for building LLVM", llvm_group = OptionGroup(parser, "Options for building LLVM",
"These options must be used with -b option.") "These options must be used with -b option.")
llvm_group.add_option('--version', dest='version', llvm_group.add_option('--version', dest='version',
help='version of llvm to build: 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 trunk. Default: trunk', default="trunk") help='version of llvm to build: 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 trunk. Default: trunk', default="trunk")
llvm_group.add_option('--with-gcc-toolchain', dest='gcc_toolchain_path', llvm_group.add_option('--with-gcc-toolchain', dest='gcc_toolchain_path',
help='GCC install dir to use when building clang. It is important to set when ' + help='GCC install dir to use when building clang. It is important to set when ' +
'you have alternative gcc installation. Note that otherwise gcc from standard ' + 'you have alternative gcc installation. Note that otherwise gcc from standard ' +
@@ -1101,7 +1107,7 @@ if __name__ == '__main__':
run_group.add_option('--only', dest='only', run_group.add_option('--only', dest='only',
help='set types of tests. Possible values:\n' + help='set types of tests. Possible values:\n' +
'-O0, -O2, x86, x86-64, stability (test only stability), performance (test only performance),\n' + '-O0, -O2, x86, x86-64, stability (test only stability), performance (test only performance),\n' +
'build (only build with different LLVM), 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, trunk, native (do not use SDE),\n' + 'build (only build with different LLVM), 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, trunk, native (do not use SDE),\n' +
'current (do not rebuild ISPC), debug (only with debug info), nodebug (only without debug info, default).', 'current (do not rebuild ISPC), debug (only with debug info), nodebug (only without debug info, default).',
default="") default="")
run_group.add_option('--perf_LLVM', dest='perf_llvm', run_group.add_option('--perf_LLVM', dest='perf_llvm',

View File

@@ -1013,7 +1013,7 @@ lDefineConstantInt(const char *name, int val, llvm::Module *module,
sym_const_storagePtr); sym_const_storagePtr);
#else // LLVM 4.0+ #else // LLVM 4.0+
llvm::GlobalVariable *sym_GV_storagePtr = llvm::dyn_cast<llvm::GlobalVariable>(sym->storagePtr); llvm::GlobalVariable *sym_GV_storagePtr = llvm::dyn_cast<llvm::GlobalVariable>(sym->storagePtr);
llvm::DIGlobalVariable *var = m->diBuilder->createGlobalVariable( llvm::DIGlobalVariableExpression *var = m->diBuilder->createGlobalVariableExpression(
file, file,
name, name,
name, name,
@@ -1122,7 +1122,7 @@ lDefineProgramIndex(llvm::Module *module, SymbolTable *symbolTable) {
sym_const_storagePtr); sym_const_storagePtr);
#else // LLVM 4.0+ #else // LLVM 4.0+
llvm::GlobalVariable *sym_GV_storagePtr = llvm::dyn_cast<llvm::GlobalVariable>(sym->storagePtr); llvm::GlobalVariable *sym_GV_storagePtr = llvm::dyn_cast<llvm::GlobalVariable>(sym->storagePtr);
llvm::DIGlobalVariable *var = m->diBuilder->createGlobalVariable( llvm::DIGlobalVariableExpression *var = m->diBuilder->createGlobalVariableExpression(
file, file,
sym->name.c_str(), sym->name.c_str(),
sym->name.c_str(), sym->name.c_str(),

View File

@@ -153,6 +153,8 @@ define(`PTR_OP_ARGS',
LLVM_VERSION, LLVM_3_9, LLVM_VERSION, LLVM_3_9,
``$1 , $1 *'', ``$1 , $1 *'',
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
``$1 , $1 *'',
LLVM_VERSION, LLVM_5_0,
``$1 , $1 *'', ``$1 , $1 *'',
``$1 *'' ``$1 *''
) )

View File

@@ -38,6 +38,8 @@ ifelse(LLVM_VERSION, LLVM_3_7,
LLVM_VERSION, LLVM_3_9, LLVM_VERSION, LLVM_3_9,
`include(`target-avx512-common.ll')', `include(`target-avx512-common.ll')',
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
`include(`target-avx512-common.ll')',
LLVM_VERSION, LLVM_5_0,
`include(`target-avx512-common.ll')' `include(`target-avx512-common.ll')'
) )
@@ -64,6 +66,8 @@ ifelse(LLVM_VERSION, LLVM_3_7,
LLVM_VERSION, LLVM_3_9, LLVM_VERSION, LLVM_3_9,
rcp_rsqrt_varying_float_knl(), rcp_rsqrt_varying_float_knl(),
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
rcp_rsqrt_varying_float_knl(),
LLVM_VERSION, LLVM_5_0,
rcp_rsqrt_varying_float_knl() rcp_rsqrt_varying_float_knl()
) )

View File

@@ -37,6 +37,8 @@ ifelse(LLVM_VERSION, LLVM_3_8,
LLVM_VERSION, LLVM_3_9, LLVM_VERSION, LLVM_3_9,
`include(`target-avx512-common.ll')', `include(`target-avx512-common.ll')',
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
`include(`target-avx512-common.ll')',
LLVM_VERSION, LLVM_5_0,
`include(`target-avx512-common.ll')' `include(`target-avx512-common.ll')'
) )
@@ -84,6 +86,8 @@ ifelse(LLVM_VERSION, LLVM_3_8,
LLVM_VERSION, LLVM_3_9, LLVM_VERSION, LLVM_3_9,
rcp_rsqrt_varying_float_skx(), rcp_rsqrt_varying_float_skx(),
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
rcp_rsqrt_varying_float_skx(),
LLVM_VERSION, LLVM_5_0,
rcp_rsqrt_varying_float_skx() rcp_rsqrt_varying_float_skx()
) )

View File

@@ -59,6 +59,8 @@ define(`PTR_OP_ARGS',
LLVM_VERSION, LLVM_3_9, LLVM_VERSION, LLVM_3_9,
``$1 , $1 *'', ``$1 , $1 *'',
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
``$1 , $1 *'',
LLVM_VERSION, LLVM_5_0,
``$1 , $1 *'', ``$1 , $1 *'',
``$1 *'' ``$1 *''
) )

View File

@@ -59,6 +59,8 @@ define(`PTR_OP_ARGS',
LLVM_VERSION, LLVM_3_9, LLVM_VERSION, LLVM_3_9,
``$1 , $1 *'', ``$1 , $1 *'',
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
``$1 , $1 *'',
LLVM_VERSION, LLVM_5_0,
``$1 , $1 *'', ``$1 , $1 *'',
``$1 *'' ``$1 *''
) )
@@ -73,6 +75,8 @@ define(`MdORi64',
``i64'', ``i64'',
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
``i64'', ``i64'',
LLVM_VERSION, LLVM_5_0,
``i64'',
``double'' ``double''
) )
) )
@@ -84,6 +88,8 @@ define(`MfORi32',
``i32'', ``i32'',
LLVM_VERSION, LLVM_4_0, LLVM_VERSION, LLVM_4_0,
``i32'', ``i32'',
LLVM_VERSION, LLVM_5_0,
``i32'',
``float'' ``float''
) )
) )
@@ -1595,6 +1601,9 @@ define <$1 x $2> @__atomic_compare_exchange_$3_global($2* %ptr, <$1 x $2> %cmp,
',LLVM_VERSION,LLVM_4_0,` ',LLVM_VERSION,LLVM_4_0,`
%r_LANE_ID_t = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst seq_cst %r_LANE_ID_t = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst seq_cst
%r_LANE_ID = extractvalue { $2, i1 } %r_LANE_ID_t, 0 %r_LANE_ID = extractvalue { $2, i1 } %r_LANE_ID_t, 0
',LLVM_VERSION,LLVM_5_0,`
%r_LANE_ID_t = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst seq_cst
%r_LANE_ID = extractvalue { $2, i1 } %r_LANE_ID_t, 0
',` ',`
%r_LANE_ID = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst %r_LANE_ID = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst
') ')
@@ -1626,6 +1635,9 @@ define $2 @__atomic_compare_exchange_uniform_$3_global($2* %ptr, $2 %cmp,
',LLVM_VERSION,LLVM_4_0,` ',LLVM_VERSION,LLVM_4_0,`
%r_t = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst seq_cst %r_t = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst seq_cst
%r = extractvalue { $2, i1 } %r_t, 0 %r = extractvalue { $2, i1 } %r_t, 0
',LLVM_VERSION,LLVM_5_0,`
%r_t = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst seq_cst
%r = extractvalue { $2, i1 } %r_t, 0
',` ',`
%r = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst %r = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst
') ')

View File

@@ -1184,6 +1184,7 @@ void CWriter::printConstantDataSequential(llvm::ConstantDataSequential *CDS,
static inline std::string ftostr(const llvm::APFloat& V) { static inline std::string ftostr(const llvm::APFloat& V) {
std::string Buf; std::string Buf;
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_9
if (&V.getSemantics() == &llvm::APFloat::IEEEdouble) { if (&V.getSemantics() == &llvm::APFloat::IEEEdouble) {
llvm::raw_string_ostream(Buf) << V.convertToDouble(); llvm::raw_string_ostream(Buf) << V.convertToDouble();
return Buf; return Buf;
@@ -1191,6 +1192,15 @@ static inline std::string ftostr(const llvm::APFloat& V) {
llvm::raw_string_ostream(Buf) << (double)V.convertToFloat(); llvm::raw_string_ostream(Buf) << (double)V.convertToFloat();
return Buf; return Buf;
} }
#else // LLVM 4.0+
if (&V.getSemantics() == &llvm::APFloat::IEEEdouble()) {
llvm::raw_string_ostream(Buf) << V.convertToDouble();
return Buf;
} else if (&V.getSemantics() == &llvm::APFloat::IEEEsingle()) {
llvm::raw_string_ostream(Buf) << (double)V.convertToFloat();
return Buf;
}
#endif
return "<unknown format in ftostr>"; // error return "<unknown format in ftostr>"; // error
} }
@@ -1210,7 +1220,11 @@ static bool isFPCSafeToPrint(const llvm::ConstantFP *CFP) {
return false; return false;
llvm::APFloat APF = llvm::APFloat(CFP->getValueAPF()); // copy llvm::APFloat APF = llvm::APFloat(CFP->getValueAPF()); // copy
if (CFP->getType() == llvm::Type::getFloatTy(CFP->getContext())) if (CFP->getType() == llvm::Type::getFloatTy(CFP->getContext()))
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_9 // <= 3.9
APF.convert(llvm::APFloat::IEEEdouble, llvm::APFloat::rmNearestTiesToEven, &ignored); APF.convert(llvm::APFloat::IEEEdouble, llvm::APFloat::rmNearestTiesToEven, &ignored);
#else // LLVM 4.0+
APF.convert(llvm::APFloat::IEEEdouble(), llvm::APFloat::rmNearestTiesToEven, &ignored);
#endif
#if HAVE_PRINTF_A && ENABLE_CBE_PRINTF_A #if HAVE_PRINTF_A && ENABLE_CBE_PRINTF_A
char Buffer[100]; char Buffer[100];
sprintf(Buffer, "%a", APF.convertToDouble()); sprintf(Buffer, "%a", APF.convertToDouble());
@@ -1641,7 +1655,11 @@ void CWriter::printConstant(llvm::Constant *CPV, bool Static) {
// useful. // useful.
llvm::APFloat Tmp = FPC->getValueAPF(); llvm::APFloat Tmp = FPC->getValueAPF();
bool LosesInfo; bool LosesInfo;
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_9 // <= 3.9
Tmp.convert(llvm::APFloat::IEEEdouble, llvm::APFloat::rmTowardZero, &LosesInfo); Tmp.convert(llvm::APFloat::IEEEdouble, llvm::APFloat::rmTowardZero, &LosesInfo);
#else // LLVM 4.0+
Tmp.convert(llvm::APFloat::IEEEdouble(), llvm::APFloat::rmTowardZero, &LosesInfo);
#endif
V = Tmp.convertToDouble(); V = Tmp.convertToDouble();
} }
@@ -4556,7 +4574,11 @@ void CWriter::printGEPExpression(llvm::Value *Ptr, llvm::gep_type_iterator I,
llvm::VectorType *LastIndexIsVector = 0; llvm::VectorType *LastIndexIsVector = 0;
{ {
for (llvm::gep_type_iterator TmpI = I; TmpI != E; ++TmpI) for (llvm::gep_type_iterator TmpI = I; TmpI != E; ++TmpI)
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_9
LastIndexIsVector = llvm::dyn_cast<llvm::VectorType>(*TmpI); LastIndexIsVector = llvm::dyn_cast<llvm::VectorType>(*TmpI);
#else // LLVM 4.0+
LastIndexIsVector = llvm::dyn_cast<llvm::VectorType>(TmpI.getIndexedType());
#endif
} }
Out << "("; Out << "(";
@@ -4585,7 +4607,11 @@ void CWriter::printGEPExpression(llvm::Value *Ptr, llvm::gep_type_iterator I,
// exposed, like a global, avoid emitting (&foo)[0], just emit foo instead. // exposed, like a global, avoid emitting (&foo)[0], just emit foo instead.
if (isAddressExposed(Ptr)) { if (isAddressExposed(Ptr)) {
writeOperandInternal(Ptr, Static); writeOperandInternal(Ptr, Static);
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_9
} else if (I != E && (*I)->isStructTy()) { } else if (I != E && (*I)->isStructTy()) {
#else // LLVM 4.0+
} else if (I != E && I.isStruct()) {
#endif
// If we didn't already emit the first operand, see if we can print it as // If we didn't already emit the first operand, see if we can print it as
// P->f instead of "P[0].f" // P->f instead of "P[0].f"
writeOperand(Ptr); writeOperand(Ptr);
@@ -4600,13 +4626,18 @@ void CWriter::printGEPExpression(llvm::Value *Ptr, llvm::gep_type_iterator I,
} }
for (; I != E; ++I) { for (; I != E; ++I) {
if ((*I)->isStructTy()) { #if ISPC_LLVM_VERSION <= ISPC_LLVM_3_9
llvm::Type *type = *I;
#else // LLVM 4.0+
llvm::Type *type = I.getIndexedType();
#endif
if (type->isStructTy()) {
Out << ".field" << llvm::cast<llvm::ConstantInt>(I.getOperand())->getZExtValue(); Out << ".field" << llvm::cast<llvm::ConstantInt>(I.getOperand())->getZExtValue();
} else if ((*I)->isArrayTy()) { } else if (type->isArrayTy()) {
Out << ".array["; Out << ".array[";
writeOperandWithCast(I.getOperand(), llvm::Instruction::GetElementPtr); writeOperandWithCast(I.getOperand(), llvm::Instruction::GetElementPtr);
Out << ']'; Out << ']';
} else if (!(*I)->isVectorTy()) { } else if (!type->isVectorTy()) {
Out << '['; Out << '[';
writeOperandWithCast(I.getOperand(), llvm::Instruction::GetElementPtr); writeOperandWithCast(I.getOperand(), llvm::Instruction::GetElementPtr);
Out << ']'; Out << ']';

2
ispc.h
View File

@@ -41,7 +41,7 @@
#include "ispc_version.h" #include "ispc_version.h"
#if ISPC_LLVM_VERSION < OLDEST_SUPPORTED_LLVM || ISPC_LLVM_VERSION > LATEST_SUPPORTED_LLVM #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, 3.7, 3.8, 3.9 and 4.0 development branch are supported" #error "Only LLVM 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0 and 5.0 development branch are supported"
#endif #endif
#if defined(_WIN32) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN64)

View File

@@ -52,9 +52,10 @@
#define ISPC_LLVM_3_8 30800 #define ISPC_LLVM_3_8 30800
#define ISPC_LLVM_3_9 30900 #define ISPC_LLVM_3_9 30900
#define ISPC_LLVM_4_0 40000 #define ISPC_LLVM_4_0 40000
#define ISPC_LLVM_5_0 50000
#define OLDEST_SUPPORTED_LLVM ISPC_LLVM_3_2 #define OLDEST_SUPPORTED_LLVM ISPC_LLVM_3_2
#define LATEST_SUPPORTED_LLVM ISPC_LLVM_4_0 #define LATEST_SUPPORTED_LLVM ISPC_LLVM_5_0
#ifdef __ispc__xstr #ifdef __ispc__xstr
#undef __ispc__xstr #undef __ispc__xstr

View File

@@ -51,7 +51,11 @@
#include <llvm/IR/Constants.h> #include <llvm/IR/Constants.h>
#endif #endif
#if ISPC_LLVM_VERSION <= ISPC_LLVM_3_9
#define PTYPE(p) (llvm::cast<llvm::SequentialType>((p)->getType()->getScalarType())->getElementType()) #define PTYPE(p) (llvm::cast<llvm::SequentialType>((p)->getType()->getScalarType())->getElementType())
#else // LLVM 4.0+
#define PTYPE(p) (llvm::cast<llvm::PointerType>((p)->getType()->getScalarType())->getElementType())
#endif
namespace llvm { namespace llvm {
class PHINode; class PHINode;

View File

@@ -431,9 +431,7 @@ Module::Module(const char *fn) {
sprintf(producerString, "ispc version %s (built on %s)", sprintf(producerString, "ispc version %s (built on %s)",
ISPC_VERSION, __DATE__); ISPC_VERSION, __DATE__);
#endif #endif
#if ISPC_LLVM_VERSION >= ISPC_LLVM_3_4 // LLVM 3.4+ #if ISPC_LLVM_VERSION <= ISPC_LLVM_3_3
diCompileUnit =
#endif // LLVM_3_4+
diBuilder->createCompileUnit(llvm::dwarf::DW_LANG_C99, /* lang */ diBuilder->createCompileUnit(llvm::dwarf::DW_LANG_C99, /* lang */
name, /* filename */ name, /* filename */
directory, /* directory */ directory, /* directory */
@@ -441,6 +439,25 @@ Module::Module(const char *fn) {
g->opt.level > 0 /* is optimized */, g->opt.level > 0 /* is optimized */,
"-g", /* command line args */ "-g", /* command line args */
0 /* run time version */); 0 /* run time version */);
#elif ISPC_LLVM_VERSION <= ISPC_LLVM_3_9 // LLVM 3.4-3.9
diCompileUnit =
diBuilder->createCompileUnit(llvm::dwarf::DW_LANG_C99, /* lang */
name, /* filename */
directory, /* directory */
producerString, /* producer */
g->opt.level > 0 /* is optimized */,
"-g", /* command line args */
0 /* run time version */);
#elif ISPC_LLVM_VERSION >= ISPC_LLVM_4_0 // LLVM 4.0+
auto srcFile = diBuilder->createFile(name, directory);
diCompileUnit =
diBuilder->createCompileUnit(llvm::dwarf::DW_LANG_C99, /* lang */
srcFile, /* filename */
producerString, /* producer */
g->opt.level > 0 /* is optimized */,
"-g", /* command line args */
0 /* run time version */);
#endif
} }
} }
else else
@@ -758,7 +775,7 @@ Module::AddGlobalVariable(const std::string &name, const Type *type, Expr *initE
//llvm::MDFile *file = pos.GetDIFile(); //llvm::MDFile *file = pos.GetDIFile();
llvm::GlobalVariable *sym_GV_storagePtr = llvm::dyn_cast<llvm::GlobalVariable>(sym->storagePtr); llvm::GlobalVariable *sym_GV_storagePtr = llvm::dyn_cast<llvm::GlobalVariable>(sym->storagePtr);
Assert(sym_GV_storagePtr); Assert(sym_GV_storagePtr);
llvm::DIGlobalVariable *var = diBuilder->createGlobalVariable( llvm::DIGlobalVariableExpression *var = diBuilder->createGlobalVariableExpression(
file, file,
name, name,
name, name,