From cd7652c5ddc379b1462fcfe28c021c507f14be2f Mon Sep 17 00:00:00 2001 From: Boris Kosmynin Date: Fri, 5 Apr 2019 11:03:57 +0200 Subject: [PATCH 01/12] Added Array tests --- .../sotoc/test/arrays/global_array_static.c | 32 +++++++++++++++++++ .../arrays/static_variable_length_array_2d.c | 25 +++++++++++++++ .../test/arrays/variable_length_array_2d.c | 30 +++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 clang/tools/sotoc/test/arrays/global_array_static.c create mode 100644 clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c create mode 100644 clang/tools/sotoc/test/arrays/variable_length_array_2d.c diff --git a/clang/tools/sotoc/test/arrays/global_array_static.c b/clang/tools/sotoc/test/arrays/global_array_static.c new file mode 100644 index 00000000000000..565251104d0f71 --- /dev/null +++ b/clang/tools/sotoc/test/arrays/global_array_static.c @@ -0,0 +1,32 @@ +// RUN: %sotoc-transform-compile +// RUN: %run-on-host | %filecheck %s + + #include + #include + + #pragma omp declare target + int X[10]; + #pragma omp end declare target + + int main(void) { + + int tmp = 0; + + #pragma omp target device(0) map(from:X[:10]) + { + for(int i = 0; i < 10; ++i){ + X[i] = 1; + } + } + + for(int i = 0; i < 10; ++i){ + tmp += X[i]; + } + + printf("%d",tmp); + fflush(0); + return 0; +} + +// CHECK: 10 + diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c new file mode 100644 index 00000000000000..e72e4285f9a559 --- /dev/null +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c @@ -0,0 +1,25 @@ +// RUN: %sotoc-transform-compile +// RUN: %run-on-host | %filecheck %s + +#include +int main(){ + int j; + int size=512; + float A[size][2]; + + #pragma omp target map(tofrom:A[:size*2]) + { + int i; + for(i=0; i< size; i++){ + A[i][0]=i; + A[i][1]=i+1; + } + } + + for (j = 0; j < size; j+=64) { + printf("%.2f %.2f",A[j][0],A[j][1]); + } + return 0; +} + +// 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 diff --git a/clang/tools/sotoc/test/arrays/variable_length_array_2d.c b/clang/tools/sotoc/test/arrays/variable_length_array_2d.c new file mode 100644 index 00000000000000..95b169bab399e6 --- /dev/null +++ b/clang/tools/sotoc/test/arrays/variable_length_array_2d.c @@ -0,0 +1,30 @@ +// RUN: %sotoc-transform-compile +// RUN: %run-on-host | %filecheck %s + +#include +int main(){ + int j; + int sizeX=512; + int sizeY=512; + float A[sizeX][sizeY]; + #pragma omp target map(tofrom:A[0:sizeX*sizeY]) + { + int i; + int j; + for(i=0; i< sizeX; i++){ + for(j=0 ; j< sizeY; j++){ + A[i][j]=i-j; + } + } + } + + for (j = 0; j < sizeX; j+=64) { + printf("%.2f ",A[j][j]); + } + + printf("%.2f ",A[0][1]); + + return 0; +} + +// CHECK: 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 From 98cd31c715d0fec9ffd6cce683b1b577cbfecc33 Mon Sep 17 00:00:00 2001 From: Boris Kosmynin Date: Mon, 8 Apr 2019 09:12:59 +0200 Subject: [PATCH 02/12] VLA test --- .../static_variable_length_array_2d_sw.c | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c new file mode 100644 index 00000000000000..cabb300e67cf20 --- /dev/null +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c @@ -0,0 +1,25 @@ +// RUN: %sotoc-transform-compile +// RUN: %run-on-host | %filecheck %s + +#include +int main(){ + int j; + int size=512; + float A[2][size]; + + #pragma omp target map(tofrom:A[:size*2]) + { + int i; + for(i=0; i< size; i++){ + A[0][i]=i; + A[1][i]=i+1; + } + } + + for (j = 0; j < size; j+=64) { + printf("%.2f %.2f",A[0][j],A[1][j]); + } + return 0; +} + +// 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 From ab8096e4a97b0eae866ed4df7fae558c5bffbcea Mon Sep 17 00:00:00 2001 From: Boris Kosmynin Date: Mon, 8 Apr 2019 09:28:24 +0200 Subject: [PATCH 03/12] VLA tests 3d --- .../arrays/static_variable_length_array_3d.c | 27 +++++++++++++++++++ .../static_variable_length_array_3d_sw.c | 27 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c create mode 100644 clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c new file mode 100644 index 00000000000000..94830e53306edc --- /dev/null +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c @@ -0,0 +1,27 @@ +// RUN: %sotoc-transform-compile +// RUN: %run-on-host | %filecheck %s + +#include +int main(){ + int j; + int size=512; + float A[size][2][5]; + + #pragma omp target map(tofrom:A[:size*2*5]) + { + int i; + for(i=0; i< size; i++){ + for(k=0; k< 5; k++){ + A[i][0][k]=i; + A[i][1][k]=i+1; + } + } + } + + for (j = 0; j < size; j+=64) { + printf("%.2f %.2f",A[j][0][3],A[j][1][2]); + } + return 0; +} + +// 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 diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c new file mode 100644 index 00000000000000..07bf02f6614c5e --- /dev/null +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c @@ -0,0 +1,27 @@ +// RUN: %sotoc-transform-compile +// RUN: %run-on-host | %filecheck %s + +#include +int main(){ + int j; + int size=512; + float A[2][size][5]; + + #pragma omp target map(tofrom:A[:size*2*5]) + { + int i; + for(i=0; i< size; i++){ + for(k=0; k< 5; k++){ + A[0][i][k]=i; + A[1][i][k]=i+1; + } + } + } + + for (j = 0; j < size; j+=64) { + printf("%.2f %.2f",A[0][j][3],A[1][j][2]); + } + return 0; +} + +// 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 From 48cfebe3aa6fc35ea31ebcf4e2ce57681e96242d Mon Sep 17 00:00:00 2001 From: Boris Kosmynin Date: Thu, 11 Apr 2019 10:39:24 +0200 Subject: [PATCH 04/12] Adjust Array tests --- clang/tools/sotoc/test/arrays/global_array_static.c | 4 +++- .../tools/sotoc/test/arrays/static_variable_length_array_2d.c | 2 +- .../sotoc/test/arrays/static_variable_length_array_2d_sw.c | 2 +- .../tools/sotoc/test/arrays/static_variable_length_array_3d.c | 2 +- .../sotoc/test/arrays/static_variable_length_array_3d_sw.c | 2 +- clang/tools/sotoc/test/arrays/variable_length_array_1d.c | 2 +- clang/tools/sotoc/test/arrays/variable_length_array_2d.c | 2 +- 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/clang/tools/sotoc/test/arrays/global_array_static.c b/clang/tools/sotoc/test/arrays/global_array_static.c index 565251104d0f71..d61d13cccbaf82 100644 --- a/clang/tools/sotoc/test/arrays/global_array_static.c +++ b/clang/tools/sotoc/test/arrays/global_array_static.c @@ -12,12 +12,14 @@ int tmp = 0; - #pragma omp target device(0) map(from:X[:10]) + #pragma omp target update to(X[:10]) + #pragma omp target device(0) { for(int i = 0; i < 10; ++i){ X[i] = 1; } } + #pragma omp target update from(X[:10]) for(int i = 0; i < 10; ++i){ tmp += X[i]; diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c index e72e4285f9a559..c69d911a2c8ecd 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c @@ -7,7 +7,7 @@ int main(){ int size=512; float A[size][2]; - #pragma omp target map(tofrom:A[:size*2]) + #pragma omp target map(tofrom:A[:size][:2]) { int i; for(i=0; i< size; i++){ diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c index cabb300e67cf20..aa022d531027d2 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c @@ -7,7 +7,7 @@ int main(){ int size=512; float A[2][size]; - #pragma omp target map(tofrom:A[:size*2]) + #pragma omp target map(tofrom:A[:2][:size]) { int i; for(i=0; i< size; i++){ diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c index 94830e53306edc..dcce99424c182e 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c @@ -7,7 +7,7 @@ int main(){ int size=512; float A[size][2][5]; - #pragma omp target map(tofrom:A[:size*2*5]) + #pragma omp target map(tofrom:A[:size][:2][:5]) { int i; for(i=0; i< size; i++){ diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c index 07bf02f6614c5e..393f1b830d8d68 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c @@ -7,7 +7,7 @@ int main(){ int size=512; float A[2][size][5]; - #pragma omp target map(tofrom:A[:size*2*5]) + #pragma omp target map(tofrom:A[:2][:size][:5]) { int i; for(i=0; i< size; i++){ diff --git a/clang/tools/sotoc/test/arrays/variable_length_array_1d.c b/clang/tools/sotoc/test/arrays/variable_length_array_1d.c index e3c346927bb286..212a163d8f6d9b 100644 --- a/clang/tools/sotoc/test/arrays/variable_length_array_1d.c +++ b/clang/tools/sotoc/test/arrays/variable_length_array_1d.c @@ -6,7 +6,7 @@ int main(){ int j; int size=512; float A[size]; - #pragma omp target map(tofrom:A[0:size],size) + #pragma omp target map(tofrom:A[0:size]) { int i; for(i=0; i< size; i++){ diff --git a/clang/tools/sotoc/test/arrays/variable_length_array_2d.c b/clang/tools/sotoc/test/arrays/variable_length_array_2d.c index 95b169bab399e6..5fa1449e9b3c83 100644 --- a/clang/tools/sotoc/test/arrays/variable_length_array_2d.c +++ b/clang/tools/sotoc/test/arrays/variable_length_array_2d.c @@ -7,7 +7,7 @@ int main(){ int sizeX=512; int sizeY=512; float A[sizeX][sizeY]; - #pragma omp target map(tofrom:A[0:sizeX*sizeY]) + #pragma omp target map(tofrom:A[:sizeX][:sizeY]) { int i; int j; From a45e08387f97986dae6ae8c3695f8cd3dbb2e541 Mon Sep 17 00:00:00 2001 From: Manoel Roemmer Date: Mon, 8 Apr 2019 14:46:34 +0200 Subject: [PATCH 05/12] Fix Filecheck config in CMakeLists.txt --- clang/tools/sotoc/CMakeLists.txt | 14 -------------- clang/tools/sotoc/test/CMakeLists.txt | 2 ++ clang/tools/sotoc/test/lit.site.cfg.in | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/clang/tools/sotoc/CMakeLists.txt b/clang/tools/sotoc/CMakeLists.txt index 66f4b473931b18..abed06d81526e9 100644 --- a/clang/tools/sotoc/CMakeLists.txt +++ b/clang/tools/sotoc/CMakeLists.txt @@ -57,22 +57,8 @@ if (SOTOC_STANDALONE_BUILD) ################################################################################ else() - #set(CLANG_CONFIG_HINT ${CMAKE_BINARY_DIR}/lib/cmake/clang) - #set(CLANG_LIBRARY_DIRS ${CMAKE_BINARY_DIR}/lib) - #set(CLANG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/tools/clang/include ) - #libomptarget_say("_________A__________${CLANG_INCLUDE_DIRS}") - #libomptarget_say("_________B__________${CLANG_LIBRARY_DIRS}") - #libomptarget_say("_________C__________${LLVMCONFIG_FILE}") add_clang_executable(${SOTOC_PROJECT_NAME} ${SOTOC_SOURCES}) endif() -# include_directories(${CLANG_INCLUDE_DIRS}) -# link_directories(${CLANG_LIBRARY_DIRS}) -# add_definitions(${CLANG_DEFINITIONS}) - -# add_definitions( -# -D__STDC_LIMIT_MACROS -# -D__STDC_CONSTANT_MACROS -# ) set(SOTOC_DEBUG_OUTPUT OFF CACHE BOOL "Compiles sotoc with possible debug output") if (SOTOC_DEBUG_OUTPUT) diff --git a/clang/tools/sotoc/test/CMakeLists.txt b/clang/tools/sotoc/test/CMakeLists.txt index 4a5a9190f36738..8d9e7612e3ee74 100644 --- a/clang/tools/sotoc/test/CMakeLists.txt +++ b/clang/tools/sotoc/test/CMakeLists.txt @@ -35,6 +35,8 @@ endif() set(SOTOC_LIT_ARGS -v --no-progress-bar) +set(SOTOC_FILECHECK_EXE ${LLVM_FILECHECK_EXE}) + add_custom_target(check-sotoc COMMAND ${PYTHON_EXECUTABLE} ${SOTOC_LLVM_LIT_EXECUTABLE} ${SOTOC_LIT_ARGS} ${CMAKE_CURRENT_BINARY_DIR} DEPENDS sotoc diff --git a/clang/tools/sotoc/test/lit.site.cfg.in b/clang/tools/sotoc/test/lit.site.cfg.in index bb97b08156ff65..2bdaf442048219 100644 --- a/clang/tools/sotoc/test/lit.site.cfg.in +++ b/clang/tools/sotoc/test/lit.site.cfg.in @@ -6,7 +6,7 @@ config.sotoc_obj_root = '@SOTOC_OBJ_ROOT@' config.library_dir = "@SOTOC_LIBOMP_LIBRARY_DIR@" config.omp_header_directory = "@SOTOC_OMP_HEADER_DIR@" config.operating_system = "@CMAKE_SYSTEM_NAME@" -config.filecheck = "@LLVM_FILECHECK_EXE@" +config.filecheck = "@SOTOC_FILECHECK_EXE@" # Let the main config do the real work. lit_config.load_config(config, '@SOTOC_TEST_DIR@/lit.cfg') From 72f553a442d2f4952909ae571c98f87f47beda1a Mon Sep 17 00:00:00 2001 From: Manoel Roemmer Date: Mon, 15 Apr 2019 11:16:48 +0200 Subject: [PATCH 06/12] Add generated argument for all dimensions of VLAs --- clang/tools/sotoc/src/TargetCode.cpp | 9 ++++++++- clang/tools/sotoc/test/CMakeLists.txt | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/clang/tools/sotoc/src/TargetCode.cpp b/clang/tools/sotoc/src/TargetCode.cpp index 28978926065dbf..1aec7c1cfdfebb 100644 --- a/clang/tools/sotoc/src/TargetCode.cpp +++ b/clang/tools/sotoc/src/TargetCode.cpp @@ -116,7 +116,14 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR, DEBUGP("Generating code for array type"); int dim = 0; - handleArrays(&t, DimString, dim, TCR, elemType); + auto *type_for_dim = t; + handleArrays(&type_for_dim, DimString, dim, TCR, elemType); + + if (llvm::dyn_cast(t)) { + for (int d = 0; d < dim; ++d) { + Out << "unsgined long long __sotoc_vla_dim" << d << "_" << (*i)->getDeclName().getAsString() << ", "; + } + } // set type to void* to avoid warnings from the compiler Out << "void *__sotoc_var_"; diff --git a/clang/tools/sotoc/test/CMakeLists.txt b/clang/tools/sotoc/test/CMakeLists.txt index 8d9e7612e3ee74..7262e0379154ec 100644 --- a/clang/tools/sotoc/test/CMakeLists.txt +++ b/clang/tools/sotoc/test/CMakeLists.txt @@ -33,7 +33,7 @@ if(NOT SOTOC_LLVM_LIT_EXECUTABLE) endif() -set(SOTOC_LIT_ARGS -v --no-progress-bar) +set(SOTOC_LIT_ARGS "-v;--no-progress-bar;-j 4") set(SOTOC_FILECHECK_EXE ${LLVM_FILECHECK_EXE}) From bc30e45e1cded1cbbcc1bcd16f90b615feceea78 Mon Sep 17 00:00:00 2001 From: Manoel Roemmer Date: Mon, 15 Apr 2019 11:36:35 +0200 Subject: [PATCH 07/12] Fix typos and tests --- clang/tools/sotoc/src/TargetCode.cpp | 2 +- clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c | 1 + .../sotoc/test/arrays/static_variable_length_array_3d_sw.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/tools/sotoc/src/TargetCode.cpp b/clang/tools/sotoc/src/TargetCode.cpp index 1aec7c1cfdfebb..520c62cac9e9cb 100644 --- a/clang/tools/sotoc/src/TargetCode.cpp +++ b/clang/tools/sotoc/src/TargetCode.cpp @@ -121,7 +121,7 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR, if (llvm::dyn_cast(t)) { for (int d = 0; d < dim; ++d) { - Out << "unsgined long long __sotoc_vla_dim" << d << "_" << (*i)->getDeclName().getAsString() << ", "; + Out << "unsigned long long __sotoc_vla_dim" << d << "_" << (*i)->getDeclName().getAsString() << ", "; } } diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c index dcce99424c182e..4f73be3bc08e4c 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c @@ -9,6 +9,7 @@ int main(){ #pragma omp target map(tofrom:A[:size][:2][:5]) { + int k; int i; for(i=0; i< size; i++){ for(k=0; k< 5; k++){ diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c index 393f1b830d8d68..192d202256d76b 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c @@ -10,6 +10,7 @@ int main(){ #pragma omp target map(tofrom:A[:2][:size][:5]) { int i; + int k; for(i=0; i< size; i++){ for(k=0; k< 5; k++){ A[0][i][k]=i; From 2116d6725c785fd253d715fed838cc74a97d6893 Mon Sep 17 00:00:00 2001 From: Manoel Roemmer Date: Mon, 15 Apr 2019 14:00:25 +0200 Subject: [PATCH 08/12] Only handle dimensions of VLA which are variable --- clang/tools/sotoc/src/TargetCode.cpp | 19 ++++++++++--------- clang/tools/sotoc/src/TargetCode.h | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/clang/tools/sotoc/src/TargetCode.cpp b/clang/tools/sotoc/src/TargetCode.cpp index 520c62cac9e9cb..824a021d9f1b53 100644 --- a/clang/tools/sotoc/src/TargetCode.cpp +++ b/clang/tools/sotoc/src/TargetCode.cpp @@ -77,7 +77,7 @@ void TargetCode::generateCode(llvm::raw_ostream &Out) { if (TCR) { generateFunctionPrologue(TCR, Out); } - + Out << Frag->PrintPretty(); if (TCR) { @@ -116,13 +116,11 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR, DEBUGP("Generating code for array type"); int dim = 0; - auto *type_for_dim = t; - handleArrays(&type_for_dim, DimString, dim, TCR, elemType); + std::vector VariableDimensions; + handleArrays(&t, DimString, dim, VariableDimensions, TCR, elemType); - if (llvm::dyn_cast(t)) { - for (int d = 0; d < dim; ++d) { - Out << "unsigned long long __sotoc_vla_dim" << d << "_" << (*i)->getDeclName().getAsString() << ", "; - } + for (int d : VariableDimensions) { + Out << "unsigned long long __sotoc_vla_dim" << d << "_" << (*i)->getDeclName().getAsString() << ", "; } // set type to void* to avoid warnings from the compiler @@ -260,7 +258,9 @@ std::string TargetCode::generateFunctionName(TargetCodeRegion *TCR) { void TargetCode::handleArrays(const clang::ArrayType **t, std::list &DimString, int &dim, - TargetCodeRegion *TCR, std::string &elemType) { + std::vector &VariableDims, + TargetCodeRegion *TCR, + std::string &elemType) { auto OrigT = *t; if (!t) { @@ -284,6 +284,7 @@ void TargetCode::handleArrays(const clang::ArrayType **t, clang::PrintingPolicy PP(TCR->GetLangOpts()); t1->getSizeExpr()->printPretty(PrettyOS, NULL, PP); DimString.push_back(PrettyOS.str()); + VariableDims.push_back(dim); ++dim; } else { @@ -297,6 +298,6 @@ void TargetCode::handleArrays(const clang::ArrayType **t, OrigT->getElementType().getTypePtr()); if (*t) { // Recursively handle all dimensions - handleArrays(t, DimString, dim, TCR, elemType); + handleArrays(t, DimString, dim, VariableDims, TCR, elemType); } } diff --git a/clang/tools/sotoc/src/TargetCode.h b/clang/tools/sotoc/src/TargetCode.h index 1f7552f941e7d7..26c33d50efccaf 100644 --- a/clang/tools/sotoc/src/TargetCode.h +++ b/clang/tools/sotoc/src/TargetCode.h @@ -85,5 +85,6 @@ class TargetCode { /// \param returns the last element type (i.e., the type of the array) void handleArrays(const clang::ArrayType **t, std::list &DimString, int &dim, + std::vector &VariableDimensions, TargetCodeRegion *TCR, std::string &elemType); }; From d888436db6f79eaa336b0d023a45befdbf38b546 Mon Sep 17 00:00:00 2001 From: Manoel Roemmer Date: Mon, 15 Apr 2019 14:01:48 +0200 Subject: [PATCH 09/12] Fix printf in test cases --- .../sotoc/test/arrays/static_variable_length_array_2d_sw.c | 2 +- .../sotoc/test/arrays/static_variable_length_array_3d_sw.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c index aa022d531027d2..8a59684a1a0787 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d_sw.c @@ -17,7 +17,7 @@ int main(){ } for (j = 0; j < size; j+=64) { - printf("%.2f %.2f",A[0][j],A[1][j]); + printf("%.2f %.2f ",A[0][j],A[1][j]); } return 0; } diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c index 192d202256d76b..9dc35510f82b98 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d_sw.c @@ -20,7 +20,7 @@ int main(){ } for (j = 0; j < size; j+=64) { - printf("%.2f %.2f",A[0][j][3],A[1][j][2]); + printf("%.2f %.2f ",A[0][j][3],A[1][j][2]); } return 0; } From 8fae6acc72ca486176a7153bc40a5d30e395f041 Mon Sep 17 00:00:00 2001 From: Manoel Roemmer Date: Thu, 18 Apr 2019 14:37:49 +0200 Subject: [PATCH 10/12] Addresses memory addressing problem in vlas --- clang/tools/sotoc/test/arrays/a.out | Bin 0 -> 830056 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 clang/tools/sotoc/test/arrays/a.out diff --git a/clang/tools/sotoc/test/arrays/a.out b/clang/tools/sotoc/test/arrays/a.out new file mode 100755 index 0000000000000000000000000000000000000000..29d39816d130a08b5d3dc3c798e37377b3c3c836 GIT binary patch literal 830056 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�b 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 Ng8A>6nqi9O{|Cgi3jqKC literal 0 HcmV?d00001 From bd992b00fb8d99f62db61922e00eedf4c64b1d49 Mon Sep 17 00:00:00 2001 From: Manoel Roemmer Date: Thu, 18 Apr 2019 14:46:44 +0200 Subject: [PATCH 11/12] Address memory addressing problems in vla (2) --- clang/tools/sotoc/src/TargetCode.cpp | 15 ++++++++------- clang/tools/sotoc/src/TargetCode.h | 3 ++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/clang/tools/sotoc/src/TargetCode.cpp b/clang/tools/sotoc/src/TargetCode.cpp index 824a021d9f1b53..687933d354111e 100644 --- a/clang/tools/sotoc/src/TargetCode.cpp +++ b/clang/tools/sotoc/src/TargetCode.cpp @@ -103,6 +103,7 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR, Out << "void " << generateFunctionName(TCR) << "("; for (auto i = TCR->getCapturedVarsBegin(), e = TCR->getCapturedVarsEnd(); i != e; ++i) { + std::string VarName = (*i)->getDeclName().getAsString(); auto C = TCR->GetReferredOMPClause(*i); if (!first) { Out << ", "; @@ -117,10 +118,10 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR, int dim = 0; std::vector VariableDimensions; - handleArrays(&t, DimString, dim, VariableDimensions, TCR, elemType); + handleArrays(&t, DimString, dim, VariableDimensions, TCR, elemType, VarName); for (int d : VariableDimensions) { - Out << "unsigned long long __sotoc_vla_dim" << d << "_" << (*i)->getDeclName().getAsString() << ", "; + Out << "unsigned long long __sotoc_vla_dim" << d << "_" << VarName << ", "; } // set type to void* to avoid warnings from the compiler @@ -140,7 +141,7 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR, } } } - Out << (*i)->getDeclName().getAsString(); + Out << VarName; } Out << ")\n{\n"; @@ -260,7 +261,8 @@ void TargetCode::handleArrays(const clang::ArrayType **t, std::list &DimString, int &dim, std::vector &VariableDims, TargetCodeRegion *TCR, - std::string &elemType) { + std::string &elemType, + const std::string &ArrayName) { auto OrigT = *t; if (!t) { @@ -281,8 +283,7 @@ void TargetCode::handleArrays(const clang::ArrayType **t, DEBUGP("ArrayType VAT"); std::string PrettyStr = ""; llvm::raw_string_ostream PrettyOS(PrettyStr); - clang::PrintingPolicy PP(TCR->GetLangOpts()); - t1->getSizeExpr()->printPretty(PrettyOS, NULL, PP); + PrettyOS << "__sotoc_vla_dim" << dim << "_" << ArrayName; DimString.push_back(PrettyOS.str()); VariableDims.push_back(dim); ++dim; @@ -298,6 +299,6 @@ void TargetCode::handleArrays(const clang::ArrayType **t, OrigT->getElementType().getTypePtr()); if (*t) { // Recursively handle all dimensions - handleArrays(t, DimString, dim, VariableDims, TCR, elemType); + handleArrays(t, DimString, dim, VariableDims, TCR, elemType, ArrayName); } } diff --git a/clang/tools/sotoc/src/TargetCode.h b/clang/tools/sotoc/src/TargetCode.h index 26c33d50efccaf..5613e2ff001f6d 100644 --- a/clang/tools/sotoc/src/TargetCode.h +++ b/clang/tools/sotoc/src/TargetCode.h @@ -86,5 +86,6 @@ class TargetCode { void handleArrays(const clang::ArrayType **t, std::list &DimString, int &dim, std::vector &VariableDimensions, - TargetCodeRegion *TCR, std::string &elemType); + TargetCodeRegion *TCR, std::string &elemType, + const std::string &ArrayName); }; From 48f831a7ee88b9aff019816501dd92470ebea679 Mon Sep 17 00:00:00 2001 From: Manoel Roemmer Date: Thu, 18 Apr 2019 14:53:29 +0200 Subject: [PATCH 12/12] Fix array test cases --- clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c | 2 +- clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c index c69d911a2c8ecd..e121c8e8cd1bc2 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_2d.c @@ -17,7 +17,7 @@ int main(){ } for (j = 0; j < size; j+=64) { - printf("%.2f %.2f",A[j][0],A[j][1]); + printf("%.2f %.2f ",A[j][0],A[j][1]); } return 0; } diff --git a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c index 4f73be3bc08e4c..d9d49d5842aed1 100644 --- a/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c +++ b/clang/tools/sotoc/test/arrays/static_variable_length_array_3d.c @@ -20,7 +20,7 @@ int main(){ } for (j = 0; j < size; j+=64) { - printf("%.2f %.2f",A[j][0][3],A[j][1][2]); + printf("%.2f %.2f ",A[j][0][3],A[j][1][2]); } return 0; }