[PATCH] D54441: [OPENMP] Support relational-op !- (not-equal) as one of the canonical forms of random access iterator
cchen added a comment. Herald added a reviewer: jdoerfert. Herald added a project: LLVM. Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D54441/new/ https://reviews.llvm.org/D54441 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D54441: [OPENMP] Support relational-op !- (not-equal) as one of the canonical forms of random access iterator
This revision was automatically updated to reflect the committed changes. Closed by commit rL347405: [OPENMP] Support relational-op != (not-equal) as one of the canonical (authored by kli, committed by ). Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D54441?vs=174394=174954#toc Repository: rL LLVM https://reviews.llvm.org/D54441 Files: cfe/trunk/lib/Sema/SemaOpenMP.cpp cfe/trunk/test/OpenMP/distribute_parallel_for_simd_loop_messages.cpp cfe/trunk/test/OpenMP/distribute_simd_loop_messages.cpp cfe/trunk/test/OpenMP/for_loop_messages.cpp cfe/trunk/test/OpenMP/for_simd_loop_messages.cpp cfe/trunk/test/OpenMP/parallel_for_ast_print.cpp cfe/trunk/test/OpenMP/parallel_for_codegen.cpp cfe/trunk/test/OpenMP/parallel_for_loop_messages.cpp cfe/trunk/test/OpenMP/parallel_for_simd_loop_messages.cpp cfe/trunk/test/OpenMP/simd_loop_messages.cpp cfe/trunk/test/OpenMP/target_parallel_for_loop_messages.cpp cfe/trunk/test/OpenMP/target_parallel_for_simd_loop_messages.cpp cfe/trunk/test/OpenMP/target_simd_loop_messages.cpp cfe/trunk/test/OpenMP/target_teams_distribute_loop_messages.cpp cfe/trunk/test/OpenMP/target_teams_distribute_parallel_for_loop_messages.cpp cfe/trunk/test/OpenMP/target_teams_distribute_parallel_for_simd_loop_messages.cpp cfe/trunk/test/OpenMP/target_teams_distribute_simd_loop_messages.cpp cfe/trunk/test/OpenMP/taskloop_loop_messages.cpp cfe/trunk/test/OpenMP/taskloop_simd_loop_messages.cpp cfe/trunk/test/OpenMP/teams_distribute_loop_messages.cpp cfe/trunk/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp cfe/trunk/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp cfe/trunk/test/OpenMP/teams_distribute_simd_loop_messages.cpp Index: cfe/trunk/lib/Sema/SemaOpenMP.cpp === --- cfe/trunk/lib/Sema/SemaOpenMP.cpp +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp @@ -3905,7 +3905,8 @@ /// Var <= UB /// UB > Var /// UB >= Var - bool TestIsLessOp = false; + /// This will have no value when the condition is != + llvm::Optional TestIsLessOp; /// This flag is true when condition is strict ( < or > ). bool TestIsStrictOp = false; /// This flag is true when step is subtracted on each iteration. @@ -3971,8 +3972,8 @@ /// Helper to set loop counter variable and its initializer. bool setLCDeclAndLB(ValueDecl *NewLCDecl, Expr *NewDeclRefExpr, Expr *NewLB); /// Helper to set upper bound. - bool setUB(Expr *NewUB, bool LessOp, bool StrictOp, SourceRange SR, - SourceLocation SL); + bool setUB(Expr *NewUB, llvm::Optional LessOp, bool StrictOp, + SourceRange SR, SourceLocation SL); /// Helper to set loop increment. bool setStep(Expr *NewStep, bool Subtract); }; @@ -4007,15 +4008,17 @@ return false; } -bool OpenMPIterationSpaceChecker::setUB(Expr *NewUB, bool LessOp, bool StrictOp, -SourceRange SR, SourceLocation SL) { +bool OpenMPIterationSpaceChecker::setUB(Expr *NewUB, llvm::Optional LessOp, +bool StrictOp, SourceRange SR, +SourceLocation SL) { // State consistency checking to ensure correct usage. assert(LCDecl != nullptr && LB != nullptr && UB == nullptr && Step == nullptr && !TestIsLessOp && !TestIsStrictOp); if (!NewUB) return true; UB = NewUB; - TestIsLessOp = LessOp; + if (LessOp) +TestIsLessOp = LessOp; TestIsStrictOp = StrictOp; ConditionSrcRange = SR; ConditionLoc = SL; @@ -4055,18 +4058,23 @@ bool IsConstPos = IsConstant && Result.isSigned() && (Subtract == Result.isNegative()); bool IsConstZero = IsConstant && !Result.getBoolValue(); + +// != with increment is treated as <; != with decrement is treated as > +if (!TestIsLessOp.hasValue()) + TestIsLessOp = IsConstPos || (IsUnsigned && !Subtract); if (UB && (IsConstZero || - (TestIsLessOp ? (IsConstNeg || (IsUnsigned && Subtract)) - : (IsConstPos || (IsUnsigned && !Subtract) { + (TestIsLessOp.getValue() ? + (IsConstNeg || (IsUnsigned && Subtract)) : + (IsConstPos || (IsUnsigned && !Subtract) { SemaRef.Diag(NewStep->getExprLoc(), diag::err_omp_loop_incr_not_compatible) - << LCDecl << TestIsLessOp << NewStep->getSourceRange(); + << LCDecl << TestIsLessOp.getValue() << NewStep->getSourceRange(); SemaRef.Diag(ConditionLoc, diag::note_omp_loop_cond_requres_compatible_incr) - << TestIsLessOp << ConditionSrcRange; + << TestIsLessOp.getValue() << ConditionSrcRange; return true; } -if (TestIsLessOp == Subtract) { +if (TestIsLessOp.getValue() == Subtract) { NewStep =
[PATCH] D54441: [OPENMP] Support relational-op !- (not-equal) as one of the canonical forms of random access iterator
anhtuyen updated this revision to Diff 174394. anhtuyen added a comment. 1. Correct the typo on line 3707 clang/lib/Sema/SemaOpenMP.cpp 2. Update the testcase: teams_distribute_simd_loop_messages.cpp https://reviews.llvm.org/D54441 Files: clang/lib/Sema/SemaOpenMP.cpp clang/test/OpenMP/distribute_parallel_for_simd_loop_messages.cpp clang/test/OpenMP/distribute_simd_loop_messages.cpp clang/test/OpenMP/for_loop_messages.cpp clang/test/OpenMP/for_simd_loop_messages.cpp clang/test/OpenMP/parallel_for_ast_print.cpp clang/test/OpenMP/parallel_for_codegen.cpp clang/test/OpenMP/parallel_for_loop_messages.cpp clang/test/OpenMP/parallel_for_simd_loop_messages.cpp clang/test/OpenMP/simd_loop_messages.cpp clang/test/OpenMP/target_parallel_for_loop_messages.cpp clang/test/OpenMP/target_parallel_for_simd_loop_messages.cpp clang/test/OpenMP/target_simd_loop_messages.cpp clang/test/OpenMP/target_teams_distribute_loop_messages.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_loop_messages.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_loop_messages.cpp clang/test/OpenMP/target_teams_distribute_simd_loop_messages.cpp clang/test/OpenMP/taskloop_loop_messages.cpp clang/test/OpenMP/taskloop_simd_loop_messages.cpp clang/test/OpenMP/teams_distribute_loop_messages.cpp clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp Index: clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp === --- clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp +++ clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp @@ -128,7 +128,7 @@ #pragma omp target #pragma omp teams distribute simd -// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} +// Ok for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp === --- clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp @@ -126,9 +126,9 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp target #pragma omp teams distribute parallel for simd -// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp === --- clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp @@ -126,9 +126,9 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp target #pragma omp teams distribute parallel for -// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/teams_distribute_loop_messages.cpp === --- clang/test/OpenMP/teams_distribute_loop_messages.cpp +++ clang/test/OpenMP/teams_distribute_loop_messages.cpp @@ -126,9 +126,9 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp target #pragma omp teams distribute -// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/taskloop_simd_loop_messages.cpp === --- clang/test/OpenMP/taskloop_simd_loop_messages.cpp +++ clang/test/OpenMP/taskloop_simd_loop_messages.cpp @@ -131,8 +131,8 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp parallel -// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} #pragma omp taskloop simd for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/taskloop_loop_messages.cpp === --- clang/test/OpenMP/taskloop_loop_messages.cpp +++ clang/test/OpenMP/taskloop_loop_messages.cpp @@ -131,8 +131,8 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp parallel -// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} #pragma omp taskloop for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/target_teams_distribute_simd_loop_messages.cpp
[PATCH] D54441: [OPENMP] Support relational-op !- (not-equal) as one of the canonical forms of random access iterator
kkwli0 added a comment. Please do a rebase. The test case teams_distribute_simd_loop_messages.cpp needs to update too. Comment at: clang/lib/Sema/SemaOpenMP.cpp:3707 /// UB >= Var - bool TestIsLessOp = false; + /// This will has no value when the condition is != + llvm::Optional TestIsLessOp; has -> have Repository: rC Clang https://reviews.llvm.org/D54441 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D54441: [OPENMP] Support relational-op !- (not-equal) as one of the canonical forms of random access iterator
ABataev accepted this revision. ABataev added a comment. This revision is now accepted and ready to land. LG Repository: rC Clang https://reviews.llvm.org/D54441 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D54441: [OPENMP] Support relational-op !- (not-equal) as one of the canonical forms of random access iterator
anhtuyen created this revision. anhtuyen added reviewers: ABataev, Hahnfeld, RaviNarayanaswamy, mikerice, kkwli0, hfinkel, gtbercea. anhtuyen added projects: OpenMP, clang. In OpenMP 4.5, only 4 relational operators are supported: <, <=, >, and >=. This work is to enable support for relational operator !- (not-equal) as one of the canonical forms. Repository: rC Clang https://reviews.llvm.org/D54441 Files: clang/lib/Sema/SemaOpenMP.cpp clang/test/OpenMP/distribute_parallel_for_simd_loop_messages.cpp clang/test/OpenMP/distribute_simd_loop_messages.cpp clang/test/OpenMP/for_loop_messages.cpp clang/test/OpenMP/for_simd_loop_messages.cpp clang/test/OpenMP/parallel_for_ast_print.cpp clang/test/OpenMP/parallel_for_codegen.cpp clang/test/OpenMP/parallel_for_loop_messages.cpp clang/test/OpenMP/parallel_for_simd_loop_messages.cpp clang/test/OpenMP/simd_loop_messages.cpp clang/test/OpenMP/target_parallel_for_loop_messages.cpp clang/test/OpenMP/target_parallel_for_simd_loop_messages.cpp clang/test/OpenMP/target_simd_loop_messages.cpp clang/test/OpenMP/target_teams_distribute_loop_messages.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_loop_messages.cpp clang/test/OpenMP/target_teams_distribute_parallel_for_simd_loop_messages.cpp clang/test/OpenMP/target_teams_distribute_simd_loop_messages.cpp clang/test/OpenMP/taskloop_loop_messages.cpp clang/test/OpenMP/taskloop_simd_loop_messages.cpp clang/test/OpenMP/teams_distribute_loop_messages.cpp clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp Index: clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp === --- clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp +++ clang/test/OpenMP/teams_distribute_simd_loop_messages.cpp @@ -132,9 +132,9 @@ for (int i = 0; i != 1; i++) c[i] = a[i]; +// Ok #pragma omp target #pragma omp teams distribute simd -// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} for (int i = 0;; i++) c[i] = a[i]; Index: clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp === --- clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_simd_loop_messages.cpp @@ -126,9 +126,9 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp target #pragma omp teams distribute parallel for simd -// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp === --- clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp +++ clang/test/OpenMP/teams_distribute_parallel_for_loop_messages.cpp @@ -126,9 +126,9 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp target #pragma omp teams distribute parallel for -// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/teams_distribute_loop_messages.cpp === --- clang/test/OpenMP/teams_distribute_loop_messages.cpp +++ clang/test/OpenMP/teams_distribute_loop_messages.cpp @@ -126,9 +126,9 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp target #pragma omp teams distribute -// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/taskloop_simd_loop_messages.cpp === --- clang/test/OpenMP/taskloop_simd_loop_messages.cpp +++ clang/test/OpenMP/taskloop_simd_loop_messages.cpp @@ -131,8 +131,8 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp parallel -// expected-error@+2 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', or '>=') of loop variable 'i'}} #pragma omp taskloop simd for (int i = 0; i != 1; i++) c[i] = a[i]; Index: clang/test/OpenMP/taskloop_loop_messages.cpp === --- clang/test/OpenMP/taskloop_loop_messages.cpp +++ clang/test/OpenMP/taskloop_loop_messages.cpp @@ -131,8 +131,8 @@ for (int i = 0; !!i; i++) c[i] = a[i]; +// Ok #pragma omp parallel -// expected-error@+2 {{condition of OpenMP for loop must be a