summaryrefslogtreecommitdiffstats
path: root/clang/test/OpenMP/for_codegen.cpp
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2019-10-01 16:19:10 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2019-10-01 16:19:10 +0000
commit658ad4d4d2f1a76137f56c48cd09a0d056495e64 (patch)
treeb6857d6f46cee8cc0172cf34403bf9c3d5e7888a /clang/test/OpenMP/for_codegen.cpp
parent0bb825d20880003c50c9c1a5985db6bc54e57b26 (diff)
downloadbcm5719-llvm-658ad4d4d2f1a76137f56c48cd09a0d056495e64.tar.gz
bcm5719-llvm-658ad4d4d2f1a76137f56c48cd09a0d056495e64.zip
[OPENMP]Fix PR43516: Compiler crash with collapse(2) on non-rectangular
loop. Missed check if the condition is also dependent when building final expressions for the collapsed loop directives. llvm-svn: 373348
Diffstat (limited to 'clang/test/OpenMP/for_codegen.cpp')
-rw-r--r--clang/test/OpenMP/for_codegen.cpp33
1 files changed, 16 insertions, 17 deletions
diff --git a/clang/test/OpenMP/for_codegen.cpp b/clang/test/OpenMP/for_codegen.cpp
index 756d6ccebf4..925235ef960 100644
--- a/clang/test/OpenMP/for_codegen.cpp
+++ b/clang/test/OpenMP/for_codegen.cpp
@@ -89,23 +89,6 @@ void loop_with_counter_collapse() {
// CHECK: [[NUM_ITERS_VAL:%.+]] = sub nsw i64 [[MUL]], 1
// CHECK: store i64 [[NUM_ITERS_VAL]], i64* [[NUM_ITERS:%.+]],
- // Initialization
- // CHECK: store i32 0, i32* [[I:%.+]],
- // CHECK: [[I_INIT:%.+]] = load i32, i32* [[I]],
- // CHECK: store i32 [[I_INIT]], i32* [[J:%.+]],
-
- // LIFETIME: call void @llvm.lifetime.end
- // LIFETIME: call void @llvm.lifetime.end
-
- // Precondition for j counter
- // CHECK: store i32 0, i32* [[TMP_I:%.+]],
- // CHECK: [[J_LB_VAL:%.+]] = load i32, i32* [[TMP_I]],
- // CHECK: [[I_VAL:%.+]] = load i32, i32* [[TMP_I]],
- // CHECK: [[J_UB_VAL:%.+]] = add nsw i32 4, [[I_VAL]]
- // CHECK: [[CMP:%.+]] = icmp slt i32 [[J_LB_VAL]], [[J_UB_VAL]]
- // CHECK: br i1 [[CMP]], label %[[THEN:[^,]+]], label %[[ELSE:[^,]+]]
-
- // CHECK: [[THEN]]:
// CHECK: store i64 0, i64* [[LB:%.+]],
// CHECK: [[NUM_ITERS_VAL:%.+]] = load i64, i64* [[NUM_ITERS]],
// CHECK: store i64 [[NUM_ITERS_VAL]], i64* [[UB:%.+]],
@@ -633,6 +616,22 @@ void for_with_references() {
k = cnt;
}
+// CHECK-LABEL: for_with_references_dep_cond
+void for_with_references_dep_cond() {
+// CHECK: [[I:%.+]] = alloca i8,
+// CHECK: [[CNT:%.+]] = alloca i8*,
+// CHECK: [[CNT_PRIV:%.+]] = alloca i8,
+// CHECK: call void @__kmpc_for_static_init_8(
+// CHECK-NOT: load i8, i8* [[CNT]],
+// CHECK: call void @__kmpc_for_static_fini(
+ char i = 0;
+ char &cnt = i;
+#pragma omp for collapse(2)
+ for (cnt = 0; cnt < 2; ++cnt)
+ for (int j = 0; j < 4 + cnt; j++)
+ k = cnt;
+}
+
struct Bool {
Bool(bool b) : b(b) {}
operator bool() const { return b; }
OpenPOWER on IntegriCloud