├── dawn ├── version.txt ├── scripts │ └── .gitignore ├── src │ ├── dawn │ │ ├── Support │ │ │ ├── External │ │ │ │ └── .clang-format │ │ │ ├── ClangCompat │ │ │ │ ├── EvalResult.h │ │ │ │ ├── FileSystem.h │ │ │ │ ├── FileUtil.h │ │ │ │ ├── VirtualFileSystem.h │ │ │ │ ├── CompilerInvocation.h │ │ │ │ └── ImplicitNodes.h │ │ │ ├── IndexGenerator.cpp │ │ │ ├── FileSystem.h │ │ │ ├── Array.cpp │ │ │ ├── UIDGenerator.cpp │ │ │ ├── Iterator.h │ │ │ ├── ComparisonHelpers.h │ │ │ ├── ContainerUtils.h │ │ │ ├── Config.h.cmake │ │ │ ├── NonCopyable.h │ │ │ ├── Json.h │ │ │ ├── Unreachable.cpp │ │ │ └── SourceLocation.cpp │ │ ├── IIR │ │ │ ├── proto │ │ │ │ └── DawnIIR.cmake │ │ │ ├── NodeUpdateType.cpp │ │ │ └── AST.h │ │ ├── SIR │ │ │ ├── proto │ │ │ │ └── DawnSIR.cmake │ │ │ ├── AST.h │ │ │ └── ASTStmt.cpp │ │ ├── AST │ │ │ ├── proto │ │ │ │ ├── DawnAST.cmake │ │ │ │ └── AST │ │ │ │ │ └── enums.proto │ │ │ ├── Tags.h │ │ │ ├── GridType.h │ │ │ ├── GridType.cpp │ │ │ └── LocationType.h │ │ ├── CodeGen │ │ │ ├── IcoChainSizes.h │ │ │ ├── TranslationUnit.cpp │ │ │ └── Options.h │ │ ├── Compiler │ │ │ └── CMakeLists.txt │ │ ├── Unittest │ │ │ ├── UnittestUtils.h │ │ │ ├── CMakeLists.txt │ │ │ └── UnittestUtils.cpp │ │ ├── Serialization │ │ │ └── CMakeLists.txt │ │ ├── Optimizer │ │ │ ├── PassSetLoopOrder.h │ │ │ ├── PassSetDependencyGraph.h │ │ │ ├── PassSetStageName.h │ │ │ ├── PassTemporaryFirstAccess.h │ │ │ ├── ReorderStrategyPartitioning.cpp │ │ │ └── PassTemporaryMerger.h │ │ └── Validator │ │ │ └── CMakeLists.txt │ ├── driver-includes │ │ ├── verification_metrics.hpp │ │ ├── cuda_utils.cpp │ │ ├── to_json.hpp │ │ ├── cxx11_warning.hpp │ │ ├── gridtools_includes.hpp │ │ ├── halo.hpp │ │ ├── arrayAddons.hpp │ │ └── unstructured_domain.hpp │ ├── dawn4py │ │ └── serialization │ │ │ ├── test │ │ │ └── __init__.py │ │ │ ├── IIR │ │ │ └── __init__.py │ │ │ ├── SIR │ │ │ └── __init__.py │ │ │ ├── AST │ │ │ └── __init__.py │ │ │ ├── __init__.py │ │ │ └── error.py │ ├── toylib │ │ └── CMakeLists.txt │ └── CMakeLists.txt ├── test │ ├── unit-test │ │ ├── dawn4py-tests │ │ │ ├── data │ │ │ │ └── .clang-format │ │ │ ├── __init__.py │ │ │ └── CMakeLists.txt │ │ ├── dawn │ │ │ ├── CodeGen │ │ │ │ ├── reference │ │ │ │ │ └── .clang-format │ │ │ │ ├── Opt │ │ │ │ │ └── TestOptCodeGen.cpp │ │ │ │ ├── Naive-Ico │ │ │ │ │ └── TestNaive-IcoCodeGen.cpp │ │ │ │ ├── UnstructuredStencils.h │ │ │ │ └── Stencils.h │ │ │ ├── Optimizer │ │ │ │ └── samples │ │ │ │ │ ├── .clang-format │ │ │ │ │ ├── ReorderTest01.cpp │ │ │ │ │ ├── TestMultiStageSplitter_01.cpp │ │ │ │ │ ├── compute_extent_test_stencil_01.cpp │ │ │ │ │ ├── TestPassFieldVersioning_04.cpp │ │ │ │ │ ├── MergeTest01.cpp │ │ │ │ │ ├── TestNonTempCache_01.cpp │ │ │ │ │ ├── TestPassFieldVersioning_05.cpp │ │ │ │ │ ├── DemoteTest01.cpp │ │ │ │ │ ├── compute_extent_test_stencil_02.cpp │ │ │ │ │ ├── IJCacheTest01.cpp │ │ │ │ │ ├── compute_extent_test_stencil_03.cpp │ │ │ │ │ ├── TestPassFieldVersioning_06.cpp │ │ │ │ │ ├── ReorderTest03.cpp │ │ │ │ │ ├── TestMultiStageSplitter_02.cpp │ │ │ │ │ ├── TestMultiStageSplitter_03.cpp │ │ │ │ │ ├── TestNonTempCache_03.cpp │ │ │ │ │ ├── TestPassFieldVersioning_08.cpp │ │ │ │ │ ├── StageMergerTest07.cpp │ │ │ │ │ ├── compute_extent_test_stencil_04.cpp │ │ │ │ │ ├── TestPassFieldVersioning_07.cpp │ │ │ │ │ ├── TestPassFieldVersioning_09.cpp │ │ │ │ │ ├── IJCacheTest02.cpp │ │ │ │ │ ├── TestNonTempCache_02.cpp │ │ │ │ │ ├── TestPassFieldVersioning_01.cpp │ │ │ │ │ ├── KCacheTest01.cpp │ │ │ │ │ ├── TestMultiStageSplitter_05.cpp │ │ │ │ │ ├── PromoteTest01.cpp │ │ │ │ │ ├── KCacheTest01b.cpp │ │ │ │ │ ├── StageMergerTest05.cpp │ │ │ │ │ ├── TestPassFieldVersioning_02.cpp │ │ │ │ │ ├── ReorderTest05.cpp │ │ │ │ │ ├── StageMergerTest06.cpp │ │ │ │ │ ├── MergeTest02.cpp │ │ │ │ │ ├── TestPassFieldVersioning_03.cpp │ │ │ │ │ ├── MergeTest03.cpp │ │ │ │ │ ├── MultiStageTest01.cpp │ │ │ │ │ ├── StageMergerTest01.cpp │ │ │ │ │ ├── StageMergerTest02.cpp │ │ │ │ │ ├── StageMergerTest03.cpp │ │ │ │ │ ├── PromoteTest03.cpp │ │ │ │ │ ├── KCacheTest05.cpp │ │ │ │ │ ├── TestMultiStageSplitter_04.cpp │ │ │ │ │ ├── KCacheTest03.cpp │ │ │ │ │ ├── MergeTest04.cpp │ │ │ │ │ ├── PromoteTest02.cpp │ │ │ │ │ ├── StageMergerTest04.cpp │ │ │ │ │ ├── TestPassFieldVersioning_10.cpp │ │ │ │ │ ├── StageMergerDependent.py │ │ │ │ │ ├── ReorderTest04.cpp │ │ │ │ │ ├── ReorderTest06.cpp │ │ │ │ │ ├── test_interval_partition.cpp │ │ │ │ │ ├── StageMergerIndependent.py │ │ │ │ │ ├── PromoteTest04.cpp │ │ │ │ │ ├── ReorderTest07.cpp │ │ │ │ │ ├── ReorderTest02.cpp │ │ │ │ │ ├── KCacheTest02.cpp │ │ │ │ │ ├── KCacheTest02b.cpp │ │ │ │ │ ├── KCacheTest04.cpp │ │ │ │ │ ├── KCacheTest06.cpp │ │ │ │ │ ├── MergeTest05.cpp │ │ │ │ │ ├── PromoteTest05.cpp │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── test_compute_maximum_extent_01.cpp │ │ │ │ │ ├── test_compute_maximum_extent_02.cpp │ │ │ │ │ └── test_compute_read_access_interval_02.cpp │ │ │ ├── Validator │ │ │ │ ├── samples │ │ │ │ │ ├── .clang-format │ │ │ │ │ └── LaplacianTwoStep.cpp │ │ │ │ └── CMakeLists.txt │ │ │ ├── CMakeLists.txt │ │ │ ├── AST │ │ │ │ └── CMakeLists.txt │ │ │ ├── SIR │ │ │ │ └── CMakeLists.txt │ │ │ └── Support │ │ │ │ └── CMakeLists.txt │ │ ├── driver-includes │ │ │ └── CMakeLists.txt │ │ └── CMakeLists.txt │ ├── integration-test │ │ ├── dawn4py-tests │ │ │ └── data │ │ │ │ └── .clang-format │ │ ├── serializer │ │ │ └── reference_iir │ │ │ │ └── README.md │ │ ├── CMakeLists.txt │ │ └── unstructured │ │ │ └── testMutator.h │ └── CMakeLists.txt ├── examples │ └── tutorial │ │ ├── img │ │ ├── in.png │ │ └── out.png │ │ ├── .gitignore │ │ ├── laplacian_stencil.cpp │ │ └── CMakeLists.txt ├── MANIFEST.in ├── cmake │ ├── EnableCCache.cmake │ ├── GitVersionHash.cmake │ ├── AddCXXCompilerFlagIfSuppported.cmake │ ├── FetchGoogleTest.cmake │ ├── DawnConfig.cmake.in │ └── HasUnstructuredDeps.cmake ├── .gitignore ├── pyproject.toml └── README.md ├── gtclang ├── version.txt ├── test │ ├── integration-test │ │ ├── CodeGen │ │ │ ├── .gitignore │ │ │ ├── dummy.cpp │ │ │ ├── gtclang-tester.cfg │ │ │ ├── lap_benchmark.cu │ │ │ ├── p_grad_c_benchmark.cu │ │ │ ├── asymmetric_benchmark.cu │ │ │ ├── intervals01_benchmark.cu │ │ │ ├── intervals02_benchmark.cu │ │ │ ├── intervals03_benchmark.cu │ │ │ ├── kcache_fill_benchmark.cu │ │ │ ├── copy_stencil_benchmark.cu │ │ │ ├── kcache_flush_benchmark.cu │ │ │ ├── local_kcache_benchmark.cu │ │ │ ├── coriolis_stencil_benchmark.cu │ │ │ ├── globals_stencil_benchmark.cu │ │ │ ├── hd_smagorinsky_benchmark.cu │ │ │ ├── kcache_epflush_benchmark.cu │ │ │ ├── kparallel_solver_benchmark.cu │ │ │ ├── stencil_desc_ast_benchmark.cu │ │ │ ├── boundary_condition_benchmark.cu │ │ │ ├── intervals_stencil_benchmark.cu │ │ │ ├── stencil_functions_benchmark.cu │ │ │ ├── tridiagonal_solve_benchmark.cu │ │ │ ├── boundary_condition_2_benchmark.cu │ │ │ ├── conditional_stencil_benchmark.cu │ │ │ ├── hori_diff_stencil_01_benchmark.cu │ │ │ ├── hori_diff_stencil_02_benchmark.cu │ │ │ ├── kcache_fill_backward_benchmark.cu │ │ │ ├── kcache_fill_kparallel_benchmark.cu │ │ │ ├── hori_diff_type2_stencil_benchmark.cu │ │ │ ├── globals_stencil.json │ │ │ ├── nested_stencil_functions_benchmark.cu │ │ │ ├── stencil_desc_ast.json │ │ │ ├── Options.cpp │ │ │ ├── copy_stencil.cpp │ │ │ ├── p_grad_c.cpp │ │ │ ├── lap.cpp │ │ │ ├── Macros.hpp │ │ │ ├── hori_diff_stencil_01.cpp │ │ │ ├── intervals01.cpp │ │ │ ├── asymmetric.cpp │ │ │ ├── boundary_condition.cpp │ │ │ ├── hori_diff_stencil_02.cpp │ │ │ ├── kcache_fill_kparallel.cpp │ │ │ ├── kparallel_solver.cpp │ │ │ ├── boundary_condition_2.cpp │ │ │ └── globals_stencil.cpp │ │ ├── .clang-format │ │ ├── Diagnostics │ │ │ ├── err_do_method_missing.cpp │ │ │ ├── err_stencil_invalid_storage_decl.cpp │ │ │ ├── err_stencilcall_invalid_call_02.cpp │ │ │ ├── err_do_method_non_local_var.cpp │ │ │ ├── err_do_method_invalid_type_of_local_var.cpp │ │ │ ├── err_do_method_var_shadowing.cpp │ │ │ ├── err_interval_custom_missing_init.cpp │ │ │ ├── err_interval_invalid_type.cpp │ │ │ ├── err_index_not_constexpr.cpp │ │ │ ├── err_interval_offset_not_constexpr.cpp │ │ │ ├── err_do_method_invalid_expr_if_cond.cpp │ │ │ ├── err_interval_custom_not_constexpr.cpp │ │ │ ├── err_invalid_pragma.cpp │ │ │ └── err_globals_invalid_default_value.cpp │ │ ├── update_references.sh │ │ ├── IIRSerializer │ │ │ ├── CopyTest.cpp │ │ │ ├── StencilFnCallTest.cpp │ │ │ └── AccessTest.cpp │ │ ├── SIR │ │ │ └── CopyTest.cpp │ │ └── Accesses │ │ │ ├── Simple01.cpp │ │ │ ├── Simple02.cpp │ │ │ └── Simple04.cpp │ └── unit-test │ │ ├── Frontend │ │ ├── samples │ │ │ └── .clang-format │ │ ├── input │ │ │ ├── test_stencil_no_include.cpp │ │ │ ├── test_stencil_w_include.cpp │ │ │ └── test_iteration_space.cpp │ │ └── TestMain.cpp │ │ ├── CMakeLists.txt │ │ ├── Unittest │ │ └── TestMain.cpp │ │ └── Support │ │ └── TestMain.cpp ├── docs │ └── images │ │ └── hd.png ├── cmake │ ├── EnableCCache.cmake │ ├── GitVersionHash.cmake │ ├── AddCXXCompilerFlagIfSuppported.cmake │ ├── FetchCxxopts.cmake │ ├── FetchGoogleTest.cmake │ └── GTClangConfig.cmake.in ├── .gitignore └── src │ ├── gtclang │ ├── Driver │ │ ├── gtclang.cpp │ │ └── CMakeLists.txt │ ├── Support │ │ ├── ASTUtils.cpp │ │ ├── MathExtras.h │ │ └── Logger.h │ └── Unittest │ │ └── FlagManager.cpp │ ├── CMakeLists.txt │ └── gtclang_dsl_defs │ ├── dimension.hpp │ ├── direction.hpp │ ├── offset.hpp │ └── boundary_condition.hpp ├── scripts └── clang-format-all ├── .dockerignore ├── .clang-format ├── Dockerfile ├── .github ├── pull_request_template.md └── workflows │ └── nightly-merge.yaml ├── .circleci └── config.yml ├── .gitignore ├── CMakeLists.txt ├── docker ├── ubuntu20.04.dockerfile └── update-images └── LICENSE.txt /dawn/version.txt: -------------------------------------------------------------------------------- 1 | 0.0.2 2 | -------------------------------------------------------------------------------- /gtclang/version.txt: -------------------------------------------------------------------------------- 1 | 0.0.4 2 | -------------------------------------------------------------------------------- /dawn/scripts/.gitignore: -------------------------------------------------------------------------------- 1 | _dawn4py.cpp -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/.gitignore: -------------------------------------------------------------------------------- 1 | *_gen.cpp 2 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/External/.clang-format: -------------------------------------------------------------------------------- 1 | DisableFormat: true 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/dummy.cpp: -------------------------------------------------------------------------------- 1 | int main() {} 2 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn4py-tests/data/.clang-format: -------------------------------------------------------------------------------- 1 | DisableFormat: true 2 | -------------------------------------------------------------------------------- /gtclang/test/unit-test/Frontend/samples/.clang-format: -------------------------------------------------------------------------------- 1 | DisableFormat: true 2 | -------------------------------------------------------------------------------- /dawn/src/dawn/IIR/proto/DawnIIR.cmake: -------------------------------------------------------------------------------- 1 | set(dawn_iir_proto_files IIR/IIR.proto) 2 | -------------------------------------------------------------------------------- /dawn/src/dawn/SIR/proto/DawnSIR.cmake: -------------------------------------------------------------------------------- 1 | set(dawn_sir_proto_files SIR/SIR.proto) 2 | -------------------------------------------------------------------------------- /dawn/test/integration-test/dawn4py-tests/data/.clang-format: -------------------------------------------------------------------------------- 1 | DisableFormat: true 2 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/CodeGen/reference/.clang-format: -------------------------------------------------------------------------------- 1 | DisableFormat: true 2 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/.clang-format: -------------------------------------------------------------------------------- 1 | DisableFormat: true 2 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Validator/samples/.clang-format: -------------------------------------------------------------------------------- 1 | DisableFormat: true 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/gtclang-tester.cfg: -------------------------------------------------------------------------------- 1 | EXCLUDE=".*_gen.cpp" 2 | 3 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/lap_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "lap_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/p_grad_c_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "p_grad_c_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/asymmetric_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "asymmetric_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/intervals01_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "intervals01_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/intervals02_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "intervals02_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/intervals03_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "intervals03_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/kcache_fill_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "kcache_fill_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /dawn/src/dawn/AST/proto/DawnAST.cmake: -------------------------------------------------------------------------------- 1 | set(dawn_ast_proto_files AST/statements.proto AST/enums.proto) 2 | -------------------------------------------------------------------------------- /gtclang/docs/images/hd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteoSwiss-APN/dawn/HEAD/gtclang/docs/images/hd.png -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/copy_stencil_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "copy_stencil_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/kcache_flush_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "kcache_flush_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/local_kcache_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "local_kcache_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/coriolis_stencil_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "coriolis_stencil_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/globals_stencil_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "globals_stencil_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/hd_smagorinsky_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "hd_smagorinsky_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/kcache_epflush_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "kcache_epflush_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/kparallel_solver_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "kparallel_solver_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/stencil_desc_ast_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "stencil_desc_ast_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/boundary_condition_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "boundary_condition_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/intervals_stencil_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "intervals_stencil_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/stencil_functions_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "stencil_functions_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/tridiagonal_solve_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "tridiagonal_solve_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /dawn/examples/tutorial/img/in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteoSwiss-APN/dawn/HEAD/dawn/examples/tutorial/img/in.png -------------------------------------------------------------------------------- /dawn/examples/tutorial/img/out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteoSwiss-APN/dawn/HEAD/dawn/examples/tutorial/img/out.png -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/boundary_condition_2_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "boundary_condition_2_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/conditional_stencil_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "conditional_stencil_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/hori_diff_stencil_01_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "hori_diff_stencil_01_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/hori_diff_stencil_02_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "hori_diff_stencil_02_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/kcache_fill_backward_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "kcache_fill_backward_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/kcache_fill_kparallel_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "kcache_fill_kparallel_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/hori_diff_type2_stencil_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "hori_diff_type2_stencil_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/globals_stencil.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals" : { 3 | "var_compiletime" : true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/nested_stencil_functions_benchmark.cu: -------------------------------------------------------------------------------- 1 | #include "nested_stencil_functions_benchmark.cpp" 2 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/stencil_desc_ast.json: -------------------------------------------------------------------------------- 1 | { 2 | "globals" : { 3 | "var_compiletime" : 2 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /scripts/clang-format-all: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | git ls-files | grep -E "\.cpp$|\.h$" | xargs $(git config --get clangFormat.binary) --style=file -i 3 | -------------------------------------------------------------------------------- /dawn/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.toml 2 | include *.md *.rst *.txt 3 | 4 | recursive-include src/dawn4py *.md *.rst *.txt 5 | 6 | graft src/dawn4py/_external_src 7 | -------------------------------------------------------------------------------- /gtclang/test/unit-test/Frontend/input/test_stencil_no_include.cpp: -------------------------------------------------------------------------------- 1 | stencil stencil_test { 2 | storage in, out; 3 | void Do() { 4 | vertical_region(k_start, k_end) { out = in + 1; } 5 | } 6 | }; 7 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | **/build 2 | **/install 3 | **/.env 4 | **/.git 5 | **/.gitignore 6 | **/.vscode 7 | **/bin 8 | **/obj 9 | **/*.so 10 | **/*.dylib 11 | **/README.md 12 | **/LICENSE.txt 13 | Dockerfile 14 | **/Pipfile* 15 | -------------------------------------------------------------------------------- /dawn/examples/tutorial/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | dawn-tutorial-venv/ 3 | laplacian_stencil_cxx_naive.cpp 4 | laplacian_stencil_from_python.cpp 5 | laplacian_stencil_from_python.sir 6 | laplacian_stencil_from_toolchain.cpp 7 | in.vtk 8 | out.vtk 9 | -------------------------------------------------------------------------------- /dawn/src/driver-includes/verification_metrics.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct VerificationMetrics { 4 | int iteration; 5 | bool isValid; 6 | double maxRelErr; 7 | double minRelErr; 8 | double maxAbsErr; 9 | double minAbsErr; 10 | }; 11 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/ReorderTest01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1; 6 | 7 | Do { vertical_region(k_end, k_start) field_a1 = field_a0; } 8 | }; 9 | -------------------------------------------------------------------------------- /dawn/test/integration-test/serializer/reference_iir/README.md: -------------------------------------------------------------------------------- 1 | ## Updating References 2 | 3 | To update the references simply run the binary `DawnUpdateIIRReferences` placed in the integration test folder. If new stencils are added to the test suite, `RegenerateIIRMain.cpp` needs to be 4 | adapted. -------------------------------------------------------------------------------- /gtclang/test/unit-test/Frontend/input/test_stencil_w_include.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil stencil_test { 5 | storage in, out; 6 | void Do() { 7 | vertical_region(k_start, k_end) { out = in + 1; } 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestMultiStageSplitter_01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { field_a = field_b; } 9 | } 10 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/compute_extent_test_stencil_01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | void Do() { 7 | vertical_region(k_start, k_end) { out = in[i - 1]; } 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_04.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { field_a = field_b; } 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/MergeTest01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | field_a = field_b; 10 | } 11 | } 12 | }; -------------------------------------------------------------------------------- /dawn/cmake/EnableCCache.cmake: -------------------------------------------------------------------------------- 1 | if(NOT DEFINED CCACHE_EXECUTABLE) 2 | find_program(CCACHE_EXECUTABLE 3 | NAMES ccache 4 | DOC "Path to ccache executable" 5 | ) 6 | mark_as_advanced(CCACHE_EXECUTABLE) 7 | endif() 8 | if(CCACHE_EXECUTABLE) 9 | set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE}) 10 | endif() 11 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestNonTempCache_01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c, field_d; 6 | 7 | Do { 8 | vertical_region(k_start + 1, k_end - 1) { field_b = field_a[i - 1]; } 9 | } 10 | }; -------------------------------------------------------------------------------- /gtclang/cmake/EnableCCache.cmake: -------------------------------------------------------------------------------- 1 | if(NOT DEFINED CCACHE_EXECUTABLE) 2 | find_program(CCACHE_EXECUTABLE 3 | NAMES ccache 4 | DOC "Path to ccache executable" 5 | ) 6 | mark_as_advanced(CCACHE_EXECUTABLE) 7 | endif() 8 | if(CCACHE_EXECUTABLE) 9 | set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE}) 10 | endif() 11 | -------------------------------------------------------------------------------- /gtclang/test/unit-test/Frontend/input/test_iteration_space.cpp: -------------------------------------------------------------------------------- 1 | stencil Test1 { 2 | storage out; 3 | Do { 4 | iteration_space(i_start, i_end - 1) { out = 0; } 5 | iteration_space(j_start, j_end - 2) { out = 0; } 6 | iteration_space(i_start, i_start + 1, j_start, j_start + 1, k_start, k_end - 1) { out = 0; } 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_05.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | field_a = field_a(i + 1); 10 | } 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/DemoteTest01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage foo; 6 | var tmp; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | tmp = 5.0; 11 | foo = tmp; 12 | } 13 | } 14 | }; -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | BasedOnStyle: LLVM 3 | ColumnLimit: 100 4 | PointerAlignment: Left 5 | SpaceBeforeParens: Never 6 | AlwaysBreakTemplateDeclarations: true 7 | ... 8 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/compute_extent_test_stencil_02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | void Do() { 7 | vertical_region(k_start, k_end) { 8 | mid = in[i - 1]; 9 | out = in[j + 1]; 10 | } 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/IJCacheTest01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | var tmp; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | tmp = in; 11 | out = tmp(i + 1); 12 | } 13 | } 14 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/compute_extent_test_stencil_03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | void Do() { 7 | vertical_region(k_start, k_end) { 8 | mid = in[i - 1]; 9 | out = mid[i - 1]; 10 | } 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_06.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | field_b = field_a(i + 1); 10 | field_a = field_b; 11 | } 12 | } 13 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/ReorderTest03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_b0, field_b1, field_b2; 6 | 7 | Do { 8 | vertical_region(k_end - 1, k_start + 1) { 9 | field_b1 = field_b0; 10 | field_b2 = field_b1(k - 1); 11 | } 12 | } 13 | }; -------------------------------------------------------------------------------- /dawn/cmake/GitVersionHash.cmake: -------------------------------------------------------------------------------- 1 | function(get_git_version_hash HASH_OUT_VAR_NAME) 2 | execute_process( 3 | COMMAND ${GITCOMMAND} rev-parse --short HEAD 4 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 5 | OUTPUT_VARIABLE __hash 6 | OUTPUT_STRIP_TRAILING_WHITESPACE 7 | ) 8 | set(${HASH_OUT_VAR_NAME} ${__hash} PARENT_SCOPE) 9 | endfunction() 10 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestMultiStageSplitter_02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c; 6 | 7 | Do { 8 | vertical_region(k_start, k_end - 1) { 9 | field_b = field_c; 10 | field_a = field_b[k + 1]; 11 | } 12 | } 13 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestMultiStageSplitter_03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c; 6 | 7 | Do { 8 | vertical_region(k_end, k_start + 1) { 9 | field_b = field_c; 10 | field_a = field_b[k - 1]; 11 | } 12 | } 13 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestNonTempCache_03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c, field_d; 6 | 7 | Do { 8 | vertical_region(k_start + 1, k_end - 1) { 9 | field_a = 10; 10 | field_b = field_a[i - 1]; 11 | } 12 | } 13 | }; -------------------------------------------------------------------------------- /gtclang/cmake/GitVersionHash.cmake: -------------------------------------------------------------------------------- 1 | function(get_git_version_hash HASH_OUT_VAR_NAME) 2 | execute_process( 3 | COMMAND ${GITCOMMAND} rev-parse --short HEAD 4 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 5 | OUTPUT_VARIABLE __hash 6 | OUTPUT_STRIP_TRAILING_WHITESPACE 7 | ) 8 | set(${HASH_OUT_VAR_NAME} ${__hash} PARENT_SCOPE) 9 | endfunction() 10 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_08.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, tmp1, tmp2; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | tmp1 = field_a(i + 1); 10 | tmp2 = tmp1; 11 | field_a = tmp2; 12 | } 13 | } 14 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerTest07.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | out = in; 10 | } 11 | vertical_region(k_start, k_end) { 12 | out = 0; 13 | } 14 | } 15 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/compute_extent_test_stencil_04.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out, mid, mid2; 6 | void Do() { 7 | vertical_region(k_start, k_end) { 8 | mid = in; 9 | mid2 = mid[i + 1]; 10 | out = mid2[j - 1]; 11 | } 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # IMAGE needs be be set to one of the docker/dawn-env.dockerfile images 2 | ARG IMAGE=gtclang/dawn-env-ubuntu20.04 3 | FROM $IMAGE 4 | ARG BUILD_TYPE=Debug 5 | COPY . /usr/src/dawn 6 | RUN /usr/src/dawn/scripts/build-and-test \ 7 | --dawn-install-dir /usr/local/dawn \ 8 | --parallel $(nproc) \ 9 | --docker-env \ 10 | -DCMAKE_BUILD_TYPE=$BUILD_TYPE 11 | CMD /bin/bash 12 | -------------------------------------------------------------------------------- /dawn/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.log 3 | *.old 4 | *.out 5 | *.DS_Store 6 | *.~ 7 | *~ 8 | *.user 9 | *.project 10 | 11 | # Build directories 12 | build*/ 13 | install*/ 14 | spack* 15 | 16 | # Shared library in source dir 17 | *.so 18 | *.dylib 19 | *.dll 20 | 21 | # Ignore gh-pages folder 22 | gh-pages* 23 | 24 | # Ignore IDEs 25 | .idea 26 | .vscode/ 27 | **/compile_commands.json 28 | .clangd/ 29 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_07.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, tmp; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | tmp = field_a(i + 1) + field_b(i + 1); 10 | field_a = tmp; 11 | field_b = tmp; 12 | } 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_09.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field, tmp; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | tmp = field(i + 1); 10 | field = tmp; 11 | 12 | tmp = field(i + 1); 13 | field = tmp; 14 | } 15 | } 16 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/IJCacheTest02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | var tmp; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | tmp = in; 11 | } 12 | vertical_region(k_start, k_end) { 13 | out = tmp(i + 1); 14 | } 15 | } 16 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestNonTempCache_02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c, field_d; 6 | 7 | Do { 8 | vertical_region(k_start + 1, k_end - 1) { 9 | field_a = 10; 10 | field_b = field_a[i - 1]; 11 | field_c = field_a[k - 1]; 12 | } 13 | } 14 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | if(field_a > 0.0) { 10 | field_b = field_a; 11 | field_a = field_b(i + 1); 12 | } 13 | } 14 | } 15 | }; -------------------------------------------------------------------------------- /dawn/src/driver-includes/cuda_utils.cpp: -------------------------------------------------------------------------------- 1 | #include "cuda_utils.hpp" 2 | 3 | extern "C" { 4 | void set_splitter_index(dawn::GlobalGpuTriMesh* globalTriMesh, int loc, int space, int offset, 5 | int index) { 6 | globalTriMesh->set_splitter_index(dawn::LocationType(loc), 7 | dawn::UnstructuredSubdomain(space), offset, index); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/KCacheTest01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | var tmp; 7 | 8 | Do { 9 | vertical_region(k_end, k_end) { 10 | tmp = in; 11 | } 12 | vertical_region(k_end - 1, k_start) { 13 | out = tmp(k + 1); 14 | } 15 | } 16 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestMultiStageSplitter_05.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c, field_d; 6 | 7 | Do { 8 | vertical_region(k_start + 1, k_end - 1) { 9 | field_c = field_d; 10 | field_b = field_c[k + 1]; 11 | field_a = field_b[k - 1]; 12 | } 13 | } 14 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/PromoteTest01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | double local_variable = 5.0; 10 | field_a = field_b; 11 | field_c = field_a(i + 1) + local_variable; 12 | } 13 | } 14 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/KCacheTest01b.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | var tmp; 7 | 8 | Do { 9 | vertical_region(k_end, k_end) { 10 | tmp = in; 11 | } 12 | vertical_region(k_end - 1, k_start) { 13 | tmp = in * 2; 14 | out = tmp(k + 1); 15 | } 16 | } 17 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerTest05.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1, field_a2; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | field_a1 = field_a0; 10 | } 11 | vertical_region(k_start, k_end) { 12 | field_a2 = field_a1(i + 1); 13 | } 14 | } 15 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | if(field_a > 0.0) { 10 | field_b = field_a; 11 | double b = field_b(i + 1); 12 | field_a = b; 13 | } 14 | } 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/ReorderTest05.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1, field_a2; 6 | storage field_b0, field_b1, field_b2; 7 | 8 | Do { 9 | vertical_region(k_start, k_start) { field_a1 = field_a0(k + 1); } 10 | 11 | vertical_region(k_start + 2, k_end - 1) { field_a2 = field_a1(k + 1); } 12 | } 13 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerTest06.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1, field_a2; 6 | 7 | Do { 8 | vertical_region(k_start, k_start) { 9 | field_a1 = field_a0; 10 | } 11 | vertical_region(k_start + 1, k_end) { 12 | field_a2 = field_a1(i + 1); 13 | } 14 | } 15 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/MergeTest02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | var tmp_a, tmp_b; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | tmp_a = field_a; 11 | tmp_b = field_b; 12 | field_a = tmp_a(i + 1); 13 | field_b = tmp_b(i + 1); 14 | } 15 | } 16 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil_function TestFunction { 5 | storage field_a; 6 | 7 | Do { return field_a(i + 1); } 8 | }; 9 | 10 | stencil Test { 11 | storage field_a; 12 | 13 | Do { 14 | vertical_region(k_start, k_end) { 15 | field_a = TestFunction(field_a); 16 | } 17 | } 18 | }; -------------------------------------------------------------------------------- /dawn/cmake/AddCXXCompilerFlagIfSuppported.cmake: -------------------------------------------------------------------------------- 1 | include(CheckCXXCompilerFlag) 2 | function(add_cxx_compiler_flag_if_supported flag var) 3 | string(FIND "${var}" "${flag}" flag_already_set) 4 | if(flag_already_set EQUAL -1) 5 | check_cxx_compiler_flag("${flag}" flag_supported) 6 | if(flag_supported) 7 | list(APPEND ${var} "${flag}") 8 | set(${var} "${${var}}" PARENT_SCOPE) 9 | endif() 10 | endif() 11 | endfunction() 12 | -------------------------------------------------------------------------------- /dawn/examples/tutorial/laplacian_stencil.cpp: -------------------------------------------------------------------------------- 1 | globals { double dx; }; 2 | 3 | stencil laplacian_stencil { 4 | storage_ij out_field; 5 | storage_ij in_field; 6 | Do() { 7 | vertical_region(k_start, k_end) { 8 | out_field[i, j] = (-4 * in_field[i, j] + in_field[i + 1, j] + in_field[i - 1, j] + 9 | in_field[i, j - 1] + in_field[i, j + 1]) / 10 | (dx * dx); 11 | } 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /dawn/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools>=40.8.0", "wheel", "cmake"] 3 | build-backend = "setuptools.build_meta" 4 | 5 | [tool.black] 6 | line-length = 99 7 | target_version = ['py36', 'py37'] 8 | include = '\.pyi?$' 9 | exclude = ''' 10 | /( 11 | \.git 12 | | \.gt_cache 13 | | \.hg 14 | | \.mypy_cache 15 | | \.tox 16 | | \.venv 17 | | _build 18 | | buck-out 19 | | build 20 | | dist 21 | )/ 22 | ''' 23 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/MergeTest03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | var tmp_a, tmp_b; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | tmp_a = field_a; 11 | field_a = tmp_a(i + 1); 12 | 13 | tmp_b = field_b; 14 | field_b = tmp_b(i + 1); 15 | } 16 | } 17 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/MultiStageTest01.cpp: -------------------------------------------------------------------------------- 1 | stencil ms_test { 2 | storage a, b; 3 | Do() { 4 | vertical_region(k_start, k_end) { 5 | // init 6 | b = 1; 7 | } 8 | /// b = 1 9 | vertical_region(k_start, k_end) { 10 | // set new value but use old one 11 | b = 2; 12 | /////////////////////// 13 | a = b[k + 1]; 14 | } 15 | // b = 2 16 | // a = 1 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerTest01.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1; 6 | storage field_b0, field_b1; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | field_a1 = field_a0; 11 | } 12 | vertical_region(k_start, k_end) { 13 | field_b1 = field_b0; 14 | } 15 | } 16 | }; -------------------------------------------------------------------------------- /gtclang/cmake/AddCXXCompilerFlagIfSuppported.cmake: -------------------------------------------------------------------------------- 1 | include(CheckCXXCompilerFlag) 2 | function(add_cxx_compiler_flag_if_supported flag var) 3 | string(FIND "${var}" "${flag}" flag_already_set) 4 | if(flag_already_set EQUAL -1) 5 | check_cxx_compiler_flag("${flag}" flag_supported) 6 | if(flag_supported) 7 | list(APPEND ${var} "${flag}") 8 | set(${var} "${${var}}" PARENT_SCOPE) 9 | endif() 10 | endif() 11 | endfunction() 12 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerTest02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1; 6 | storage field_b0, field_b1; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | field_a1 = field_a0; 11 | } 12 | vertical_region(k_start + 1, k_end) { 13 | field_b1 = field_b0; 14 | } 15 | } 16 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerTest03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1; 6 | storage field_b0, field_b1; 7 | 8 | Do { 9 | vertical_region(k_start, k_start) { 10 | field_a1 = field_a0; 11 | } 12 | vertical_region(k_start + 1, k_end) { 13 | field_b1 = field_b0; 14 | } 15 | } 16 | }; -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Technical Description 2 | 3 | Describe here what the PR does 4 | 5 | ### Resolves / Enhances 6 | 7 | Put the link to the issue here 8 | (e.g resolves #XXX) 9 | 10 | ### Example 11 | 12 | If a specific example is being fixed, put it here 13 | 14 | ### Testing 15 | 16 | If anything besides a simple launch needed (perf-test), link it here 17 | 18 | ### Dependencies 19 | 20 | If this is built on top of anything else, put it here 21 | 22 | 23 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | BasedOnStyle: LLVM 3 | SortIncludes: false 4 | ColumnLimit: 0 # Do NOT change this it will break the gtclang-tester! 5 | PointerAlignment: Left 6 | SpaceBeforeParens: Never 7 | AlwaysBreakTemplateDeclarations: true 8 | ... 9 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/PromoteTest03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c, field_d; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | double local_variable = 5.0; 10 | 11 | field_b = field_a; 12 | field_c = field_b(k - 1) + local_variable; 13 | field_d = field_c(k + 1) + local_variable; 14 | } 15 | } 16 | }; -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | dawn: 4 | docker: 5 | - image: gtclang/dawn-env-ubuntu19.10 6 | steps: 7 | - checkout: 8 | path: /usr/src/dawn 9 | - run: 10 | name: Dawn configure 11 | command: | 12 | /usr/src/dawn/scripts/build-and-test \ 13 | --dawn-install-dir /usr/local/dawn \ 14 | --parallel $(nproc) \ 15 | --docker-env \ 16 | -DCMAKE_BUILD_TYPE=Debug 17 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/KCacheTest05.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test1 { 5 | storage in, out; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | out = in + in(k + 1); 10 | } 11 | } 12 | }; 13 | 14 | stencil Test2 { 15 | storage in, out; 16 | 17 | Do { 18 | vertical_region(k_start, k_end) { 19 | out += in + in(k + 1); 20 | } 21 | } 22 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestMultiStageSplitter_04.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c; 6 | 7 | Do { 8 | vertical_region(k_start, k_end - 1) { 9 | field_b = field_c; 10 | field_a = field_b[k + 1]; 11 | } 12 | 13 | vertical_region(k_end - 1, k_start) { 14 | field_b = field_c; 15 | field_a = field_b[k - 1]; 16 | } 17 | } 18 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/KCacheTest03.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | storage a, b, c; 7 | var tmp; 8 | 9 | Do { 10 | vertical_region(k_start, k_end) { 11 | // --- MS0 --- 12 | tmp = in; 13 | b = a; 14 | 15 | // --- MS1 --- 16 | c = b(k + 1); 17 | c = b(k - 1); 18 | 19 | out = tmp; 20 | } 21 | } 22 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/MergeTest04.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b; 6 | var tmp_a, tmp_b; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | tmp_a = field_a; 11 | field_a = tmp_a(i + 1); 12 | } 13 | 14 | vertical_region(k_start, k_end) { 15 | tmp_b = field_b; 16 | field_b = tmp_b(i + 1); 17 | } 18 | } 19 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/PromoteTest02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | double local_variable = 5.0; 10 | 11 | field_a = field_b; 12 | field_c = field_a(i + 1); 13 | 14 | field_a = field_b; 15 | field_c = field_a(i + 1) + local_variable; 16 | } 17 | } 18 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerTest04.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1; 6 | 7 | Do { 8 | vertical_region(k_start, k_start) { 9 | field_a1 = field_a0; 10 | } 11 | vertical_region(k_start + 1, k_end - 1) { 12 | field_a1 = field_a0; 13 | } 14 | vertical_region(k_end, k_end) { 15 | field_a1 = field_a0; 16 | } 17 | } 18 | }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.log 3 | *.old 4 | *.out 5 | *.DS_Store 6 | *.~ 7 | *~ 8 | *.user 9 | *.project 10 | 11 | # Build directories 12 | build*/ 13 | install*/ 14 | 15 | # Custom ignores 16 | _local_* 17 | _local_/* 18 | 19 | # Ignore IDEs 20 | .idea 21 | .vscode/ 22 | **/compile_commands.json 23 | .clangd/ 24 | venv/ 25 | 26 | # Ignore python editable installs 27 | *.egg-info/ 28 | 29 | # Ignore pip files 30 | pip-wheel-metadata/ 31 | 32 | # Ignore spack logs 33 | spack-build-env.txt 34 | spack-build-out.txt 35 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/TestPassFieldVersioning_10.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil_function TestFunction { 5 | storage field_a, field_b; 6 | 7 | Do { 8 | field_b = field_a; 9 | field_a = field_b(i + 1); 10 | return 0.0; 11 | } 12 | }; 13 | 14 | stencil Test { 15 | storage field_a, field_b; 16 | 17 | Do { 18 | vertical_region(k_start, k_end) { 19 | TestFunction(field_a, field_b); 20 | } 21 | } 22 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerDependent.py: -------------------------------------------------------------------------------- 1 | from dusk.script import * 2 | 3 | @stencil 4 | def dependent( 5 | eout0: Field[Edge], 6 | ein0: Field[Edge], 7 | cout0: Field[Cell], 8 | cin0: Field[Cell], 9 | eout1: Field[Edge], 10 | ): 11 | with levels_upward: 12 | eout0 = sum_over(Edge > Cell > Edge, ein0[Edge > Cell > Edge]) 13 | cout0 = sum_over(Cell > Edge > Cell, cin0[Cell > Edge > Cell]) 14 | eout1 = sum_over(Edge > Cell, cout0) -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/ReorderTest04.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1, field_a2; 6 | storage field_b0, field_b1, field_b2; 7 | 8 | Do { 9 | vertical_region(k_end - 1, k_start + 1) { 10 | field_b1 = field_b0; 11 | field_b2 = field_b1(k - 1); 12 | } 13 | 14 | vertical_region(k_start + 1, k_end - 1) { 15 | field_a1 = field_a0; 16 | field_a2 = field_a1(k + 1); 17 | } 18 | } 19 | }; -------------------------------------------------------------------------------- /dawn/src/dawn/IIR/NodeUpdateType.cpp: -------------------------------------------------------------------------------- 1 | #include "dawn/IIR/NodeUpdateType.h" 2 | 3 | namespace dawn { 4 | namespace iir { 5 | 6 | namespace impl { 7 | bool updateLevel(NodeUpdateType updateType) { 8 | return static_cast(updateType) < 2 && static_cast(updateType) > -2; 9 | } 10 | bool updateTreeAbove(NodeUpdateType updateType) { return static_cast(updateType) > 0; } 11 | bool updateTreeBelow(NodeUpdateType updateType) { return static_cast(updateType) < 0; } 12 | } // namespace impl 13 | } // namespace iir 14 | } // namespace dawn 15 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/ReorderTest06.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1, field_a2; 6 | storage field_b0, field_b1, field_b2; 7 | 8 | Do { 9 | vertical_region(k_start + 1, k_start + 1) { 10 | field_a1 = field_a0(k + 1); 11 | field_b1 = field_a0(k - 1); 12 | } 13 | 14 | vertical_region(k_start + 3, k_end - 1) { 15 | field_a2 = field_a1(k + 1); 16 | field_b2 = field_b1(k - 1); 17 | } 18 | } 19 | }; -------------------------------------------------------------------------------- /dawn/src/dawn/Support/ClangCompat/EvalResult.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "clang/AST/Expr.h" 4 | #include "clang/Basic/Version.h" 5 | 6 | namespace dawn::clang_compat::Expr { 7 | #if CLANG_VERSION_MAJOR < 8 8 | using EvalResultInt = ::llvm::APSInt; 9 | inline int64_t getInt(EvalResultInt const& res) { return res.getExtValue(); } 10 | 11 | #else 12 | using EvalResultInt = ::clang::Expr::EvalResult; 13 | inline int64_t getInt(EvalResultInt const& res) { return res.Val.getInt().getExtValue(); } 14 | 15 | #endif 16 | } // namespace dawn::clang_compat::Expr 17 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/ClangCompat/FileSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "llvm/Config/llvm-config.h" 4 | #include "llvm/Support/FileSystem.h" 5 | 6 | namespace dawn::clang_compat { 7 | #if LLVM_VERSION_MAJOR < 7 8 | namespace llvm::sys::fs::OpenFlags { 9 | static constexpr ::llvm::sys::fs::OpenFlags OF_Text = ::llvm::sys::fs::OpenFlags::F_Text; 10 | } 11 | #else 12 | namespace llvm::sys::fs::OpenFlags { 13 | static constexpr ::llvm::sys::fs::OpenFlags OF_Text = ::llvm::sys::fs::OpenFlags::OF_Text; 14 | } 15 | #endif 16 | } // namespace dawn::clang_compat 17 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/test_interval_partition.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | #pragma gtclang merge_stages 5 | stencil interval_partition_test { 6 | storage in, out, out2, out3, out4; 7 | var tmp; 8 | void Do() { 9 | vertical_region(k_start, k_end) { out = in + 1; } 10 | vertical_region(k_start, k_start + 2) { out2 = in + 2; } 11 | vertical_region(k_end - 3, k_end) { out3 = in + 3; } 12 | vertical_region(k_start + 1, k_end - 2) { out4 = in + 4; } 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /gtclang/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.log 3 | *.old 4 | *.out 5 | *.DS_Store 6 | *.~ 7 | *~ 8 | *.user 9 | *.project 10 | 11 | # Build directories 12 | build*/ 13 | install*/ 14 | test/integration-test/CodeGen/generated*/ 15 | test/integration-test/FV3/generated*/ 16 | 17 | # Meta project information 18 | bundle/yoda/* 19 | bundle/CMakeFiles/* 20 | 21 | 22 | # Shared library in source dir 23 | *.so 24 | *.dylib 25 | *.dll 26 | 27 | # Ignore gh-pages folder 28 | gh-pages* 29 | 30 | # Ignore IDEs 31 | .idea 32 | .vscode/ 33 | **/compile_commands.json 34 | .clangd/ 35 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.13) 2 | project(dawn-gtclang-multiproject) 3 | 4 | include(CTest) 5 | 6 | message(STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") 7 | 8 | # Include sub-projects 9 | message(STATUS "Configuring Dawn...") 10 | option(DAWN_BUILD_TESTING "Enable Dawn tests." ${BUILD_TESTING}) 11 | option(DAWN_BUILD_EXAMPLES "Enable Dawn examples." ${BUILD_TESTING}) 12 | add_subdirectory(dawn) 13 | message(STATUS "Configuring GTClang...") 14 | option(GTCLANG_BUILD_TESTING "Enable GTClang tests." ${BUILD_TESTING}) 15 | add_subdirectory(gtclang) 16 | -------------------------------------------------------------------------------- /.github/workflows/nightly-merge.yaml: -------------------------------------------------------------------------------- 1 | name: 'Master into OffsetReduction' 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | nightly-merge: 10 | 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout 15 | uses: actions/checkout@v1 16 | 17 | - name: Nightly Merge 18 | uses: dawn-ico/gh-action-nightly-merge@master 19 | with: 20 | stable_branch: 'master' 21 | development_branch: 'offsetReduction' 22 | allow_ff: false 23 | env: 24 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 25 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/StageMergerIndependent.py: -------------------------------------------------------------------------------- 1 | from dusk.script import * 2 | 3 | @stencil 4 | def independent( 5 | eout0: Field[Edge], 6 | ein0: Field[Edge], 7 | cout0: Field[Cell], 8 | cin0: Field[Cell], 9 | eout1: Field[Edge], 10 | ein1: Field[Edge], 11 | ): 12 | with levels_upward: 13 | eout0 = sum_over(Edge > Cell > Edge, ein0[Edge > Cell > Edge]) 14 | cout0 = sum_over(Cell > Edge > Cell, cin0[Cell > Edge > Cell]) 15 | eout1 = sum_over(Edge > Cell > Edge, ein1[Edge > Cell > Edge]) 16 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Validator/samples/LaplacianTwoStep.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil_function lap { 5 | storage in, out; 6 | Do() { 7 | out[i, j] = (-4 * in[i, j] + in[i + 1, j] + in[i - 1, j] + 8 | in[i, j - 1] + in[i, j + 1]) / (0.25 * 0.25); 9 | } 10 | }; 11 | 12 | // halo size = 1 13 | stencil Test { 14 | storage in, out; 15 | var tmp; 16 | Do() { 17 | vertical_region(k_start, k_end) { 18 | lap(in, tmp); 19 | lap(tmp, out); 20 | } 21 | } 22 | }; 23 | 24 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/PromoteTest04.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | double local_variable = 5.0; 10 | local_variable *= local_variable; 11 | 12 | field_a = field_b; 13 | field_c = field_a(i + 1) + local_variable * local_variable; 14 | 15 | field_a = field_b; 16 | field_c = field_a(i + 1) + local_variable * local_variable; 17 | } 18 | } 19 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/ReorderTest07.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1, field_a2, field_a3, field_a4, field_a5, field_a6, field_a7; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | field_a1 = field_a0(i + 1); 10 | field_a2 = field_a1(i + 1); 11 | field_a3 = field_a2(i + 1); 12 | field_a4 = field_a3(i + 1); 13 | field_a5 = field_a4(i + 1); 14 | field_a6 = field_a5(i + 1); 15 | field_a7 = field_a6(i + 1); 16 | } 17 | } 18 | }; -------------------------------------------------------------------------------- /dawn/src/dawn/Support/ClangCompat/FileUtil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "clang/Basic/FileManager.h" 4 | #include "clang/Basic/Version.h" 5 | 6 | namespace dawn::clang_compat::FileUtil { 7 | #if CLANG_VERSION_MAJOR < 10 8 | inline const clang::FileEntry* getFile(clang::FileManager& files, ::llvm::StringRef filename) { 9 | return files.getFile(filename); 10 | } 11 | #else 12 | inline const clang::FileEntry* getFile(clang::FileManager& files, ::llvm::StringRef filename) { 13 | return files.getFile(filename).get(); // maybe check for error 14 | } 15 | #endif 16 | } // namespace dawn::clang_compat::FileUtil 17 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/ReorderTest02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a0, field_a1, field_a2; 6 | storage field_b0, field_b1, field_b2; 7 | 8 | Do { 9 | vertical_region(k_end, k_start) { 10 | field_b1 = field_b0; 11 | } 12 | vertical_region(k_start, k_end) { 13 | field_a1 = field_a0; 14 | } 15 | vertical_region(k_end, k_start) { 16 | field_b2 = field_b1; 17 | } 18 | vertical_region(k_start, k_end) { 19 | field_a2 = field_a1; 20 | } 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/ClangCompat/VirtualFileSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "clang/Basic/Version.h" 4 | 5 | #if CLANG_VERSION_MAJOR < 8 6 | #include "clang/Basic/VirtualFileSystem.h" 7 | #else 8 | #include "llvm/Support/VirtualFileSystem.h" 9 | #endif 10 | 11 | namespace dawn::clang_compat { 12 | #if CLANG_VERSION_MAJOR < 8 13 | 14 | namespace llvm::vfs { 15 | using InMemoryFileSystem = ::clang::vfs::InMemoryFileSystem; 16 | } 17 | #else 18 | namespace llvm::vfs { 19 | using InMemoryFileSystem = ::llvm::vfs::InMemoryFileSystem; 20 | } // namespace llvm::vfs 21 | #endif 22 | 23 | } // namespace dawn::clang_compat 24 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/KCacheTest02.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage a, b, c; 6 | var tmp; 7 | 8 | Do { 9 | // MS0 10 | vertical_region(k_start, k_start) { 11 | tmp = a; 12 | } 13 | vertical_region(k_start + 1, k_end) { 14 | b = tmp(k - 1); 15 | } 16 | // MS1 17 | vertical_region(k_end, k_end) { 18 | tmp = (b(k - 1) + b) * tmp; 19 | } 20 | vertical_region(k_end - 1, k_start) { 21 | c = tmp(k + 1); 22 | } 23 | } 24 | }; -------------------------------------------------------------------------------- /dawn/src/driver-includes/to_json.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "verification_metrics.hpp" 4 | #include 5 | #include 6 | #include 7 | 8 | using json = nlohmann::json; 9 | 10 | class MetricsSerialiser { 11 | public: 12 | json* jsonRecord; 13 | std::string fieldId; 14 | std::string stencil; 15 | json newJsonMetrics; 16 | MetricsSerialiser(json* jsonRecord, VerificationMetrics metricsStruct, 17 | std::string stencilName, std::string fieldIdentifier); 18 | void writeJson(int iteration); 19 | 20 | private: 21 | json generateJsonFromStruct(VerificationMetrics metrics); 22 | }; 23 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/KCacheTest02b.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage a, b, c; 6 | var tmp; 7 | 8 | Do { 9 | // MS0 10 | vertical_region(k_start, k_start) { 11 | tmp = a; 12 | } 13 | vertical_region(k_start + 1, k_end) { 14 | b = tmp(k - 1); 15 | } 16 | // MS1 17 | vertical_region(k_end, k_end) { 18 | tmp = (b(k - 1) + b) * tmp; 19 | } 20 | vertical_region(k_end - 1, k_start) { 21 | tmp = 2 * b; 22 | c = tmp(k + 1); 23 | } 24 | } 25 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/driver-includes/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(GoogleTest) 2 | 3 | set(executable ${PROJECT_NAME}DriverIncludesUnittest) 4 | add_executable(${executable} 5 | TestExtent.cpp 6 | ) 7 | 8 | target_link_libraries(${executable} gtest gtest_main) 9 | target_include_directories(${executable} PRIVATE ${PROJECT_SOURCE_DIR}/src) 10 | # force to c++11 as generated code needs to be c++11 compliant 11 | set_target_properties(${executable} PROPERTIES 12 | CXX_STANDARD 11 13 | CXX_STANDARD_REQUIRED YES 14 | CXX_EXTENSIONS NO 15 | ) 16 | gtest_discover_tests(${executable} TEST_PREFIX "Dawn::DriverIncludes::Unit::" DISCOVERY_TIMEOUT 30) 17 | -------------------------------------------------------------------------------- /dawn/examples/tutorial/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.13) 2 | project(laplacian_driver LANGUAGES CXX) 3 | 4 | find_package(Dawn REQUIRED) 5 | find_package(GridTools 1.1.3 REQUIRED) 6 | 7 | add_executable(laplacian_driver laplacian_driver.cpp) 8 | target_compile_features(laplacian_driver PUBLIC cxx_std_14) 9 | target_compile_definitions(laplacian_driver PRIVATE BACKEND_MC) 10 | target_include_directories(laplacian_driver 11 | PUBLIC $> 12 | $> 13 | ${PROJECT_BINARY_DIR}) 14 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn4py-tests/__init__.py: -------------------------------------------------------------------------------- 1 | ##===-----------------------------------------------------------------------------*- Python -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/KCacheTest04.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage in, out; 6 | storage a1, a2, b1, b2, c1, c2; 7 | var tmp; 8 | 9 | Do { 10 | vertical_region(k_start, k_end) { 11 | // --- MS0 --- 12 | tmp = in; 13 | 14 | b1 = a1; 15 | // --- MS1 --- 16 | c1 = b1(k + 1); 17 | c1 = b1(k - 1); 18 | 19 | out = tmp; 20 | tmp = in; 21 | 22 | b2 = a2; 23 | // --- MS2 --- 24 | c2 = b2(k + 1); 25 | c2 = b2(k - 1); 26 | 27 | out = tmp; 28 | } 29 | } 30 | }; -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/KCacheTest06.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage a, b, c; 6 | var tmp; 7 | 8 | Do { 9 | // MS0 10 | vertical_region(k_start, k_start) { 11 | tmp = a; 12 | } 13 | vertical_region(k_start + 1, k_end) { 14 | tmp = a * 2; 15 | b = tmp(k - 1); 16 | } 17 | // MS1 18 | vertical_region(k_end - 3, k_end - 3) { 19 | c = tmp[k + 3] + tmp[k + 2] + tmp[k + 1]; 20 | } 21 | vertical_region(k_end - 4, k_start) { 22 | tmp = b; 23 | c = tmp[k + 1]; 24 | } 25 | } 26 | }; -------------------------------------------------------------------------------- /dawn/src/dawn4py/serialization/test/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ##===-----------------------------------------------------------------------------*- Python -*-===## 3 | ## _ 4 | ## | | 5 | ## __| | __ ___ ___ ___ 6 | ## / _` |/ _` \ \ /\ / / '_ | 7 | ## | (_| | (_| |\ V V /| | | | 8 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 9 | ## 10 | ## 11 | ## This file is distributed under the MIT License (MIT). 12 | ## See LICENSE.txt for details. 13 | ## 14 | ##===------------------------------------------------------------------------------------------===## 15 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/MergeTest05.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_1, field_2, field_3, field_4, field_5; 6 | var tmp_1, tmp_2, tmp_3, tmp_4, tmp_5; 7 | 8 | Do { 9 | vertical_region(k_start, k_end) { 10 | tmp_1 = field_1; 11 | field_1 = tmp_1(i + 1); 12 | 13 | tmp_2 = field_2; 14 | field_2 = tmp_2(i + 1); 15 | 16 | tmp_3 = field_3; 17 | field_3 = tmp_3(i + 1); 18 | 19 | tmp_4 = field_4; 20 | field_4 = tmp_4(i + 1); 21 | 22 | tmp_5 = field_5; 23 | field_5 = tmp_5(i + 1); 24 | } 25 | } 26 | }; -------------------------------------------------------------------------------- /dawn/test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_subdirectory(unit-test) 16 | add_subdirectory(integration-test) 17 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/PromoteTest05.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | stencil Test { 5 | storage field_a, field_b, field_c, field_d; 6 | 7 | Do { 8 | vertical_region(k_start, k_end) { 9 | double local_variable = 5.0; 10 | local_variable *= local_variable; 11 | 12 | field_b = field_a; 13 | field_c = field_b(k - 1) + local_variable * local_variable; 14 | field_a = field_c(k + 1) + local_variable * local_variable; 15 | 16 | field_b = field_a; 17 | field_c = field_b(k - 1) + local_variable * local_variable; 18 | field_a = field_c(k + 1) + local_variable * local_variable; 19 | } 20 | } 21 | }; -------------------------------------------------------------------------------- /gtclang/cmake/FetchCxxopts.cmake: -------------------------------------------------------------------------------- 1 | if(NOT TARGET cxxopts::cxxopts) 2 | if(NOT INCLUDE_CXXOPTS) 3 | message(STATUS "Fetching cxxopts...") 4 | endif() 5 | set(CXXOPTS_BUILD_EXAMPLES OFF) 6 | set(CXXOPTS_BUILD_TESTS OFF) 7 | set(CXXOPTS_ENABLE_INSTALL ON) 8 | 9 | FetchContent_Declare(cxxopts 10 | URL https://github.com/jarro2783/cxxopts/archive/v2.2.0.tar.gz 11 | ) 12 | 13 | FetchContent_GetProperties(cxxopts) 14 | if(NOT cxxopts_POPULATED) 15 | FetchContent_Populate(cxxopts) 16 | add_subdirectory(${cxxopts_SOURCE_DIR} ${cxxopts_BINARY_DIR}) 17 | endif() 18 | 19 | set(INCLUDE_CXXOPTS ON CACHE BOOL "Fetched cxxopts.") 20 | mark_as_advanced(INCLUDE_CXXOPTS) 21 | endif() 22 | 23 | add_library(cxxopts::cxxopts ALIAS cxxopts) 24 | -------------------------------------------------------------------------------- /dawn/cmake/FetchGoogleTest.cmake: -------------------------------------------------------------------------------- 1 | #TODO maybe function 2 | 3 | include(FetchContent) 4 | 5 | if(NOT TARGET gtest) 6 | if(NOT FETCHED_GTEST) 7 | message(STATUS "Fetching GoogleTest...") 8 | endif() 9 | set(INSTALL_GTEST OFF) 10 | set(BUILD_GMOCK OFF) 11 | FetchContent_Declare(googletest 12 | URL https://github.com/google/googletest/archive/release-1.10.0.tar.gz 13 | ) 14 | FetchContent_GetProperties(googletest) 15 | if(NOT googletest_POPULATED) 16 | FetchContent_Populate(googletest) 17 | set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) 18 | add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) 19 | endif() 20 | set(FETCHED_GTEST ON CACHE BOOL "Fetched GoogleTest. Used to clean CMake output") 21 | mark_as_advanced(FETCHED_GTEST) 22 | endif() 23 | -------------------------------------------------------------------------------- /gtclang/cmake/FetchGoogleTest.cmake: -------------------------------------------------------------------------------- 1 | #TODO maybe function 2 | 3 | include(FetchContent) 4 | 5 | if(NOT TARGET gtest) 6 | if(NOT FETCHED_GTEST) 7 | message(STATUS "Fetching GoogleTest...") 8 | endif() 9 | set(INSTALL_GTEST ON) 10 | set(BUILD_GMOCK OFF) 11 | FetchContent_Declare(googletest 12 | URL https://github.com/google/googletest/archive/release-1.10.0.tar.gz 13 | ) 14 | FetchContent_GetProperties(googletest) 15 | if(NOT googletest_POPULATED) 16 | FetchContent_Populate(googletest) 17 | set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) 18 | add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) 19 | endif() 20 | set(FETCHED_GTEST ON CACHE BOOL "Fetched GoogleTest. Used to clean CMake output") 21 | mark_as_advanced(FETCHED_GTEST) 22 | endif() 23 | -------------------------------------------------------------------------------- /dawn/src/dawn4py/serialization/IIR/__init__.py: -------------------------------------------------------------------------------- 1 | ##===-----------------------------------------------------------------------------*- Python -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | import sys 16 | 17 | sys.modules[__name__.split(".")[-1]] = sys.modules[__name__] 18 | 19 | from .IIR_pb2 import * 20 | -------------------------------------------------------------------------------- /dawn/src/dawn/AST/Tags.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | // 15 | 16 | #pragma once 17 | 18 | namespace dawn::ast { 19 | 20 | struct unstructured_ {}; 21 | struct cartesian_ {}; 22 | 23 | } // namespace dawn::ast 24 | -------------------------------------------------------------------------------- /dawn/src/toylib/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | project(toylibLibrary) 16 | add_library(toylib STATIC 17 | toylib.hpp 18 | toylib.cpp) 19 | target_include_directories(toylib PUBLIC .) -------------------------------------------------------------------------------- /dawn/src/dawn4py/serialization/SIR/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ##===-----------------------------------------------------------------------------*- Python -*-===## 3 | ## _ 4 | ## | | 5 | ## __| | __ ___ ___ ___ 6 | ## / _` |/ _` \ \ /\ / / '_ | 7 | ## | (_| | (_| |\ V V /| | | | 8 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 9 | ## 10 | ## 11 | ## This file is distributed under the MIT License (MIT). 12 | ## See LICENSE.txt for details. 13 | ## 14 | ##===------------------------------------------------------------------------------------------===## 15 | 16 | import sys 17 | 18 | sys.modules[__name__.split(".")[-1]] = sys.modules[__name__] 19 | 20 | from .SIR_pb2 import * 21 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/IndexGenerator.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/Support/IndexGenerator.h" 16 | namespace dawn { 17 | std::unique_ptr IndexGenerator::instance; 18 | 19 | } // namespace dawn 20 | -------------------------------------------------------------------------------- /dawn/cmake/DawnConfig.cmake.in: -------------------------------------------------------------------------------- 1 | set(@PROJECT_NAME@_VERSION @VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@) 2 | 3 | @PACKAGE_INIT@ 4 | 5 | message(STATUS "Found @PROJECT_NAME@ ${@PROJECT_NAME@_VERSION} at ${CMAKE_CURRENT_LIST_FILE}") 6 | 7 | # Needed for FindClang.cmake and FindLLVM.cmake 8 | list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) 9 | 10 | include(CMakeFindDependencyMacro) 11 | find_dependency(Protobuf 3.4.0 12 | CONFIG 13 | REQUIRED 14 | PATHS @CMAKE_INSTALL_FULL_LIBDIR@/cmake/protobuf # in case protobuf was build with dawn 15 | ) 16 | 17 | if(NOT TARGET Dawn::Dawn) 18 | include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") 19 | endif() 20 | 21 | set_and_check(DAWN_DRIVER_INCLUDEDIR @PACKAGE_DAWN_INSTALL_DRIVER_INCLUDEDIR@) 22 | mark_as_advanced(DAWN_DRIVER_INCLUDEDIR) 23 | 24 | check_required_components(@PROJECT_NAME@) 25 | -------------------------------------------------------------------------------- /dawn/src/dawn4py/serialization/AST/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ##===-----------------------------------------------------------------------------*- Python -*-===## 3 | ## _ 4 | ## | | 5 | ## __| | __ ___ ___ ___ 6 | ## / _` |/ _` \ \ /\ / / '_ | 7 | ## | (_| | (_| |\ V V /| | | | 8 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 9 | ## 10 | ## 11 | ## This file is distributed under the MIT License (MIT). 12 | ## See LICENSE.txt for details. 13 | ## 14 | ##===------------------------------------------------------------------------------------------===## 15 | 16 | import sys 17 | 18 | sys.modules[__name__.split(".")[-1]] = sys.modules[__name__] 19 | 20 | from .statements_pb2 import * 21 | from .enums_pb2 import * 22 | -------------------------------------------------------------------------------- /dawn/src/dawn4py/serialization/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ##===-----------------------------------------------------------------------------*- Python -*-===## 3 | ## _ 4 | ## | | 5 | ## __| | __ ___ ___ ___ 6 | ## / _` |/ _` \ \ /\ / / '_ | 7 | ## | (_| | (_| |\ V V /| | | | 8 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 9 | ## 10 | ## 11 | ## This file is distributed under the MIT License (MIT). 12 | ## See LICENSE.txt for details. 13 | ## 14 | ##===------------------------------------------------------------------------------------------===## 15 | 16 | """ 17 | Python serialization tools for SIR and IIR. 18 | """ 19 | 20 | from . import AST, SIR, IIR 21 | 22 | from .utils import * 23 | from .error import * 24 | -------------------------------------------------------------------------------- /dawn/src/dawn/CodeGen/IcoChainSizes.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include "dawn/AST/LocationType.h" 18 | #include 19 | 20 | namespace dawn { 21 | 22 | int ICOChainSize(const ast::NeighborChain& chain); 23 | 24 | } // namespace dawn -------------------------------------------------------------------------------- /dawn/test/integration-test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_subdirectory(from-sir) 16 | add_subdirectory(serializer) 17 | 18 | if (atlas_FOUND AND eckit_FOUND) 19 | add_subdirectory(unstructured) 20 | endif() 21 | 22 | add_subdirectory(dawn4py-tests) 23 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_subdirectory(AST) 16 | add_subdirectory(Optimizer) 17 | add_subdirectory(IIR) 18 | add_subdirectory(SIR) 19 | add_subdirectory(Support) 20 | add_subdirectory(CodeGen) 21 | add_subdirectory(Validator) 22 | -------------------------------------------------------------------------------- /dawn/src/dawn/AST/GridType.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include 18 | 19 | namespace dawn { 20 | namespace ast { 21 | enum class GridType { Cartesian, Unstructured }; 22 | } 23 | std::ostream& operator<<(std::ostream& os, const ast::GridType& gridType); 24 | } // namespace dawn 25 | -------------------------------------------------------------------------------- /dawn/src/dawn/Compiler/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_library(DawnCompiler 16 | Driver.h 17 | Driver.cpp 18 | ) 19 | 20 | target_add_dawn_standard_props(DawnCompiler) 21 | target_link_libraries(DawnCompiler PUBLIC DawnSupport DawnSIR DawnOptimizer DawnValidator DawnCodeGen DawnSerialization) 22 | -------------------------------------------------------------------------------- /dawn/src/driver-includes/cxx11_warning.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #if __cplusplus < 201103L 18 | #error This file requires compiler and library support for the ISO C++ 2011 standard. \ 19 | This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options. 20 | #endif 21 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | function(add_dawn4py_target) 2 | set(options) 3 | set(oneValueArgs NAME SCRIPT) 4 | set(multiValueArgs) 5 | cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 6 | 7 | add_custom_target(${ARG_NAME} 8 | COMMAND ${CMAKE_COMMAND} -E env 9 | PYTHONPATH=${DAWN4PY_MODULE_DIR}:${PROTOBUF_PYTHON_DIR} 10 | ${Python3_EXECUTABLE} ${ARG_SCRIPT} 11 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 12 | ) 13 | endfunction() 14 | 15 | add_dawn4py_target(NAME GenerateSetLocationTypeInput SCRIPT SetLocationType.py) 16 | add_dawn4py_target(NAME GenerateStageSplitAllStatements SCRIPT StageSplitAllStatements.py) 17 | add_dawn4py_target(NAME GenerateStageMergerUnstructured SCRIPT StageMergerUnstructured.py) 18 | add_dawn4py_target(NAME GenerateTemporaryTypeAlsoDemoteWeight SCRIPT TemporaryTypeAlsoDemoteWeight.py) 19 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/FileSystem.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #if __has_include() 18 | #include 19 | namespace fs = std::filesystem; 20 | #elif __has_include() 21 | #include 22 | namespace fs = std::experimental::filesystem; 23 | #endif 24 | -------------------------------------------------------------------------------- /dawn/test/unit-test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_subdirectory(dawn) 16 | # Pytest is confused when the test directory is named 'dawn4py', so we added '-tests' 17 | add_subdirectory(dawn4py-tests) 18 | add_subdirectory(driver-includes) 19 | 20 | if(atlas_FOUND AND eckit_FOUND) 21 | add_subdirectory(interface) 22 | endif() 23 | -------------------------------------------------------------------------------- /gtclang/test/unit-test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ _ 3 | ## | | | | 4 | ## __ _| |_ ___| | __ _ _ __ __ _ 5 | ## / _` | __/ __| |/ _` | '_ \ / _` | 6 | ## | (_| | || (__| | (_| | | | | (_| | 7 | ## \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | ## __/ | __/ | 9 | ## |___/ |___/ 10 | ## 11 | ## 12 | ## This file is distributed under the MIT License (MIT). 13 | ## See LICENSE.txt for details. 14 | ## 15 | ##===------------------------------------------------------------------------------------------===## 16 | 17 | add_subdirectory(Support) 18 | add_subdirectory(Frontend) 19 | add_subdirectory(Unittest) 20 | -------------------------------------------------------------------------------- /docker/ubuntu20.04.dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:focal 2 | RUN apt update && apt install -y --no-install-recommends \ 3 | apt-transport-https ca-certificates \ 4 | gnupg software-properties-common curl && apt clean 5 | # Add CMake repo 6 | RUN curl -L https://apt.kitware.com/keys/kitware-archive-latest.asc | apt-key add - 7 | RUN apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' 8 | RUN apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal-rc main' 9 | RUN apt-get install kitware-archive-keyring && apt clean 10 | RUN apt update && apt install -y --no-install-recommends \ 11 | build-essential ninja-build cmake git openssh-client curl \ 12 | llvm-9-dev libclang-9-dev libclang-cpp9 \ 13 | python3 python3-pip libpython3-dev \ 14 | python3-setuptools python3-wheel \ 15 | libboost-dev && apt clean 16 | RUN python3 -m pip install --upgrade pip 17 | RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 10 18 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/ClangCompat/CompilerInvocation.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "clang/Basic/Version.h" 4 | #include "clang/Frontend/CompilerInvocation.h" 5 | #include "llvm/Option/Option.h" 6 | 7 | namespace dawn::clang_compat::CompilerInvocation { 8 | #if CLANG_VERSION_MAJOR < 10 9 | inline bool CreateFromArgs(clang::CompilerInvocation& Res, llvm::opt::ArgStringList& ccArgs, 10 | clang::DiagnosticsEngine& Diags) { 11 | return clang::CompilerInvocation::CreateFromArgs( 12 | Res, const_cast(ccArgs.data()), 13 | const_cast(ccArgs.data()) + ccArgs.size(), Diags); 14 | } 15 | #else 16 | inline bool CreateFromArgs(clang::CompilerInvocation& Res, llvm::opt::ArgStringList& ccArgs, 17 | clang::DiagnosticsEngine& Diags) { 18 | return clang::CompilerInvocation::CreateFromArgs(Res, ccArgs, Diags); 19 | } 20 | #endif 21 | } // namespace dawn::clang_compat::CompilerInvocation 22 | -------------------------------------------------------------------------------- /dawn/src/dawn/Unittest/UnittestUtils.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | #include "dawn/IIR/StencilInstantiation.h" 17 | 18 | namespace dawn { 19 | 20 | iir::DoMethod& getFirstDoMethod(std::shared_ptr& si); 21 | 22 | std::shared_ptr getNthStmt(iir::DoMethod& doMethod, int n); 23 | 24 | } // namespace dawn -------------------------------------------------------------------------------- /dawn/src/dawn/IIR/AST.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include "dawn/AST/AST.h" 18 | #include "dawn/IIR/ASTStmt.h" 19 | 20 | namespace dawn { 21 | namespace iir { 22 | inline std::shared_ptr makeAST() { 23 | return std::make_shared(std::make_unique()); 24 | } 25 | } // namespace iir 26 | } // namespace dawn 27 | -------------------------------------------------------------------------------- /dawn/src/dawn/Unittest/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_library(DawnUnittest 16 | IIRBuilder.h 17 | IIRBuilder.cpp 18 | UnittestUtils.h 19 | UnittestUtils.cpp 20 | ) 21 | 22 | target_add_dawn_standard_props(DawnUnittest) 23 | target_link_libraries(DawnUnittest PUBLIC DawnCompiler DawnSupport DawnIIR DawnOptimizer DawnValidator DawnCodeGen) 24 | -------------------------------------------------------------------------------- /dawn/test/integration-test/unstructured/testMutator.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "dawn/IIR/StencilInstantiation.h" 18 | 19 | void injectRedirectedReads(std::shared_ptr stencil); -------------------------------------------------------------------------------- /dawn/src/dawn/SIR/AST.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include "dawn/AST/AST.h" 18 | #include "dawn/SIR/ASTStmt.h" 19 | 20 | namespace dawn { 21 | namespace sir { 22 | 23 | inline std::shared_ptr makeAST() { 24 | return std::make_shared(std::make_unique()); 25 | } 26 | 27 | } // namespace sir 28 | } // namespace dawn 29 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/ClangCompat/ImplicitNodes.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "clang/AST/Expr.h" 4 | #include "clang/Basic/Version.h" 5 | 6 | // TODO skipAllImplicitNodes should be refactored to be only called for Exprs (not Stmts) 7 | // to reflect the change in clang 9 8 | 9 | namespace dawn::clang_compat { 10 | 11 | #if CLANG_VERSION_MAJOR < 9 12 | template 13 | StmtT* skipAllImplicitNodes(StmtT* e) { 14 | static_assert(std::is_base_of_v>); 15 | while(e != e->IgnoreImplicit()) 16 | e = e->IgnoreImplicit(); 17 | return e; 18 | } 19 | #else 20 | template 21 | StmtT* skipAllImplicitNodes(StmtT* s) { 22 | static_assert(std::is_base_of_v>); 23 | if(auto* e = llvm::dyn_cast_or_null(s)) { 24 | while(e != e->IgnoreImplicit()) 25 | e = e->IgnoreImplicit(); 26 | return e; 27 | } 28 | return s; 29 | } 30 | #endif 31 | } // namespace dawn::clang_compat 32 | -------------------------------------------------------------------------------- /gtclang/cmake/GTClangConfig.cmake.in: -------------------------------------------------------------------------------- 1 | set(@PROJECT_NAME@_VERSION @VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@) 2 | 3 | @PACKAGE_INIT@ 4 | 5 | message(STATUS "Found @PROJECT_NAME@ ${@PROJECT_NAME@_VERSION} at ${CMAKE_CURRENT_LIST_FILE}") 6 | 7 | # Needed for FindClang.cmake and FindLLVM.cmake 8 | list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) 9 | 10 | include(CMakeFindDependencyMacro) 11 | # GridTools is only required for compiling generated code. 12 | # In the future, it could make sense to install a GTClangDSLDefsConfig which provides a target 13 | # for linking to generated code. For now, it doesn't harm to require GridTools. 14 | find_package(GridTools 1.1.3 REQUIRED) 15 | 16 | if(NOT TARGET @PROJECT_NAME@::@PROJECT_NAME@) 17 | include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") 18 | endif() 19 | 20 | set_and_check(GTClang_INCLUDE_DIR @CMAKE_INSTALL_FULL_INCLUDEDIR@) 21 | mark_as_advanced(GTClang_INCLUDE_DIR) 22 | 23 | check_required_components("@PROJECT_NAME@") 24 | -------------------------------------------------------------------------------- /dawn/src/driver-includes/gridtools_includes.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #define GT_FLOAT_PRECISION 8 18 | 19 | #include "arrayAddons.hpp" 20 | #include "cxx11_warning.hpp" 21 | #include "defs.hpp" 22 | #include "domain.hpp" 23 | #include "extent.hpp" 24 | #include "halo.hpp" 25 | #include "math.hpp" 26 | #include "param_wrapper.hpp" 27 | #include "storage.hpp" 28 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/AST/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | include(GoogleTest) 15 | 16 | set(executable ${PROJECT_NAME}UnittestAST) 17 | add_executable(${executable} TestOffset.cpp) 18 | target_link_libraries(${executable} PRIVATE DawnSIR DawnUnittest gtest gtest_main) 19 | target_add_dawn_standard_props(${executable}) 20 | gtest_discover_tests(${executable} TEST_PREFIX "Dawn::Unit::AST::" DISCOVERY_TIMEOUT 30) 21 | -------------------------------------------------------------------------------- /gtclang/src/gtclang/Driver/gtclang.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang/Driver/Driver.h" 18 | 19 | int main(int argc, const char* argv[]) { 20 | llvm::SmallVector args(argv, argv + argc); 21 | return gtclang::Driver::run(args); 22 | } 23 | -------------------------------------------------------------------------------- /dawn/src/dawn4py/serialization/error.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ##===-----------------------------------------------------------------------------*- Python -*-===## 3 | ## _ 4 | ## | | 5 | ## __| | __ ___ ___ ___ 6 | ## / _` |/ _` \ \ /\ / / '_ | 7 | ## | (_| | (_| |\ V V /| | | | 8 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 9 | ## 10 | ## 11 | ## This file is distributed under the MIT License (MIT). 12 | ## See LICENSE.txt for details. 13 | ## 14 | ##===------------------------------------------------------------------------------------------===## 15 | 16 | 17 | class Error(Exception): 18 | """ Thrown in case of an error. """ 19 | 20 | pass 21 | 22 | 23 | class ParseError(Error): 24 | """ Thrown in case of a parsing error. """ 25 | 26 | pass 27 | 28 | 29 | class SIRError(Error): 30 | """ Thrown in case of an invalid SIR configuration. """ 31 | 32 | pass 33 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/Options.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | #include "test/integration-test/CodeGen/Options.hpp" 17 | 18 | namespace dawn { 19 | Options& Options::getInstance() { 20 | static Options instance; 21 | return instance; 22 | } 23 | } // namespace dawn 24 | -------------------------------------------------------------------------------- /gtclang/src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ _ 3 | ## | | | | 4 | ## __ _| |_ ___| | __ _ _ __ __ _ 5 | ## / _` | __/ __| |/ _` | '_ \ / _` | 6 | ## | (_| | || (__| | (_| | | | | (_| | 7 | ## \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | ## __/ | __/ | 9 | ## |___/ |___/ 10 | ## 11 | ## 12 | ## This file is distributed under the MIT License (MIT). 13 | ## See LICENSE.txt for details. 14 | ## 15 | ##===------------------------------------------------------------------------------------------===## 16 | 17 | add_subdirectory(gtclang) 18 | 19 | # headers for codegen 20 | add_subdirectory(gtclang_dsl_defs) 21 | 22 | # install headers 23 | install(DIRECTORY . DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 24 | FILES_MATCHING PATTERN "*.h") 25 | -------------------------------------------------------------------------------- /dawn/src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_subdirectory(dawn) 16 | add_subdirectory(toylib) 17 | 18 | if(ENABLE_PYTHON) 19 | add_subdirectory(dawn4py) 20 | endif() 21 | 22 | # install headers 23 | foreach(dir IN ITEMS dawn driver-includes) 24 | install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${dir} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 25 | FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" PATTERN "*.inc") 26 | endforeach() 27 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn4py-tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ## _ 2 | ## | | 3 | ## __| | __ ___ ___ ___ 4 | ## / _` |/ _` \ \ /\ / / '_ | 5 | ## | (_| | (_| |\ V V /| | | | 6 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 7 | ## 8 | ## 9 | ## This file is distributed under the MIT License (MIT). 10 | ## See LICENSE.txt for details. 11 | ## 12 | ##===------------------------------------------------------------------------------------------===## 13 | 14 | add_test(NAME Dawn4Py::Unit::structured 15 | COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${DAWN4PY_MODULE_DIR}:${PROTOBUF_PYTHON_DIR} 16 | ${Python3_EXECUTABLE} -m pytest -v ${CMAKE_CURRENT_SOURCE_DIR}/test_structured.py 17 | ) 18 | 19 | add_test(NAME Dawn4Py::Unit::unstructured 20 | COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${DAWN4PY_MODULE_DIR}:${PROTOBUF_PYTHON_DIR} 21 | ${Python3_EXECUTABLE} -m pytest -v ${CMAKE_CURRENT_SOURCE_DIR}/test_unstructured.py 22 | ) 23 | -------------------------------------------------------------------------------- /dawn/src/dawn/Serialization/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_library(DawnSerialization 16 | ASTSerializer.h 17 | ASTSerializer.cpp 18 | IIRSerializer.h 19 | IIRSerializer.cpp 20 | SIRSerializer.h 21 | SIRSerializer.cpp 22 | ) 23 | 24 | target_add_dawn_standard_props(DawnSerialization) 25 | target_link_libraries(DawnSerialization 26 | PUBLIC DawnSupport DawnAST DawnSIR DawnIIR 27 | PRIVATE protobuf::libprotobuf 28 | ) 29 | -------------------------------------------------------------------------------- /dawn/src/dawn/SIR/ASTStmt.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/SIR/ASTStmt.h" 16 | #include 17 | 18 | namespace dawn { 19 | namespace sir { 20 | std::unique_ptr SIRStmtData::clone() const { 21 | return std::make_unique(*this); 22 | } 23 | bool SIRStmtData::equals(ast::StmtData const* other) const { 24 | return getDataType() == other->getDataType(); 25 | } 26 | } // namespace sir 27 | } // namespace dawn 28 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/Array.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/Support/Array.h" 16 | #include "dawn/Support/StringUtil.h" 17 | 18 | namespace dawn { 19 | 20 | std::ostream& operator<<(std::ostream& os, const Array2i& array) { 21 | return (os << RangeToString()(array)); 22 | } 23 | 24 | std::ostream& operator<<(std::ostream& os, const Array3i& array) { 25 | return (os << RangeToString()(array)); 26 | } 27 | 28 | } // namespace dawn 29 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/UIDGenerator.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/Support/UIDGenerator.h" 16 | 17 | namespace dawn { 18 | 19 | /* Null, because instance will be initialized on demand. */ 20 | UIDGenerator* UIDGenerator::instance_ = 0; 21 | 22 | UIDGenerator* UIDGenerator::getInstance() { 23 | if(instance_ == 0) { 24 | instance_ = new UIDGenerator(); 25 | } 26 | 27 | return instance_; 28 | } 29 | 30 | } // namespace dawn 31 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/Iterator.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | // 15 | // This file includes the header of the easy_iterator library. 16 | // See: https://github.com/TheLartians/EasyIterator 17 | // 18 | //===------------------------------------------------------------------------------------------===// 19 | 20 | #pragma once 21 | 22 | #include 23 | 24 | namespace dawn { 25 | 26 | using namespace easy_iterator; 27 | 28 | } // namespace dawn 29 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/copy_stencil.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | using namespace gtclang::dsl; 19 | 20 | stencil copy_stencil { 21 | storage in, out; 22 | 23 | Do { 24 | vertical_region(k_start, k_end) { 25 | out = in; 26 | } 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/ComparisonHelpers.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include 18 | 19 | namespace dawn { 20 | 21 | /// @brief Result of comparisons 22 | /// contains the boolean that is true when the comparee match and an error message if not 23 | struct CompareResult { 24 | std::string message; 25 | bool match; 26 | 27 | operator bool() { return match; } 28 | std::string why() { return message; } 29 | }; 30 | 31 | } // namespace dawn 32 | -------------------------------------------------------------------------------- /dawn/src/dawn/AST/GridType.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/AST/GridType.h" 16 | #include 17 | 18 | namespace dawn { 19 | 20 | std::ostream& operator<<(std::ostream& os, const ast::GridType& gridType) { 21 | switch(gridType) { 22 | case ast::GridType::Cartesian: 23 | os << "structured"; 24 | break; 25 | case ast::GridType::Unstructured: 26 | os << "unstructured"; 27 | break; 28 | } 29 | return os; 30 | } 31 | 32 | } // namespace dawn 33 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/ContainerUtils.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | #include 17 | #include 18 | 19 | namespace dawn { 20 | namespace support { 21 | 22 | template 23 | std::map orderMap(const std::unordered_map& umap) { 24 | std::map m; 25 | for(const auto& f : umap) 26 | m.insert(f); 27 | 28 | return m; 29 | } 30 | 31 | } // namespace support 32 | } // namespace dawn 33 | -------------------------------------------------------------------------------- /dawn/src/dawn/Unittest/UnittestUtils.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "UnittestUtils.h" 16 | #include "dawn/IIR/IIRNodeIterator.h" 17 | 18 | namespace dawn { 19 | iir::DoMethod& getFirstDoMethod(std::shared_ptr& si) { 20 | return **iterateIIROver(*si->getIIR()).begin(); 21 | } 22 | 23 | std::shared_ptr getNthStmt(iir::DoMethod& doMethod, int n) { 24 | return doMethod.getAST().getStatements()[n]; 25 | } 26 | } // namespace dawn -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/CodeGen/Opt/TestOptCodeGen.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "Stencils.h" 16 | #include "dawn/CodeGen/Options.h" 17 | #include "dawn/Serialization/IIRSerializer.h" 18 | 19 | #include 20 | 21 | namespace { 22 | 23 | constexpr auto backend = dawn::codegen::Backend::CXXOpt; 24 | 25 | TEST(Opt, LaplacianStencil) { 26 | runTest(dawn::getLaplacianStencil(), backend, "reference/laplacian_stencil_opt.cpp"); 27 | } 28 | 29 | } // namespace 30 | -------------------------------------------------------------------------------- /dawn/src/driver-includes/halo.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | namespace gridtools { 18 | namespace dawn { 19 | 20 | /** 21 | * @brief Halo extend (passed to gtclang by "-max-halo") 22 | * @ingroup gridtools_dawn 23 | */ 24 | struct halo { 25 | #ifdef GRIDTOOLS_DAWN_HALO_EXTENT 26 | static constexpr int value = GRIDTOOLS_DAWN_HALO_EXTENT; 27 | #else 28 | static constexpr int value = 3; 29 | #endif 30 | }; 31 | } // namespace dawn 32 | } // namespace gridtools 33 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_do_method_missing.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test{ 24 | // EXPECTED_ERROR: missing Do-method for stencil declaration 'Test' 25 | }; 26 | 27 | int main() {} 28 | -------------------------------------------------------------------------------- /dawn/src/driver-includes/arrayAddons.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include 18 | #include 19 | 20 | namespace gridtools { 21 | namespace dawn { 22 | 23 | template 24 | std::array operator+(std::array const& lhs, std::array const& rhs) { 25 | std::array res; 26 | for(std::size_t i = 0; i < N; ++i) { 27 | res[i] = lhs[i] + rhs[i]; 28 | } 29 | return res; 30 | } 31 | } // namespace dawn 32 | } // namespace gridtools 33 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/update_references.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | usage() { 4 | echo "usage: update_references.sh [-g path_to_gtclang_build] [-h]" 5 | } 6 | 7 | while [ "$1" != "" ]; do 8 | case $1 in 9 | -g | --gtclang) 10 | shift 11 | gtclang_build=$1 12 | ;; 13 | -h | --help) 14 | usage 15 | exit 16 | ;; 17 | *) 18 | usage 19 | exit 1 20 | ;; 21 | esac 22 | shift 23 | done 24 | 25 | script=$(readlink -f $0) 26 | repo_path=$(git rev-parse --show-toplevel) 27 | 28 | # find gtclang script 29 | if [[ "$gtclang_build" == "" ]]; then 30 | if [[ -f "$repo_path/build/gtclang/Makefile" ]]; then 31 | gtclang_build="$repo_path/build/gtclang" 32 | else 33 | echo "Cannot find build directory." 34 | exit 1 35 | fi 36 | else 37 | if [[ ! -f "$gtclang_build/Makefile" ]]; then 38 | echo "Cannot find build directory." 39 | exit 1 40 | fi 41 | fi 42 | 43 | # update references 44 | pushd $gtclang_build >/dev/null 45 | ctest -R GTClangIntegrationTestNoCodeGen 46 | popd >/dev/null 47 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/SIR/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | include(GoogleTest) 15 | 16 | set(executable ${PROJECT_NAME}UnittestSIR) 17 | add_executable(${executable} 18 | TestAST.cpp 19 | TestASTVisitor.cpp 20 | TestSIR.cpp 21 | TestSIRSerializer.cpp 22 | ) 23 | target_link_libraries(${executable} PRIVATE DawnSIR DawnSerialization DawnUnittest gtest gtest_main) 24 | target_add_dawn_standard_props(${executable}) 25 | gtest_discover_tests(${executable} TEST_PREFIX "Dawn::Unit::SIR::" DISCOVERY_TIMEOUT 30) 26 | -------------------------------------------------------------------------------- /gtclang/test/unit-test/Unittest/TestMain.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang/Unittest/UnittestEnvironment.h" 18 | #include 19 | 20 | int main(int argc, char* argv[]) { 21 | testing::InitGoogleTest(&argc, argv); 22 | testing::AddGlobalTestEnvironment(>clang::UnittestEnvironment::getSingleton()); 23 | 24 | return RUN_ALL_TESTS(); 25 | } 26 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/Config.h.cmake: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | // Major version of DAWN 18 | #define DAWN_VERSION_MAJOR ${VERSION_MAJOR} 19 | 20 | // Minor version of DAWN 21 | #define DAWN_VERSION_MINOR ${VERSION_MINOR} 22 | 23 | // Patch version of DAWN 24 | #define DAWN_VERSION_PATCH ${VERSION_PATCH} 25 | 26 | // DAWN version string 27 | #define DAWN_VERSION_STR "${Dawn_VERSION}" 28 | 29 | // DAWN full version string 30 | #define DAWN_FULL_VERSION_STR "${DAWN_FULL_VERSION}" 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/p_grad_c.cpp: -------------------------------------------------------------------------------- 1 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 2 | using namespace gtclang::dsl; 3 | 4 | globals { 5 | double dt2; 6 | bool hydrostatic; 7 | }; 8 | 9 | stencil p_grad_c { 10 | storage_ij delpc; 11 | storage pkc, gz, uc, vc, rdxc, rdyc; 12 | var wk; // should be ij-only 13 | 14 | Do { 15 | vertical_region(k_start, k_end) { 16 | if(hydrostatic) { 17 | wk = pkc[k + 1] - pkc; 18 | } else { 19 | wk = delpc; 20 | } 21 | 22 | // // do j=js,je 23 | // // do i=is,ie+1 24 | uc += dt2 * rdxc / (wk[i - 1] + wk) * 25 | ((gz[i - 1, k + 1] - gz) * 26 | (pkc[k + 1] - pkc[i - 1]) + 27 | (gz[i - 1] - gz[k + 1]) * 28 | (pkc[i - 1, k + 1] - pkc)); 29 | 30 | // // do j=js,je+1 31 | // // do i=is,ie 32 | vc += dt2 * rdyc / (wk[j - 1] + wk) * 33 | ((gz[j - 1, k + 1] - gz) * 34 | (pkc[k + 1] - pkc[j - 1]) + 35 | (gz[j - 1] - gz[k + 1]) * 36 | (pkc[j - 1, k + 1] - pkc)); 37 | } 38 | } 39 | }; 40 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/NonCopyable.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | namespace dawn { 18 | 19 | /// @brief Classes derived from NonCopyable cannot be copied or assigned 20 | /// @ingroup support 21 | class NonCopyable { 22 | protected: 23 | constexpr NonCopyable() = default; 24 | ~NonCopyable() = default; 25 | 26 | NonCopyable(const NonCopyable&) = delete; 27 | NonCopyable& operator=(const NonCopyable&) = delete; 28 | 29 | NonCopyable(NonCopyable&& other) = default; 30 | }; 31 | 32 | } // namespace dawn 33 | -------------------------------------------------------------------------------- /gtclang/src/gtclang_dsl_defs/dimension.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #pragma once 18 | 19 | namespace gtclang { 20 | namespace dsl { 21 | /** 22 | * @brief Defintion of a dimension in an access of a storage 23 | * @ingroup gtclang_dsl 24 | */ 25 | struct dimension { 26 | dimension operator+(int); 27 | dimension operator-(int); 28 | }; 29 | } // namespace dsl 30 | } // namespace gtclang 31 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/CodeGen/Naive-Ico/TestNaive-IcoCodeGen.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "UnstructuredStencils.h" 16 | #include "dawn/CodeGen/Options.h" 17 | #include "dawn/Serialization/IIRSerializer.h" 18 | 19 | #include 20 | 21 | namespace { 22 | 23 | constexpr auto backend = dawn::codegen::Backend::CXXNaiveIco; 24 | 25 | // NOTE: Often-changing backend. For the moment we prefer to test code generation through end-to-end 26 | // tests checking the output. To be reconsidered once this is stable. 27 | 28 | } // namespace -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017, ETH Zurich and MeteoSwiss 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/CodeGen/UnstructuredStencils.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/CodeGen/Options.h" 16 | #include "dawn/IIR/StencilInstantiation.h" 17 | #include "dawn/Unittest/IIRBuilder.h" 18 | 19 | #include 20 | #include 21 | 22 | namespace dawn { 23 | 24 | std::shared_ptr getReductionsStencil(); 25 | 26 | void runTest(const std::shared_ptr stencilInstantiation, 27 | codegen::Backend backend, const std::string& refFile); 28 | 29 | } // namespace dawn -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Support/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | include(GoogleTest) 15 | 16 | set(executable ${PROJECT_NAME}UnittestSupport) 17 | add_executable(${executable} 18 | TestLogger.cpp 19 | TestArrayRef.cpp 20 | TestIndexRange.cpp 21 | TestRemoveIf.cpp 22 | TestRangeToString.cpp 23 | TestType.cpp 24 | ) 25 | target_link_libraries(${executable} DawnSupport DawnUnittest gtest gtest_main) 26 | target_add_dawn_standard_props(${executable}) 27 | gtest_discover_tests(${executable} TEST_PREFIX "Dawn::Unit::Support::" DISCOVERY_TIMEOUT 30) 28 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_stencil_invalid_storage_decl.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage in; 25 | double a; // EXPECTED_ERROR: invalid type 'double' of stencil argument 'a' 26 | 27 | Do {} 28 | }; 29 | 30 | int main() {} 31 | -------------------------------------------------------------------------------- /gtclang/src/gtclang_dsl_defs/direction.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #pragma once 18 | 19 | namespace gtclang { 20 | namespace dsl { 21 | 22 | /** 23 | * @brief Defintion of a direction which can be as argument in stencil functions 24 | * @ingroup gtclang_dsl 25 | */ 26 | struct direction { 27 | direction operator+(int); 28 | direction operator-(int); 29 | }; 30 | } // namespace dsl 31 | } // namespace gtclang 32 | -------------------------------------------------------------------------------- /dawn/src/dawn/Optimizer/PassSetLoopOrder.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include "dawn/Optimizer/Pass.h" 18 | 19 | namespace dawn { 20 | 21 | /// @brief This Pass sets the loop order of multistages to parallel if possible 22 | class PassSetLoopOrder : public Pass { 23 | public: 24 | PassSetLoopOrder(): Pass("PassSetLoopOrder") {} 25 | 26 | /// @brief Pass implementation 27 | bool run(const std::shared_ptr& stencilInstantiation, 28 | const Options& options = {}) override; 29 | }; 30 | 31 | } // namespace dawn 32 | -------------------------------------------------------------------------------- /dawn/src/dawn/Validator/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | add_library(DawnValidator 16 | UnstructuredDimensionChecker.h 17 | UnstructuredDimensionChecker.cpp 18 | GridTypeChecker.h 19 | GridTypeChecker.cpp 20 | IntegrityChecker.h 21 | IntegrityChecker.cpp 22 | IndirectionChecker.h 23 | IndirectionChecker.cpp 24 | MultiStageChecker.h 25 | MultiStageChecker.cpp 26 | WeightChecker.h 27 | WeightChecker.cpp 28 | ) 29 | 30 | target_add_dawn_standard_props(DawnValidator) 31 | target_link_libraries(DawnValidator PUBLIC DawnIIR DawnSIR) -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_stencilcall_invalid_call_02.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage in, out; 25 | 26 | Do { 27 | Test(in, out, in); // EXPECTED_ERROR: no matching stencil for call to 'Test' 28 | } 29 | }; 30 | 31 | int main() {} 32 | -------------------------------------------------------------------------------- /dawn/src/dawn/Optimizer/PassSetDependencyGraph.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include "dawn/Optimizer/Pass.h" 18 | 19 | namespace dawn { 20 | 21 | /// @brief This Pass sets the dependency graph of a do-method 22 | class PassSetDependencyGraph : public Pass { 23 | public: 24 | PassSetDependencyGraph() : Pass("PassSetDependencyGraph") {} 25 | 26 | /// @brief Pass implementation 27 | bool run(const std::shared_ptr& stencilInstantiation, 28 | const Options& options = {}) override; 29 | }; 30 | 31 | } // namespace dawn 32 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/test_compute_maximum_extent_01.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | 19 | using namespace gtclang::dsl; 20 | 21 | stencil compute_extent_test_stencil { 22 | storage u, out; 23 | 24 | Do { 25 | vertical_region(k_start, k_end) { 26 | out = u[i + 1]; 27 | out += u[j - 1]; 28 | out *= u[k + 2] + 2.4; 29 | } 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/lap.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | using namespace gtclang::dsl; 19 | 20 | stencil lap { 21 | storage in, out; 22 | var tmp; 23 | 24 | Do { 25 | vertical_region(k_start, k_end) { 26 | tmp = in[j - 2] + in[j + 2] + in[i - 2] + in[i + 2]; 27 | out = tmp[j - 1] + tmp[j + 1] + tmp[i - 1] + tmp[i + 1]; 28 | } 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /gtclang/test/unit-test/Support/TestMain.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "dawn/Support/STLExtras.h" 18 | #include "gtclang/Unittest/UnittestEnvironment.h" 19 | #include 20 | 21 | int main(int argc, char* argv[]) { 22 | // Initialize GTest 23 | testing::InitGoogleTest(&argc, argv); 24 | testing::AddGlobalTestEnvironment(>clang::UnittestEnvironment::getSingleton()); 25 | 26 | return RUN_ALL_TESTS(); 27 | } 28 | -------------------------------------------------------------------------------- /docker/update-images: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | usage() { 6 | echo "USAGE: docker/update-images [-s] [cpu] [gpu]" 7 | exit 1 8 | } 9 | 10 | if [ $# -eq 0 ]; then 11 | usage 12 | fi 13 | 14 | while [ "$1" != "" ]; do 15 | case $1 in 16 | c | cpu) 17 | image_name=gtclang/dawn-env-ubuntu20.04 18 | docker build --rm \ 19 | --tag $image_name-base \ 20 | --file docker/ubuntu20.04.dockerfile . 21 | docker build --rm \ 22 | --tag $image_name --build-arg IMAGE=$image_name-base \ 23 | --file docker/dawn-env.dockerfile . 24 | echo "Now run:\n\tdocker push $image_name" 25 | ;; 26 | g | gpu) 27 | image_name=gtclang/dawn-env-cuda10.1-ubuntu18.04 28 | docker build --rm \ 29 | --tag $image_name-base \ 30 | --file docker/cuda10.1-ubuntu18.04.dockerfile . 31 | docker build --rm \ 32 | --tag $image_name --build-arg IMAGE=$image_name-base \ 33 | --file docker/dawn-env.dockerfile . 34 | echo "Now run:\n\tdocker push $image_name" 35 | ;; 36 | *) 37 | usage 38 | ;; 39 | esac 40 | shift 41 | done 42 | -------------------------------------------------------------------------------- /gtclang/src/gtclang/Support/ASTUtils.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "clang/AST/ASTFwd.h" 18 | #include "clang/AST/ExprCXX.h" 19 | 20 | #include "gtclang/Support/ASTUtils.h" 21 | 22 | namespace gtclang { 23 | 24 | std::string getClassNameFromConstructExpr(clang::CXXConstructExpr* expr) { 25 | clang::CXXRecordDecl* recDecl = expr->getConstructor()->getParent(); 26 | return recDecl->getNameAsString(); 27 | } 28 | } // namespace gtclang -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/Macros.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | #ifndef TEST_INTEGRATIONTEST_CODEGEN_MACROS_H 17 | #define TEST_INTEGRATIONTEST_CODEGEN_MACROS_H 18 | 19 | #define CAT(X, Y) CAT2(X, Y) 20 | #define CAT2(X, Y) X##Y 21 | #define CAT_2 CAT 22 | 23 | // Macro for adding quotes 24 | #define STRINGIFY(X) STRINGIFY2(X) 25 | #define STRINGIFY2(X) #X 26 | 27 | #define INCLUDE_FILE(HEAD, TAIL) STRINGIFY(CAT_2(HEAD, TAIL)) 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /gtclang/src/gtclang/Driver/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ _ 3 | ## | | | | 4 | ## __ _| |_ ___| | __ _ _ __ __ _ 5 | ## / _` | __/ __| |/ _` | '_ \ / _` | 6 | ## | (_| | || (__| | (_| | | | | (_| | 7 | ## \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | ## __/ | __/ | 9 | ## |___/ |___/ 10 | ## 11 | ## 12 | ## This file is distributed under the MIT License (MIT). 13 | ## See LICENSE.txt for details. 14 | ## 15 | ##===------------------------------------------------------------------------------------------===## 16 | 17 | add_library(GTClangDriver 18 | CompilerInstance.cpp 19 | CompilerInstance.h 20 | Driver.cpp 21 | Driver.h 22 | Options.h 23 | Options.inc 24 | OptionsParser.cpp 25 | OptionsParser.h 26 | ) 27 | 28 | target_add_gtclang_standard_props(GTClangDriver) 29 | target_link_libraries(GTClangDriver 30 | PUBLIC GTClangFrontend GTClangSupport Dawn::Dawn Clang::Clang LLVM::LLVM 31 | ) 32 | -------------------------------------------------------------------------------- /gtclang/src/gtclang_dsl_defs/offset.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #pragma once 18 | 19 | namespace gtclang { 20 | namespace dsl { 21 | 22 | /** 23 | * @brief Defintion of an offset which can be as argument in stencil functions 24 | * @ingroup gtclang_dsl 25 | */ 26 | struct offset { 27 | offset operator+(int); 28 | offset operator-(int); 29 | 30 | offset operator+(); 31 | offset operator-(); 32 | }; 33 | } // namespace dsl 34 | } // namespace gtclang 35 | -------------------------------------------------------------------------------- /dawn/src/dawn/CodeGen/TranslationUnit.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/CodeGen/TranslationUnit.h" 16 | 17 | namespace dawn { 18 | namespace codegen { 19 | 20 | TranslationUnit::TranslationUnit(std::string filename, std::vector&& ppDefines, 21 | std::map&& stencils, 22 | std::string&& globals) 23 | : filename_(std::move(filename)), ppDefines_(std::move(ppDefines)), 24 | globals_(std::move(globals)), stencils_(std::move(stencils)) {} 25 | 26 | } // namespace codegen 27 | } // namespace dawn 28 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/IIRSerializer/CopyTest.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fwrite-iir -fno-codegen 18 | // EXPECTED_FILE: OUTPUT:CopyTest.iir REFERENCE:%filename%_ref.iir IGNORE:filename 19 | 20 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 21 | 22 | using namespace gtclang::dsl; 23 | 24 | stencil CopyTest { 25 | storage field_a, field_b; 26 | 27 | Do { 28 | vertical_region(k_start, k_end) { field_a = field_b; } 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_do_method_non_local_var.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | double a; 24 | 25 | stencil Test{ 26 | Do{ 27 | vertical_region(k_start, k_end) 28 | a += 1; // EXPECTED_ERROR: reference to non-local variable 'a' inside Do-method 29 | } 30 | } 31 | ; 32 | 33 | int main() {} 34 | -------------------------------------------------------------------------------- /dawn/cmake/HasUnstructuredDeps.cmake: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | 15 | if(DAWN_REQUIRE_UNSTRUCTURED_TESTING) 16 | find_package(eckit REQUIRED) 17 | find_package(atlas REQUIRED) 18 | else() 19 | find_package(eckit QUIET) 20 | if(NOT eckit_FOUND) 21 | message(STATUS "Could NOT locate eckit.") 22 | endif() 23 | find_package(atlas QUIET) 24 | if(NOT atlas_FOUND) 25 | message(STATUS "Could NOT locate atlas.") 26 | endif() 27 | endif() 28 | 29 | if(atlas_FOUND AND eckit_FOUND) 30 | message(STATUS "Found atlas and eckit.") 31 | else() 32 | set(STATUS "Cound not find dependencies for unstructured support.") 33 | endif() 34 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/Json.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | // 15 | // This file includes the headers of the json library. 16 | // See: https://github.com/nlohmann/json/tree/master 17 | // 18 | //===------------------------------------------------------------------------------------------===// 19 | 20 | #pragma once 21 | 22 | #include 23 | 24 | namespace dawn { 25 | 26 | namespace json { 27 | 28 | /// @class json 29 | /// @brief JSON object 30 | /// 31 | /// @see https://github.com/nlohmann/json/tree/master 32 | /// @ingroup support 33 | using nlohmann::json; 34 | 35 | } // namespace json 36 | 37 | } // namespace dawn 38 | -------------------------------------------------------------------------------- /gtclang/test/unit-test/Frontend/TestMain.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "dawn/Support/STLExtras.h" 18 | #include "gtclang/Support/Logger.h" 19 | #include "gtclang/Unittest/UnittestEnvironment.h" 20 | #include 21 | 22 | int main(int argc, char* argv[]) { 23 | 24 | // Initialize GTest 25 | testing::InitGoogleTest(&argc, argv); 26 | testing::AddGlobalTestEnvironment(>clang::UnittestEnvironment::getSingleton()); 27 | 28 | return RUN_ALL_TESTS(); 29 | } 30 | -------------------------------------------------------------------------------- /gtclang/src/gtclang_dsl_defs/boundary_condition.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #pragma once 18 | 19 | #include "gtclang_dsl_defs/stencil_function.hpp" 20 | 21 | namespace gtclang { 22 | namespace dsl { 23 | /* 24 | * @brief Boundary condition specification 25 | * @ingroup gtclang_dsl 26 | */ 27 | class boundary_condition { 28 | public: 29 | template 30 | boundary_condition(const stencil_function&, T&&...); 31 | }; 32 | } // namespace dsl 33 | } // namespace gtclang 34 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/hori_diff_stencil_01.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | 19 | using namespace gtclang::dsl; 20 | 21 | stencil hori_diff_stencil { 22 | storage u, out; 23 | var lap; 24 | 25 | Do { 26 | vertical_region(k_start, k_end) { 27 | lap = u(i + 1) + u(i - 1) + u(j + 1) + u(j - 1) - 4.0 * u; 28 | out = lap(i + 1) + lap(i - 1) + lap(j + 1) + lap(j - 1) - 4.0 * lap; 29 | } 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/intervals01.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | 19 | using namespace gtclang::dsl; 20 | 21 | #ifndef DAWN_GENERATED 22 | interval k_flat = k_start + 4; 23 | #endif 24 | 25 | stencil intervals01 { 26 | storage in, out; 27 | 28 | Do { 29 | vertical_region(k_start + 1, k_flat) 30 | out = in + 1; 31 | 32 | vertical_region(k_flat + 2, k_end - 1) 33 | out = in + 3; 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_do_method_invalid_type_of_local_var.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | struct foo {}; 24 | 25 | stencil Test{ 26 | Do{ 27 | vertical_region(k_start, k_end) 28 | foo f; // EXPECTED_ERROR: invalid type 'struct foo' of local variable 'f' 29 | } 30 | } 31 | ; 32 | 33 | int main() {} 34 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_do_method_var_shadowing.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage foo; 25 | 26 | Do { 27 | vertical_region(k_start, k_end) double foo = 5; // EXPECTED_ERROR: declaration of local variable 'foo' shadows argument of surrounding stencil 28 | } 29 | }; 30 | 31 | int main() {} 32 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_interval_custom_missing_init.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | interval k_flat; // EXPECTED_ERROR: missing initialization for custom interval 'k_flat' 24 | 25 | stencil Test { 26 | storage a; 27 | 28 | Do { 29 | vertical_region(k_flat, k_end) 30 | a = 0.0; 31 | } 32 | }; 33 | 34 | int main() {} 35 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_interval_invalid_type.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage in, out; 25 | 26 | Do { 27 | vertical_region(i + 1, i + 10) // EXPECTED_ERROR: invalid type 'struct gtclang::dsl::dimension' for vertical region declaration 28 | in = out; 29 | } 30 | }; 31 | 32 | int main() {} 33 | -------------------------------------------------------------------------------- /dawn/src/dawn/Optimizer/PassSetStageName.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include "dawn/Optimizer/Pass.h" 18 | 19 | namespace dawn { 20 | 21 | /// @brief This pass assigns a unique name to each stage and makes 22 | /// `StencilInstantiation::getNameFromStageID` usable 23 | /// 24 | /// @ingroup optimizer 25 | class PassSetStageName : public Pass { 26 | public: 27 | PassSetStageName() : Pass("PassSetStageName") {} 28 | 29 | /// @brief Pass implementation 30 | bool run(const std::shared_ptr& stencilInstantiation, 31 | const Options& options = {}) override; 32 | }; 33 | 34 | } // namespace dawn 35 | -------------------------------------------------------------------------------- /dawn/src/dawn/Optimizer/PassTemporaryFirstAccess.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include "dawn/Optimizer/Pass.h" 18 | 19 | namespace dawn { 20 | 21 | /// @brief This pass checks the first access to a temporary to avoid unitialized memory accesses 22 | /// 23 | /// @ingroup optimizer 24 | class PassTemporaryFirstAccess : public Pass { 25 | public: 26 | PassTemporaryFirstAccess() : Pass("PassTemporaryFirstAccess") {} 27 | 28 | /// @brief Pass implementation 29 | bool run(const std::shared_ptr& stencilInstantiation, 30 | const Options& options = {}) override; 31 | }; 32 | 33 | } // namespace dawn 34 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_index_not_constexpr.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage in, out; 25 | 26 | Do { 27 | vertical_region(k_start, k_end) { 28 | int kk = 5; 29 | in = out(i, j, k + kk); // EXPECTED_ERROR: offset of index is not a constant expression 30 | } 31 | } 32 | }; 33 | 34 | int main() {} 35 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/asymmetric.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | using namespace gtclang::dsl; 19 | 20 | stencil asymmetric_stencil { 21 | storage in, out; 22 | 23 | var tmp; 24 | 25 | Do { 26 | vertical_region(k_start, k_start) { 27 | tmp = in[i + 1] + in[j - 2]; 28 | out = 1; 29 | } 30 | vertical_region(k_start + 1, k_end) { 31 | tmp = in[i - 3] + in[j + 1]; 32 | out = tmp[k - 1]; 33 | } 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_interval_offset_not_constexpr.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | int kplus2 = 2; 24 | 25 | stencil Test { 26 | storage in, out; 27 | 28 | Do { 29 | vertical_region(k_start + kplus2, k_end) // EXPECTED_ERROR: offset of vertical region is not a constant expression 30 | in = out; 31 | } 32 | }; 33 | 34 | int main() {} 35 | -------------------------------------------------------------------------------- /dawn/src/dawn/Optimizer/ReorderStrategyPartitioning.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/Optimizer/ReorderStrategyPartitioning.h" 16 | #include "dawn/IIR/DependencyGraphAccesses.h" 17 | #include "dawn/IIR/StencilInstantiation.h" 18 | 19 | namespace dawn { 20 | 21 | std::unique_ptr 22 | ReorderStrategyPartitioning::reorder(iir::StencilInstantiation* instantiation, 23 | const std::unique_ptr& stencilPtr, 24 | const Options& options) { 25 | DAWN_ASSERT("ReorderStrategyPartitioning is not yet implemented"); 26 | return nullptr; 27 | } 28 | 29 | } // namespace dawn 30 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/SIR/CopyTest.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -write-sir -fno-codegen -o %filename%_gen.cpp 18 | // EXPECTED_FILE: OUTPUT:%filename%_gen.sir REFERENCE:%filename%_gen_ref.sir IGNORE:filename 19 | 20 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 21 | 22 | using namespace gtclang::dsl; 23 | 24 | stencil Test { 25 | storage field_a, field_b; 26 | 27 | Do { 28 | vertical_region(k_start, k_end) 29 | field_a = field_b; 30 | } 31 | }; 32 | 33 | int main() {} 34 | -------------------------------------------------------------------------------- /dawn/src/dawn/Optimizer/PassTemporaryMerger.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include "dawn/Optimizer/Pass.h" 18 | 19 | namespace dawn { 20 | 21 | /// @brief Pass to merge temporaries 22 | /// @ingroup optimizer 23 | /// 24 | /// This pass is not necessary to create legal code and is hence not in the debug-group 25 | class PassTemporaryMerger : public Pass { 26 | public: 27 | PassTemporaryMerger() : Pass("PassTemporaryMerger") {} 28 | 29 | /// @brief Pass implementation 30 | bool run(const std::shared_ptr& stencilInstantiation, 31 | const Options& options = {}) override; 32 | }; 33 | 34 | } // namespace dawn 35 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/CodeGen/Stencils.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/CodeGen/Options.h" 16 | #include "dawn/IIR/StencilInstantiation.h" 17 | 18 | #include 19 | #include 20 | 21 | namespace dawn { 22 | 23 | std::shared_ptr getGlobalIndexStencil(); 24 | std::shared_ptr getLaplacianStencil(); 25 | std::shared_ptr getNonOverlappingInterval(); 26 | 27 | void runTest(const std::shared_ptr stencilInstantiation, 28 | codegen::Backend backend, const std::string& ref_file, bool withSync = true); 29 | 30 | } // namespace dawn 31 | -------------------------------------------------------------------------------- /gtclang/src/gtclang/Unittest/FlagManager.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang/Unittest/FlagManager.h" 18 | #include "gtclang/Support/Config.h" 19 | 20 | namespace gtclang { 21 | 22 | FlagManager::FlagManager() : includes_(GTCLANG_UNITTEST_INCLUDES) {} 23 | 24 | std::string FlagManager::getInclude() const { return "-I" + includes_; } 25 | 26 | std::vector FlagManager::getDefaultFlags() const { 27 | return std::vector{"-std=c++11", getInclude()}; 28 | } 29 | 30 | } // namespace gtclang 31 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Accesses/Simple01.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen -freport-accesses 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage field_a, field_b; 25 | 26 | Do { 27 | vertical_region(k_start, k_end) 28 | field_a = field_b; // EXPECTED_ACCESSES: W:field_a:<[,(0,0)]> %and% R:field_b:<[,(0,0)]> 29 | } 30 | }; 31 | 32 | int main() {} 33 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Validator/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ##===------------------------------------------------------------------------------*- CMake -*-===## 2 | ## _ 3 | ## | | 4 | ## __| | __ ___ ___ ___ 5 | ## / _` |/ _` \ \ /\ / / '_ | 6 | ## | (_| | (_| |\ V V /| | | | 7 | ## \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | ## 9 | ## 10 | ## This file is distributed under the MIT License (MIT). 11 | ## See LICENSE.txt for details. 12 | ## 13 | ##===------------------------------------------------------------------------------------------===## 14 | include(GoogleTest) 15 | 16 | set(executable ${PROJECT_NAME}UnittestValidator) 17 | add_executable(${executable} 18 | TestUnstructuredDimensionChecker.cpp 19 | TestGridTypeChecker.cpp 20 | TestIntegrityChecker.cpp 21 | TestMultiStageChecker.cpp 22 | TestWeightChecker.cpp 23 | TestIndirectionChecker.cpp 24 | ) 25 | target_link_libraries(${executable} DawnValidator DawnUnittest gtest gtest_main) 26 | target_add_dawn_standard_props(${executable}) 27 | gtest_discover_tests(${executable} TEST_PREFIX "Dawn::Unit::Validator::" DISCOVERY_TIMEOUT 30) 28 | file(COPY input DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 29 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_do_method_invalid_expr_if_cond.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage field_a, field_b; 25 | 26 | Do { 27 | vertical_region(k_start, k_end) { 28 | if(double a = 5.0) // EXPECTED_ERROR: invalid expression for condition in if-statement 29 | field_a = field_b; 30 | } 31 | } 32 | }; 33 | 34 | int main() {} 35 | -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/test_compute_maximum_extent_02.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | 19 | using namespace gtclang::dsl; 20 | 21 | stencil compute_extent_test_stencil { 22 | storage u, out; 23 | 24 | Do { 25 | vertical_region(k_start, k_end) { 26 | out = u[i + 1]; 27 | out += u[j - 1]; 28 | if(out == 1) { 29 | // out *= u[k+2]+2.4; 30 | // out -= u[k-1]; 31 | out = 2; 32 | } 33 | } 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_interval_custom_not_constexpr.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | int a = 5; 24 | interval k_flat = k_start + a; // EXPECTED_ERROR: offset of built-in interval 'k_start' is not a constant expression 25 | 26 | stencil Test { 27 | storage a; 28 | 29 | Do { 30 | vertical_region(k_flat, k_end) 31 | a = 0.0; 32 | } 33 | }; 34 | 35 | int main() {} 36 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_invalid_pragma.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | #pragma gtclang no_codegen // EXPECTED_ERROR: statement after '#pragma gtclang no_codegen' must be a stencil declaration 24 | double a; 25 | 26 | stencil Test { 27 | storage a; 28 | 29 | Do { 30 | vertical_region(k_start, k_end) { 31 | a = 0.0; 32 | } 33 | } 34 | }; 35 | 36 | int main() {} 37 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/IIRSerializer/StencilFnCallTest.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fwrite-iir -fno-codegen 18 | // EXPECTED_FILE: OUTPUT:StencilFnCallTest.iir REFERENCE:%filename%_ref.iir IGNORE:filename 19 | 20 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 21 | 22 | using namespace gtclang::dsl; 23 | 24 | stencil_function fn { 25 | storage a; 26 | Do { return a; } 27 | }; 28 | 29 | stencil StencilFnCallTest { 30 | storage a, b; 31 | 32 | Do { vertical_region(k_start, k_end) b = fn(a); } 33 | }; 34 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/Unreachable.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/Support/Unreachable.h" 16 | 17 | #include 18 | 19 | namespace dawn { 20 | 21 | DAWN_ATTRIBUTE_NORETURN void dawn_unreachable_internal(const char* msg, const char* file, 22 | unsigned line) { 23 | std::cerr << "FATAL ERROR: UNREACHABLE executed : "; 24 | if(msg) 25 | std::cerr << "\"" << msg << "\""; 26 | if(file) 27 | std::cerr << " at " << file << ":" << line; 28 | std::cerr << std::endl; 29 | std::abort(); 30 | 31 | #ifdef DAWN_BUILTIN_UNREACHABLE 32 | DAWN_BUILTIN_UNREACHABLE; 33 | #endif 34 | } 35 | 36 | } // namespace dawn 37 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Diagnostics/err_globals_invalid_default_value.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | struct foo {}; 24 | 25 | globals { 26 | foo a; // EXPECTED_ERROR: invalid type 'struct foo' of global variable 'a' 27 | }; 28 | 29 | stencil Test { 30 | storage in, out; 31 | 32 | Do { 33 | vertical_region(k_start, k_end) 34 | in = out; 35 | } 36 | }; 37 | 38 | int main() {} 39 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/boundary_condition.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===-------------------------------------------------------------------------------------------===// 16 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 17 | using namespace gtclang::dsl; 18 | 19 | stencil_function constant { 20 | storage a; 21 | Do { a = 10; } 22 | }; 23 | 24 | globals { double in_glob = 12; }; 25 | 26 | stencil split_stencil { 27 | storage in, out; 28 | 29 | boundary_condition(constant(), in); 30 | void Do() { 31 | vertical_region(k_start, k_end) { 32 | in = out[j + 1]; 33 | out = in[j - 1] + in_glob; 34 | } 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/hori_diff_stencil_02.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | 19 | using namespace gtclang::dsl; 20 | 21 | stencil_function laplacian { 22 | storage phi; 23 | 24 | Do { return phi(i + 1) + phi(i - 1) + phi(j + 1) + phi(j - 1) - 4.0 * phi; } 25 | }; 26 | 27 | stencil hori_diff_stencil { 28 | storage u, out; 29 | var lap; 30 | Do { 31 | vertical_region(k_start, k_end) { 32 | lap = laplacian(u); 33 | out = laplacian(lap); 34 | } 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/kcache_fill_kparallel.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | using namespace gtclang::dsl; 19 | 20 | stencil kcache_fill_kparallel { 21 | storage in, out; 22 | 23 | Do { 24 | vertical_region(k_start, k_start + 1) { 25 | out = in + in[k + 1]; 26 | } 27 | vertical_region(k_start + 1, k_end - 1) { 28 | out = in + in[k - 1] + in[k + 1]; 29 | } 30 | vertical_region(k_end - 1, k_end) { 31 | out = in + in[k - 1]; 32 | } 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /dawn/src/dawn/AST/LocationType.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include 18 | 19 | namespace dawn { 20 | namespace ast { 21 | 22 | enum class LocationType { Cells, Edges, Vertices }; 23 | using NeighborChain = std::vector; 24 | 25 | } // namespace ast 26 | } // namespace dawn 27 | 28 | namespace std { 29 | template <> 30 | struct hash> { 31 | size_t operator()(const std::vector& vec) const { 32 | std::size_t seed = vec.size(); 33 | for(auto& i : vec) { 34 | seed ^= (int)i + 0x9e3779b9 + (seed << 6) + (seed >> 2); 35 | } 36 | return seed; 37 | } 38 | }; 39 | } // namespace std -------------------------------------------------------------------------------- /gtclang/src/gtclang/Support/MathExtras.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #pragma once 18 | 19 | #include 20 | 21 | namespace gtclang { 22 | 23 | /// @brief Returns the next power of two (in 64-bits) that is strictly greater than A. Returns zero 24 | /// on overflow. 25 | /// 26 | /// @ingroup support 27 | inline std::uint64_t nextPowerOf2(std::uint64_t A) { 28 | A |= (A >> 1); 29 | A |= (A >> 2); 30 | A |= (A >> 4); 31 | A |= (A >> 8); 32 | A |= (A >> 16); 33 | A |= (A >> 32); 34 | return A + 1; 35 | } 36 | 37 | } // namespace gtclang 38 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/IIRSerializer/AccessTest.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fwrite-iir -fno-codegen 18 | // EXPECTED_FILE: OUTPUT:AccessTest.iir REFERENCE:%filename%_ref.iir IGNORE:filename 19 | 20 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 21 | 22 | using namespace gtclang::dsl; 23 | 24 | stencil AccessTest { 25 | storage a, b; 26 | 27 | Do { 28 | vertical_region(k_start, k_end) b = 29 | a[i + 1] + a[i - 1] + a[j + 1] + a[j - 1] + a[k - 1] + a[j + 1, k + 1]; 30 | } 31 | }; 32 | 33 | int main() {} 34 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/kparallel_solver.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | 19 | using namespace gtclang::dsl; 20 | 21 | stencil kparallel_solver { 22 | storage d, a, b, c; 23 | 24 | Do { 25 | vertical_region(k_start, k_start) { 26 | c = a[k + 1]; 27 | d = b * 2.1; 28 | } 29 | vertical_region(k_start + 1, k_end) { 30 | c = a[k - 1]; 31 | d = b * 2.0 - 1; 32 | } 33 | vertical_region(k_end - 1, k_start) { 34 | d -= d + a; 35 | } 36 | } 37 | }; 38 | -------------------------------------------------------------------------------- /dawn/src/dawn/CodeGen/Options.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | #include 17 | 18 | namespace dawn { 19 | namespace codegen { 20 | 21 | /// @brief CodeGen backends 22 | enum class Backend { GridTools, CXXNaive, CXXNaiveIco, CUDAIco, CUDA, CXXOpt }; 23 | 24 | /// @brief Options for all codegen backends combined. 25 | /// 26 | /// These have to be disjoint from the options for other dawn and gtc-parse components. 27 | struct Options { 28 | #define OPT(TYPE, NAME, DEFAULT_VALUE, OPTION, OPTION_SHORT, HELP, VALUE_NAME, HAS_VALUE, F_GROUP) \ 29 | TYPE NAME = DEFAULT_VALUE; 30 | #include "dawn/CodeGen/Options.inc" 31 | #undef OPT 32 | }; 33 | 34 | } // namespace codegen 35 | } // namespace dawn 36 | -------------------------------------------------------------------------------- /dawn/src/dawn/Support/SourceLocation.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #include "dawn/Support/SourceLocation.h" 16 | 17 | #include 18 | 19 | namespace dawn { 20 | 21 | SourceLocation::operator std::string() const { 22 | return std::to_string(Line) + ":" + std::to_string(Column); 23 | } 24 | 25 | std::ostream& operator<<(std::ostream& os, const SourceLocation& sourceLocation) { 26 | return os << static_cast(sourceLocation); 27 | } 28 | 29 | bool operator==(const SourceLocation& a, const SourceLocation& b) { 30 | return a.Line == b.Line && a.Column == b.Column; 31 | } 32 | bool operator!=(const SourceLocation& a, const SourceLocation& b) { return !(a == b); } 33 | 34 | } // namespace dawn 35 | -------------------------------------------------------------------------------- /dawn/src/driver-includes/unstructured_domain.hpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ 3 | // | | 4 | // __| | __ ___ ___ ___ 5 | // / _` |/ _` \ \ /\ / / '_ | 6 | // | (_| | (_| |\ V V /| | | | 7 | // \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 8 | // 9 | // 10 | // This file is distributed under the MIT License (MIT). 11 | // See LICENSE.txt for details. 12 | // 13 | //===------------------------------------------------------------------------------------------===// 14 | 15 | #pragma once 16 | 17 | #include 18 | 19 | #include "unstructured_interface.hpp" 20 | 21 | namespace dawn { 22 | 23 | enum class UnstructuredSubdomain { LateralBoundary = 0, Nudging=1000, Interior=2000, Halo=3000, End=4000}; 24 | 25 | class unstructured_domain { 26 | using KeyType = std::tuple<::dawn::LocationType, UnstructuredSubdomain, int>; 27 | std::map subdomainToIndex_; 28 | 29 | public: 30 | int operator()(KeyType&& key) const { return subdomainToIndex_.at(key); } 31 | void set_splitter_index(KeyType&& key, int index) { 32 | subdomainToIndex_[key] = index; 33 | } 34 | }; 35 | 36 | } // namespace dawn -------------------------------------------------------------------------------- /dawn/test/unit-test/dawn/Optimizer/samples/test_compute_read_access_interval_02.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | 19 | using namespace gtclang::dsl; 20 | 21 | stencil stencil { 22 | storage b, a; 23 | var tmp; 24 | 25 | Do { 26 | vertical_region(k_start + 2, k_end - 4) { tmp = tmp[k - 2]; } 27 | vertical_region(k_start, k_start) { b = tmp[i - 2]; } 28 | vertical_region(k_start + 1, k_end - 4) { b = tmp[k - 1, i + 1]; } 29 | vertical_region(k_end - 3, k_end) { b = tmp[k + 1, i + 1] + a; } 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/boundary_condition_2.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===-------------------------------------------------------------------------------------------===// 16 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 17 | using namespace gtclang::dsl; 18 | 19 | stencil_function to_field { 20 | storage a, b; 21 | Do { a = b; } 22 | }; 23 | 24 | globals { double in_glob = 12; }; 25 | 26 | stencil split_stencil { 27 | storage in, out, bcfield; 28 | 29 | boundary_condition(to_field(), in, bcfield); 30 | void Do() { 31 | vertical_region(k_start, k_end) { 32 | in = out[j + 1]; 33 | out = in[j - 1] + in_glob; 34 | } 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /dawn/src/dawn/AST/proto/AST/enums.proto: -------------------------------------------------------------------------------- 1 | /*===------------------------------------------------------------------------------*- 2 | proto -*-===*\ 3 | * _ 4 | * | | 5 | * __| | __ ___ ___ ___ 6 | * / _` |/ _` \ \ /\ / / '_ | 7 | * | (_| | (_| |\ V V /| | | | 8 | * \__,_|\__,_| \_/\_/ |_| |_| - Compiler Toolchain 9 | * 10 | * 11 | * This file is distributed under the MIT License (MIT). 12 | * See LICENSE.txt for details. 13 | * 14 | \*===------------------------------------------------------------------------------------------===*/ 15 | 16 | // @defgroup ast_proto AST protobuf 17 | // @brief This is a AST description for Google's protocol buffers library 18 | // Protobuf. 19 | 20 | syntax = "proto3"; 21 | package dawn.proto.ast; 22 | 23 | // Don't use the 0 value, because it's the default and doesn't get serialized, 24 | // see https://developers.google.com/protocol-buffers/docs/proto3#default 25 | enum GridType { 26 | GridTypeUnknown = 0; // don't use! 27 | Unstructured = 1; 28 | Cartesian = 2; 29 | } 30 | 31 | enum LocationType { 32 | LocationTypeUnknown = 0; 33 | Vertex = 1; 34 | Cell = 2; 35 | Edge = 3; 36 | } 37 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Accesses/Simple02.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen -freport-accesses 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage field_a, field_b; 25 | 26 | Do() { 27 | vertical_region(k_start, k_end) { 28 | if(field_a > 0.0) // EXPECTED_ACCESSES: W:field_a:<[,(0,0)]> %and% R:field_b:<[(1,1),(-1,-1),(0,0)]> 29 | field_a = field_b(i + 1, j - 1); 30 | } 31 | } 32 | }; 33 | 34 | int main() {} 35 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/Accesses/Simple04.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | // RUN: %gtclang% %file% -fno-codegen -freport-accesses 18 | 19 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 20 | 21 | using namespace gtclang::dsl; 22 | 23 | stencil Test { 24 | storage field_a, field_b; 25 | 26 | Do { 27 | vertical_region(k_start, k_end) 28 | field_b = field_a(i + 1, j + 1) > 0.0 ? field_a(i - 1) : field_a(j - 1); // EXPECTED_ACCESSES: W:field_b:<[,(0,0)]> %and% R:field_a:<[(-1,1),(-1,1),(0,0)]> 29 | } 30 | }; 31 | 32 | int main() {} 33 | -------------------------------------------------------------------------------- /dawn/README.md: -------------------------------------------------------------------------------- 1 | # Dawn [![](https://badge.fury.io/gh/MeteoSwiss-APN%2Fdawn.svg)](http://semver.org) [![](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![](https://img.shields.io/badge/documentation-link-blue.svg)](https://MeteoSwiss-APN.github.io/dawn) 2 | 3 | **Dawn** is the back end of a toolchain, performing optimizations and code generation to a number of different back ends, for developing high-level DSLs for geophysical fluid dynamics models. See the top level `README.md` for a detailed description. 4 | 5 | ## Building 6 | 7 | Dawn can be built individually from the multi-project build. This follows the same procedure outlined in the [root README.md](https://github.com/MeteoSwiss-APN/dawn/blob/master/README.md): 8 | 9 | ```bash 10 | $ git clone https://github.com/MeteoSwiss-APN/dawn.git && cd $_ 11 | $ cd dawn 12 | $ mkdir {build,install} 13 | $ cmake -S . -B build -DBUILD_TESTING=ON -DCMAKE_PREFIX_PATH=install 14 | $ cmake --build build --target install 15 | ``` 16 | 17 | The additional flags affecting the build are 18 | 19 | * `-DBUILD_TESTING=ON|OFF` to enable or disable tests. 20 | * `-DBUILD_EXAMPLES=ON|PFF` to enable or disable building examples. 21 | 22 | ## Testing 23 | 24 | Dawn unit and integration tests are launched via ctest: 25 | 26 | ``` 27 | $ cd build 28 | $ ctest 29 | ``` 30 | -------------------------------------------------------------------------------- /gtclang/src/gtclang/Support/Logger.h: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "dawn/Support/Logger.h" 18 | 19 | #ifndef GTCLANG_SUPPORT_LOGGER_H 20 | #define GTCLANG_SUPPORT_LOGGER_H 21 | 22 | namespace gtclang { 23 | 24 | /// @brief Make a Logger::MessageFormatter for GTClang 25 | dawn::Logger::MessageFormatter makeGTClangMessageFormatter(const std::string& prefix); 26 | 27 | /// @brief Make a Logger::DiagnosticFormatter for GTClang 28 | dawn::Logger::DiagnosticFormatter makeGTClangDiagnosticFormatter(const std::string& prefix); 29 | 30 | } // namespace gtclang 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /gtclang/test/integration-test/CodeGen/globals_stencil.cpp: -------------------------------------------------------------------------------- 1 | //===--------------------------------------------------------------------------------*- C++ -*-===// 2 | // _ _ 3 | // | | | | 4 | // __ _| |_ ___| | __ _ _ __ __ _ 5 | // / _` | __/ __| |/ _` | '_ \ / _` | 6 | // | (_| | || (__| | (_| | | | | (_| | 7 | // \__, |\__\___|_|\__,_|_| |_|\__, | - GridTools Clang DSL 8 | // __/ | __/ | 9 | // |___/ |___/ 10 | // 11 | // 12 | // This file is distributed under the MIT License (MIT). 13 | // See LICENSE.txt for details. 14 | // 15 | //===------------------------------------------------------------------------------------------===// 16 | 17 | #include "gtclang_dsl_defs/gtclang_dsl.hpp" 18 | 19 | using namespace gtclang::dsl; 20 | 21 | globals { 22 | int var_runtime; // == 1 23 | double var_default = 2; // == 2 24 | bool var_compiletime; // == true 25 | }; 26 | 27 | stencil globals_stencil { 28 | storage in, out; 29 | 30 | Do { 31 | vertical_region(k_start, k_end) { 32 | if(var_compiletime) // true 33 | out = in + var_runtime + var_default; // 1 + 2 34 | } 35 | } 36 | }; 37 | --------------------------------------------------------------------------------