[PATCH] D54441: [OPENMP] Support relational-op !- (not-equal) as one of the canonical forms of random access iterator

2019-08-22 Thread Chi Chun Chen via Phabricator via cfe-commits
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

2018-11-21 Thread Phabricator via Phabricator via cfe-commits
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

2018-11-16 Thread Anh Tuyen Tran via Phabricator via cfe-commits
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

2018-11-15 Thread Kelvin Li via Phabricator via cfe-commits
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

2018-11-12 Thread Alexey Bataev via Phabricator via cfe-commits
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

2018-11-12 Thread Anh Tuyen Tran via Phabricator via cfe-commits
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