58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
#include "acc_data.h"
|
|
|
|
|
|
extern SgStatement *kernelScope;
|
|
static int indexGenerator = 0;
|
|
|
|
SgExpression* analyzeArrayIndxs(SgSymbol *array, SgExpression *listIdx)
|
|
{
|
|
SgSymbol *varName = NULL;
|
|
char *strNum = new char[32];
|
|
char *strArray, *newStr;
|
|
|
|
if (listIdx == NULL || !autoTransform || dontGenConvertXY || oneCase)
|
|
return NULL;
|
|
else
|
|
{
|
|
strArray = array->identifier();
|
|
newStr = new char[strlen(strArray) + 32];
|
|
|
|
Array *tArray = currentLoop->getArray(strArray);
|
|
if (tArray)
|
|
{
|
|
char *charEx = NULL;
|
|
SgSymbol *tSymb = tArray->findAccess(listIdx, charEx);
|
|
if (tSymb == NULL)
|
|
{
|
|
newStr[0] = '\0';
|
|
strcat(newStr, strArray);
|
|
strcat(newStr, "_");
|
|
sprintf(strNum, "%d", (int) indexGenerator);
|
|
indexGenerator++;
|
|
strcat(newStr, strNum);
|
|
|
|
if (C_Cuda)
|
|
varName = new SgSymbol(VARIABLE_NAME, TestAndCorrectName(newStr), *C_DvmType(), *kernelScope);
|
|
else
|
|
{
|
|
if (undefined_Tcuda)
|
|
{
|
|
SgExpression *le;
|
|
le = new SgExpression(LEN_OP);
|
|
le->setLhs(new SgValueExp(8));
|
|
varName = new SgSymbol(VARIABLE_NAME, TestAndCorrectName(newStr), *new SgType(T_INT, le, SgTypeInt()), *kernelScope);
|
|
}
|
|
else
|
|
varName = new SgSymbol(VARIABLE_NAME, TestAndCorrectName(newStr), *SgTypeInt(), *kernelScope);
|
|
}
|
|
|
|
tArray->addNewCoef(listIdx, charEx, varName);
|
|
}
|
|
else
|
|
varName = tSymb;
|
|
}
|
|
}
|
|
|
|
delete[]strNum;
|
|
return new SgVarRefExp(varName);
|
|
} |