[PATCH] D69091: [Sema] #pragma clang transform
Meinersbur updated this revision to Diff 234659. Meinersbur added a comment. - Rework TransformedTree a bit Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69091/new/ https://reviews.llvm.org/D69091 Files: clang/include/clang/AST/ASTNodeTraverser.h clang/include/clang/AST/ASTTypeTraits.h clang/include/clang/AST/JSONNodeDumper.h clang/include/clang/AST/RecursiveASTVisitor.h clang/include/clang/AST/StmtTransform.h clang/include/clang/AST/TextNodeDumper.h clang/include/clang/Analysis/AnalysisTransform.h clang/include/clang/Analysis/TransformedTree.h clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Basic/StmtNodes.td clang/include/clang/Sema/Sema.h clang/include/clang/Sema/SemaTransform.h clang/lib/AST/ASTTypeTraits.cpp clang/lib/AST/JSONNodeDumper.cpp clang/lib/AST/StmtPrinter.cpp clang/lib/AST/StmtProfile.cpp clang/lib/AST/StmtTransform.cpp clang/lib/AST/TextNodeDumper.cpp clang/lib/CodeGen/CGStmt.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaTransform.cpp clang/lib/Sema/TreeTransform.h clang/lib/Serialization/ASTReaderStmt.cpp clang/lib/Serialization/ASTWriterStmt.cpp clang/test/AST/ast-dump-transform-unroll.c clang/test/AST/ast-dump-transform-unrollandjam.c clang/test/AST/ast-print-pragma-transform-distribute.cpp clang/test/AST/ast-print-pragma-transform-interleave.cpp clang/test/AST/ast-print-pragma-transform-unroll.cpp clang/test/AST/ast-print-pragma-transform-unrollandjam.cpp clang/test/AST/ast-print-pragma-transform-vectorize.cpp clang/test/SemaCXX/pragma-transform-interleave.cpp clang/test/SemaCXX/pragma-transform-legacymix.cpp clang/test/SemaCXX/pragma-transform-unroll.cpp clang/test/SemaCXX/pragma-transform-unrollandjam.cpp clang/test/SemaCXX/pragma-transform-vectorize.cpp clang/test/SemaCXX/pragma-transform-wrongorder.cpp clang/tools/libclang/CXCursor.cpp Index: clang/tools/libclang/CXCursor.cpp === --- clang/tools/libclang/CXCursor.cpp +++ clang/tools/libclang/CXCursor.cpp @@ -735,6 +735,9 @@ break; case Stmt::BuiltinBitCastExprClass: K = CXCursor_BuiltinBitCastExpr; +break; + case Stmt::TransformExecutableDirectiveClass: +llvm_unreachable("not implemented"); } CXCursor C = { K, 0, { Parent, S, TU } }; Index: clang/test/SemaCXX/pragma-transform-wrongorder.cpp === --- /dev/null +++ clang/test/SemaCXX/pragma-transform-wrongorder.cpp @@ -0,0 +1,18 @@ +// RUN: %clang_cc1 -std=c++11 -fexperimental-transform-pragma -fsyntax-only -verify %s + +void wrongorder(int *List, int Length, int Value) { + +/* expected-warning@+1 {{the LLVM pass structure currently is not able to apply the transformations in this order}} */ +#pragma clang transform distribute +#pragma clang transform vectorize + for (int i = 0; i < 8; i++) +List[i] = Value; + +/* expected-warning@+1 {{the LLVM pass structure currently is not able to apply the transformations in this order}} */ +#pragma clang transform vectorize +#pragma clang transform unrollandjam + for (int i = 0; i < 8; i++) +for (int j = 0; j < 8; j++) + List[i] += j; + +} Index: clang/test/SemaCXX/pragma-transform-vectorize.cpp === --- /dev/null +++ clang/test/SemaCXX/pragma-transform-vectorize.cpp @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -std=c++11 -fexperimental-transform-pragma -fsyntax-only -verify %s + +void vectorize(int *List, int Length, int Value) { +/* expected-error@+1 {{the width clause can be specified at most once}} */ +#pragma clang transform vectorize width(4) width(4) + for (int i = 0; i < Length; i++) + List[i] = Value; + +/* expected-error@+1 {{clause argument must me at least 2}} */ +#pragma clang transform vectorize width(-42) + for (int i = 0; i < Length; i++) +List[i] = Value; + +} Index: clang/test/SemaCXX/pragma-transform-unrollandjam.cpp === --- /dev/null +++ clang/test/SemaCXX/pragma-transform-unrollandjam.cpp @@ -0,0 +1,30 @@ +// RUN: %clang_cc1 -std=c++11 -fexperimental-transform-pragma -fsyntax-only -verify %s + +void unrollandjam(int *List, int Length, int Value) { +/* expected-error@+1 {{the partial clause can be specified at most once}} */ +#pragma clang transform unrollandjam partial(4) partial(4) + for (int i = 0; i < Length; i++) +for (int j = 0; j < Length; j++) + List[i] += j*Value; + +/* expected-error@+1 {{unroll-and-jam requires exactly one nested loop}} */ +#pragma clang transform unrollandjam + for (int i = 0; i < Length; i++) + List[i] = Value; + +/* expected-error@+1 {{unroll-and-jam requires exactly one nested loop}} */ +#pragma clang transform unrollandjam + for (int i = 0; i < Length; i++) { +for (int j = 0; j < Length; j++) + List[i] += j*Value; +
[PATCH] D69091: [Sema] #pragma clang transform
Meinersbur updated this revision to Diff 233707. Meinersbur added a comment. - Remove handling of LoopHints (#pragma clang loop) and OpenMP (#pragma omp simd) to reducethe size of the patches. Compatibility with OpenMP is still a goal (to implement the upcoming OpenMP loop transformations such as #pragma omp tile), but for now they are handled by separate code paths. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69091/new/ https://reviews.llvm.org/D69091 Files: clang/include/clang/AST/ASTNodeTraverser.h clang/include/clang/AST/ASTTypeTraits.h clang/include/clang/AST/JSONNodeDumper.h clang/include/clang/AST/RecursiveASTVisitor.h clang/include/clang/AST/StmtTransform.h clang/include/clang/AST/TextNodeDumper.h clang/include/clang/Analysis/AnalysisTransform.h clang/include/clang/Analysis/TransformedTree.h clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Basic/StmtNodes.td clang/include/clang/Sema/Sema.h clang/include/clang/Sema/SemaTransform.h clang/lib/AST/ASTTypeTraits.cpp clang/lib/AST/JSONNodeDumper.cpp clang/lib/AST/StmtPrinter.cpp clang/lib/AST/StmtProfile.cpp clang/lib/AST/StmtTransform.cpp clang/lib/AST/TextNodeDumper.cpp clang/lib/CodeGen/CGStmt.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaTransform.cpp clang/lib/Sema/TreeTransform.h clang/lib/Serialization/ASTReaderStmt.cpp clang/lib/Serialization/ASTWriterStmt.cpp clang/test/AST/ast-dump-transform-unroll.c clang/test/AST/ast-dump-transform-unrollandjam.c clang/test/AST/ast-print-pragma-transform-distribute.cpp clang/test/AST/ast-print-pragma-transform-interleave.cpp clang/test/AST/ast-print-pragma-transform-unroll.cpp clang/test/AST/ast-print-pragma-transform-unrollandjam.cpp clang/test/AST/ast-print-pragma-transform-vectorize.cpp clang/test/SemaCXX/pragma-transform-interleave.cpp clang/test/SemaCXX/pragma-transform-legacymix.cpp clang/test/SemaCXX/pragma-transform-unroll.cpp clang/test/SemaCXX/pragma-transform-unrollandjam.cpp clang/test/SemaCXX/pragma-transform-vectorize.cpp clang/test/SemaCXX/pragma-transform-wrongorder.cpp clang/tools/libclang/CXCursor.cpp Index: clang/tools/libclang/CXCursor.cpp === --- clang/tools/libclang/CXCursor.cpp +++ clang/tools/libclang/CXCursor.cpp @@ -735,6 +735,9 @@ break; case Stmt::BuiltinBitCastExprClass: K = CXCursor_BuiltinBitCastExpr; +break; + case Stmt::TransformExecutableDirectiveClass: +llvm_unreachable("not implemented"); } CXCursor C = { K, 0, { Parent, S, TU } }; Index: clang/test/SemaCXX/pragma-transform-wrongorder.cpp === --- /dev/null +++ clang/test/SemaCXX/pragma-transform-wrongorder.cpp @@ -0,0 +1,18 @@ +// RUN: %clang_cc1 -std=c++11 -fexperimental-transform-pragma -fsyntax-only -verify %s + +void wrongorder(int *List, int Length, int Value) { + +/* expected-warning@+1 {{the LLVM pass structure currently is not able to apply the transformations in this order}} */ +#pragma clang transform distribute +#pragma clang transform vectorize + for (int i = 0; i < 8; i++) +List[i] = Value; + +/* expected-warning@+1 {{the LLVM pass structure currently is not able to apply the transformations in this order}} */ +#pragma clang transform vectorize +#pragma clang transform unrollandjam + for (int i = 0; i < 8; i++) +for (int j = 0; j < 8; j++) + List[i] += j; + +} Index: clang/test/SemaCXX/pragma-transform-vectorize.cpp === --- /dev/null +++ clang/test/SemaCXX/pragma-transform-vectorize.cpp @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -std=c++11 -fexperimental-transform-pragma -fsyntax-only -verify %s + +void vectorize(int *List, int Length, int Value) { +/* expected-error@+1 {{the width clause can be specified at most once}} */ +#pragma clang transform vectorize width(4) width(4) + for (int i = 0; i < Length; i++) + List[i] = Value; + +/* expected-error@+1 {{clause argument must me at least 2}} */ +#pragma clang transform vectorize width(-42) + for (int i = 0; i < Length; i++) +List[i] = Value; + +} Index: clang/test/SemaCXX/pragma-transform-unrollandjam.cpp === --- /dev/null +++ clang/test/SemaCXX/pragma-transform-unrollandjam.cpp @@ -0,0 +1,30 @@ +// RUN: %clang_cc1 -std=c++11 -fexperimental-transform-pragma -fsyntax-only -verify %s + +void unrollandjam(int *List, int Length, int Value) { +/* expected-error@+1 {{the partial clause can be specified at most once}} */ +#pragma clang transform unrollandjam partial(4) partial(4) + for (int i = 0; i < Length; i++) +for (int j = 0; j < Length; j++) + List[i] += j*Value; + +/* expected-error@+1 {{unroll-and-jam requires exactly one nested loop}} */ +#pragma clang transform unrollandjam + for (int i =
[PATCH] D69091: [Sema] #pragma clang transform
Meinersbur added a comment. ping Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69091/new/ https://reviews.llvm.org/D69091 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits