[clang] 1c92448 - [OPENMP]Fix PR45439: `omp for collapse(2) ordered(2)` generates invalid

Alexey Bataev via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 6 09:18:14 PDT 2020


Author: Alexey Bataev
Date: 2020-04-06T12:07:43-04:00
New Revision: 1c924486564461810903603542ffc2d7db204dde

URL: https://github.com/llvm/llvm-project/commit/1c924486564461810903603542ffc2d7db204dde
DIFF: https://github.com/llvm/llvm-project/commit/1c924486564461810903603542ffc2d7db204dde.diff

LOG: [OPENMP]Fix PR45439: `omp for collapse(2) ordered(2)` generates invalid
IR.

Fixed a crash because of the not quite correct casting of the value of
iterations.

Added: 
    

Modified: 
    clang/lib/CodeGen/CGOpenMPRuntime.cpp
    clang/test/OpenMP/ordered_doacross_codegen.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 6642851a56bc..737349ea5453 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -11206,10 +11206,9 @@ void CGOpenMPRuntime::emitDoacrossInit(CodeGenFunction &CGF,
     // dims.upper = num_iterations;
     LValue UpperLVal = CGF.EmitLValueForField(
         DimsLVal, *std::next(RD->field_begin(), UpperFD));
-    llvm::Value *NumIterVal =
-        CGF.EmitScalarConversion(CGF.EmitScalarExpr(NumIterations[I]),
-                                 D.getNumIterations()->getType(), Int64Ty,
-                                 D.getNumIterations()->getExprLoc());
+    llvm::Value *NumIterVal = CGF.EmitScalarConversion(
+        CGF.EmitScalarExpr(NumIterations[I]), NumIterations[I]->getType(),
+        Int64Ty, NumIterations[I]->getExprLoc());
     CGF.EmitStoreOfScalar(NumIterVal, UpperLVal);
     // dims.stride = 1;
     LValue StrideLVal = CGF.EmitLValueForField(

diff  --git a/clang/test/OpenMP/ordered_doacross_codegen.cpp b/clang/test/OpenMP/ordered_doacross_codegen.cpp
index 836f938fbce6..e30e2d557cfd 100644
--- a/clang/test/OpenMP/ordered_doacross_codegen.cpp
+++ b/clang/test/OpenMP/ordered_doacross_codegen.cpp
@@ -25,6 +25,12 @@ void bar() {
   for (i = 0; i < n; ++i)
   for (j = 0; j < n; ++j)
     a[i] = b[i] + 1;
+// CHECK: call void @__kmpc_doacross_init(
+// CHECK: call void @__kmpc_doacross_fini(
+ #pragma omp for collapse(2) ordered(2)
+  for (int i = 0; i < n; i++)
+    for (int j = 0; j < n; j++)
+      ;
 }
 
 // CHECK-LABEL: @main()


        


More information about the cfe-commits mailing list