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:
16
alloy.py
16
alloy.py
@@ -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',
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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 *''
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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 *''
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
')
|
')
|
||||||
|
|||||||
37
cbackend.cpp
37
cbackend.cpp
@@ -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
2
ispc.h
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
25
module.cpp
25
module.cpp
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user