Merge pull request #946 from egaburov/nvptx_cuda7
a fix for LLVM 3.5 when used with CUDA 7
This commit is contained in:
19
module.cpp
19
module.cpp
@@ -1216,6 +1216,7 @@ lFixAttributes(const vecString_t &src, vecString_t &dst)
|
|||||||
typedef std::map<std::string, std::string> attributeMap_t;
|
typedef std::map<std::string, std::string> attributeMap_t;
|
||||||
attributeMap_t attributeMap;
|
attributeMap_t attributeMap;
|
||||||
|
|
||||||
|
#ifdef ISPC_NVPTX_NVVM_OLD /* guard for NVVM from CUDA TK < 7.0 */
|
||||||
for (vecString_t::const_iterator it = src.begin(); it != src.end(); it++)
|
for (vecString_t::const_iterator it = src.begin(); it != src.end(); it++)
|
||||||
{
|
{
|
||||||
const vecString_t words = lSplitString(*it);
|
const vecString_t words = lSplitString(*it);
|
||||||
@@ -1232,9 +1233,12 @@ lFixAttributes(const vecString_t &src, vecString_t &dst)
|
|||||||
attributeMap[words[1]] = attributes;
|
attributeMap[words[1]] = attributes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
for (vecString_t::const_iterator it = src.begin(); it != src.end(); it++)
|
for (vecString_t::const_iterator it = src.begin(); it != src.end(); it++)
|
||||||
{
|
{
|
||||||
vecString_t words = lSplitString(*it);
|
vecString_t words = lSplitString(*it);
|
||||||
|
/* evghenii: is there a cleaner way to set target datalayout for ptx ? */
|
||||||
if (words.size() > 1 && (words[0] == "target" && words[1] == "datalayout"))
|
if (words.size() > 1 && (words[0] == "target" && words[1] == "datalayout"))
|
||||||
{
|
{
|
||||||
std::string s = "target datalayout = ";
|
std::string s = "target datalayout = ";
|
||||||
@@ -1248,9 +1252,10 @@ lFixAttributes(const vecString_t &src, vecString_t &dst)
|
|||||||
continue;
|
continue;
|
||||||
std::string s;
|
std::string s;
|
||||||
std::map<std::string, std::string> attributeSet;
|
std::map<std::string, std::string> attributeSet;
|
||||||
#if 1 /* this attributed cannot be used in function parametrers, so remove them */
|
#ifdef ISPC_NVPTX_NVVM_OLD /* guard for NVVM from CUDA TK < 7.0 */
|
||||||
attributeSet["readnone"] = " ";
|
/* this attributed cannot be used in function parameters, so remove them */
|
||||||
attributeSet["readonly"] = " ";
|
attributeSet["readnone"] = " ";
|
||||||
|
attributeSet["readonly"] = " ";
|
||||||
attributeSet["readnone,"] = ",";
|
attributeSet["readnone,"] = ",";
|
||||||
attributeSet["readonly,"] = ",";
|
attributeSet["readonly,"] = ",";
|
||||||
#endif
|
#endif
|
||||||
@@ -1264,8 +1269,8 @@ lFixAttributes(const vecString_t &src, vecString_t &dst)
|
|||||||
if ((*w)[0] == '#')
|
if ((*w)[0] == '#')
|
||||||
{
|
{
|
||||||
attributeMap_t::iterator m = attributeMap.find(*w);
|
attributeMap_t::iterator m = attributeMap.find(*w);
|
||||||
assert (m != attributeMap.end());
|
if (m != attributeMap.end())
|
||||||
*w = attributeMap[*w];
|
*w = attributeMap[*w];
|
||||||
}
|
}
|
||||||
s += *w + " ";
|
s += *w + " ";
|
||||||
}
|
}
|
||||||
@@ -2857,8 +2862,10 @@ lCreateDispatchModule(std::map<std::string, FunctionTargetVariants> &functions)
|
|||||||
return module;
|
return module;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef ISPC_NVPTX_ENABLED
|
#ifdef ISPC_NVPTX_ENABLED
|
||||||
static std::string lCBEMangle(const std::string &S) {
|
static std::string lCBEMangle(const std::string &S)
|
||||||
|
{
|
||||||
std::string Result;
|
std::string Result;
|
||||||
|
|
||||||
for (unsigned i = 0, e = S.size(); i != e; ++i) {
|
for (unsigned i = 0, e = S.size(); i != e; ++i) {
|
||||||
|
|||||||
Reference in New Issue
Block a user