Skip to content

Commit bcb9973

Browse files
committed
Merge branch 'sotoc-vla-arguments' into 'aurora_offloading_prototype'
Fix generated target region parameters for multidimensional VLAs Closes llvm#28 See merge request NEC-RWTH-Projects/clang!21
2 parents 2acd695 + 219260b commit bcb9973

13 files changed

+115
-28
lines changed

clang/tools/sotoc/CMakeLists.txt

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,8 @@ if (SOTOC_STANDALONE_BUILD)
5757
################################################################################
5858

5959
else()
60-
#set(CLANG_CONFIG_HINT ${CMAKE_BINARY_DIR}/lib/cmake/clang)
61-
#set(CLANG_LIBRARY_DIRS ${CMAKE_BINARY_DIR}/lib)
62-
#set(CLANG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/tools/clang/include )
63-
#libomptarget_say("_________A__________${CLANG_INCLUDE_DIRS}")
64-
#libomptarget_say("_________B__________${CLANG_LIBRARY_DIRS}")
65-
#libomptarget_say("_________C__________${LLVMCONFIG_FILE}")
6660
add_clang_executable(${SOTOC_PROJECT_NAME} ${SOTOC_SOURCES})
6761
endif()
68-
# include_directories(${CLANG_INCLUDE_DIRS})
69-
# link_directories(${CLANG_LIBRARY_DIRS})
70-
# add_definitions(${CLANG_DEFINITIONS})
71-
72-
# add_definitions(
73-
# -D__STDC_LIMIT_MACROS
74-
# -D__STDC_CONSTANT_MACROS
75-
# )
7662

7763
set(SOTOC_DEBUG_OUTPUT OFF CACHE BOOL "Compiles sotoc with possible debug output")
7864
if (SOTOC_DEBUG_OUTPUT)

clang/tools/sotoc/src/TargetCode.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ void TargetCode::generateCode(llvm::raw_ostream &Out) {
7777
if (TCR) {
7878
generateFunctionPrologue(TCR, Out);
7979
}
80-
80+
8181
Out << Frag->PrintPretty();
8282

8383
if (TCR) {
@@ -103,6 +103,7 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR,
103103
Out << "void " << generateFunctionName(TCR) << "(";
104104
for (auto i = TCR->getCapturedVarsBegin(), e = TCR->getCapturedVarsEnd();
105105
i != e; ++i) {
106+
std::string VarName = (*i)->getDeclName().getAsString();
106107
auto C = TCR->GetReferredOMPClause(*i);
107108
if (!first) {
108109
Out << ", ";
@@ -116,7 +117,12 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR,
116117
DEBUGP("Generating code for array type");
117118
int dim = 0;
118119

119-
handleArrays(&t, DimString, dim, TCR, elemType);
120+
std::vector<int> VariableDimensions;
121+
handleArrays(&t, DimString, dim, VariableDimensions, TCR, elemType, VarName);
122+
123+
for (int d : VariableDimensions) {
124+
Out << "unsigned long long __sotoc_vla_dim" << d << "_" << VarName << ", ";
125+
}
120126

121127
// set type to void* to avoid warnings from the compiler
122128
Out << "void *__sotoc_var_";
@@ -135,7 +141,7 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR,
135141
}
136142
}
137143
}
138-
Out << (*i)->getDeclName().getAsString();
144+
Out << VarName;
139145
}
140146
Out << ")\n{\n";
141147

@@ -253,7 +259,10 @@ std::string TargetCode::generateFunctionName(TargetCodeRegion *TCR) {
253259

254260
void TargetCode::handleArrays(const clang::ArrayType **t,
255261
std::list<std::string> &DimString, int &dim,
256-
TargetCodeRegion *TCR, std::string &elemType) {
262+
std::vector<int> &VariableDims,
263+
TargetCodeRegion *TCR,
264+
std::string &elemType,
265+
const std::string &ArrayName) {
257266
auto OrigT = *t;
258267

259268
if (!t) {
@@ -274,9 +283,9 @@ void TargetCode::handleArrays(const clang::ArrayType **t,
274283
DEBUGP("ArrayType VAT");
275284
std::string PrettyStr = "";
276285
llvm::raw_string_ostream PrettyOS(PrettyStr);
277-
clang::PrintingPolicy PP(TCR->GetLangOpts());
278-
t1->getSizeExpr()->printPretty(PrettyOS, NULL, PP);
286+
PrettyOS << "__sotoc_vla_dim" << dim << "_" << ArrayName;
279287
DimString.push_back(PrettyOS.str());
288+
VariableDims.push_back(dim);
280289
++dim;
281290

282291
} else {
@@ -290,6 +299,6 @@ void TargetCode::handleArrays(const clang::ArrayType **t,
290299
OrigT->getElementType().getTypePtr());
291300
if (*t) {
292301
// Recursively handle all dimensions
293-
handleArrays(t, DimString, dim, TCR, elemType);
302+
handleArrays(t, DimString, dim, VariableDims, TCR, elemType, ArrayName);
294303
}
295304
}

clang/tools/sotoc/src/TargetCode.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,7 @@ class TargetCode {
8585
/// \param returns the last element type (i.e., the type of the array)
8686
void handleArrays(const clang::ArrayType **t,
8787
std::list<std::string> &DimString, int &dim,
88-
TargetCodeRegion *TCR, std::string &elemType);
88+
std::vector<int> &VariableDimensions,
89+
TargetCodeRegion *TCR, std::string &elemType,
90+
const std::string &ArrayName);
8991
};

clang/tools/sotoc/test/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ if(NOT SOTOC_LLVM_LIT_EXECUTABLE)
3333
endif()
3434

3535

36-
set(SOTOC_LIT_ARGS -v --no-progress-bar)
36+
set(SOTOC_LIT_ARGS "-v;--no-progress-bar;-j 4")
37+
38+
set(SOTOC_FILECHECK_EXE ${LLVM_FILECHECK_EXE})
3739

3840
add_custom_target(check-sotoc
3941
COMMAND ${PYTHON_EXECUTABLE} ${SOTOC_LLVM_LIT_EXECUTABLE} ${SOTOC_LIT_ARGS} ${CMAKE_CURRENT_BINARY_DIR}

clang/tools/sotoc/test/arrays/a.out

811 KB
Binary file not shown.

clang/tools/sotoc/test/arrays/global_array_static.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@
1212

1313
int tmp = 0;
1414

15-
#pragma omp target device(0) map(from:X[:10])
15+
#pragma omp target update to(X[:10])
16+
#pragma omp target device(0)
1617
{
1718
for(int i = 0; i < 10; ++i){
1819
X[i] = 1;
1920
}
2021
}
22+
#pragma omp target update from(X[:10])
2123

2224
for(int i = 0; i < 10; ++i){
2325
tmp += X[i];

clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ int main(){
77
int size=512;
88
float A[size][2];
99

10-
#pragma omp target map(tofrom:A[:size*2])
10+
#pragma omp target map(tofrom:A[:size][:2])
1111
{
1212
int i;
1313
for(i=0; i< size; i++){
@@ -17,7 +17,11 @@ int main(){
1717
}
1818

1919
for (j = 0; j < size; j+=64) {
20+
<<<<<<< HEAD
21+
printf("%.2f %.2f ",A[j][0],A[j][1]);
22+
=======
2023
printf("%.2f %.2f",A[j][0],A[j][1]);
24+
>>>>>>> aurora_offloading_prototype
2125
}
2226
return 0;
2327
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// RUN: %sotoc-transform-compile
2+
// RUN: %run-on-host | %filecheck %s
3+
4+
#include <stdio.h>
5+
int main(){
6+
int j;
7+
int size=512;
8+
float A[2][size];
9+
10+
#pragma omp target map(tofrom:A[:2][:size])
11+
{
12+
int i;
13+
for(i=0; i< size; i++){
14+
A[0][i]=i;
15+
A[1][i]=i+1;
16+
}
17+
}
18+
19+
for (j = 0; j < size; j+=64) {
20+
printf("%.2f %.2f ",A[0][j],A[1][j]);
21+
}
22+
return 0;
23+
}
24+
25+
// CHECK: 0.00 1.00 64.00 65.00 128.00 129.00 192.00 193.00 256.00 257.00 320.00 321.00 384.00 385.00 448.00 449.00
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// RUN: %sotoc-transform-compile
2+
// RUN: %run-on-host | %filecheck %s
3+
4+
#include <stdio.h>
5+
int main(){
6+
int j;
7+
int size=512;
8+
float A[size][2][5];
9+
10+
#pragma omp target map(tofrom:A[:size][:2][:5])
11+
{
12+
int k;
13+
int i;
14+
for(i=0; i< size; i++){
15+
for(k=0; k< 5; k++){
16+
A[i][0][k]=i;
17+
A[i][1][k]=i+1;
18+
}
19+
}
20+
}
21+
22+
for (j = 0; j < size; j+=64) {
23+
printf("%.2f %.2f ",A[j][0][3],A[j][1][2]);
24+
}
25+
return 0;
26+
}
27+
28+
// CHECK: 0.00 1.00 64.00 65.00 128.00 129.00 192.00 193.00 256.00 257.00 320.00 321.00 384.00 385.00 448.00 449.00
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// RUN: %sotoc-transform-compile
2+
// RUN: %run-on-host | %filecheck %s
3+
4+
#include <stdio.h>
5+
int main(){
6+
int j;
7+
int size=512;
8+
float A[2][size][5];
9+
10+
#pragma omp target map(tofrom:A[:2][:size][:5])
11+
{
12+
int i;
13+
int k;
14+
for(i=0; i< size; i++){
15+
for(k=0; k< 5; k++){
16+
A[0][i][k]=i;
17+
A[1][i][k]=i+1;
18+
}
19+
}
20+
}
21+
22+
for (j = 0; j < size; j+=64) {
23+
printf("%.2f %.2f ",A[0][j][3],A[1][j][2]);
24+
}
25+
return 0;
26+
}
27+
28+
// CHECK: 0.00 1.00 64.00 65.00 128.00 129.00 192.00 193.00 256.00 257.00 320.00 321.00 384.00 385.00 448.00 449.00

clang/tools/sotoc/test/arrays/variable_length_array_1d.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ int main(){
66
int j;
77
int size=512;
88
float A[size];
9-
#pragma omp target map(tofrom:A[0:size],size)
9+
#pragma omp target map(tofrom:A[0:size])
1010
{
1111
int i;
1212
for(i=0; i< size; i++){

clang/tools/sotoc/test/arrays/variable_length_array_2d.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ int main(){
77
int sizeX=512;
88
int sizeY=512;
99
float A[sizeX][sizeY];
10-
#pragma omp target map(tofrom:A[0:sizeX*sizeY])
10+
11+
#pragma omp target map(tofrom:A[:sizeX][:sizeY])
1112
{
1213
int i;
1314
int j;

clang/tools/sotoc/test/lit.site.cfg.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ config.sotoc_obj_root = '@SOTOC_OBJ_ROOT@'
66
config.library_dir = "@SOTOC_LIBOMP_LIBRARY_DIR@"
77
config.omp_header_directory = "@SOTOC_OMP_HEADER_DIR@"
88
config.operating_system = "@CMAKE_SYSTEM_NAME@"
9-
config.filecheck = "@LLVM_FILECHECK_EXE@"
9+
config.filecheck = "@SOTOC_FILECHECK_EXE@"
1010

1111
# Let the main config do the real work.
1212
lit_config.load_config(config, '@SOTOC_TEST_DIR@/lit.cfg')

0 commit comments

Comments
 (0)