[clang] [CIR][OpenMP] Emit #pragma omp for as omp.wsloop + omp.loop_nest (PR #181841)
Luca Parigi via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 2 04:20:49 PST 2026
================
@@ -0,0 +1,188 @@
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fopenmp -fclangir -emit-llvm %s -o %t-cir.ll
+// RUN: FileCheck %s --input-file %t-cir.ll
+
+void before(int);
+void during(int);
+void after(int);
+
+// Test simple for loop with constant bounds: for (int i = 0; i < 10; i++)
+void emit_simple_for() {
+ int j = 5;
+ before(j);
+#pragma omp parallel
+ {
+#pragma omp for
+ for (int i = 0; i < 10; i++) {
+ during(j);
+ }
+ }
+ after(j);
+}
+
+// CHECK-LABEL: define dso_local void @emit_simple_for()
+// CHECK: call void @before(i32 %{{.*}})
+// CHECK: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @{{.*}}, i32 1, ptr @emit_simple_for..omp_par, ptr %{{.*}})
+// CHECK: call void @after(i32 %{{.*}})
+
+// CHECK-LABEL: define internal void @emit_simple_for..omp_par(
+// CHECK: store i32 0, ptr %p.lowerbound
+// CHECK: store i32 9, ptr %p.upperbound
+// CHECK: store i32 1, ptr %p.stride
+// CHECK: call void @__kmpc_for_static_init_4u(
+// CHECK: omp_loop.body:
+// CHECK: omp.loop_nest.region:
+// CHECK: store i32 %{{.*}}, ptr %{{.*}}, align 4
+// CHECK: call void @during(i32 %{{.*}})
+// CHECK: call void @__kmpc_for_static_fini(
+// CHECK: call void @__kmpc_barrier(
----------------
Parigi wrote:
Ciao @bruteforceboy and thank you again for the feedback.
I’ve updated the commit: I modified the lowering file test, reducing it to only two cases, but ensuring they are fully covered with CHECK comments. I chose to keep only two cases because otherwise the file would have become quite long.
I understand that, when lowering, one would expect behavior similar to the original CodeGen. However, I only reused what was already in place for the lowering: I registered the Reconcile Conversion Pass to resolve the Unrealized Conversion Cast.
To achieve behavior closer to the original, we would likely need to work on the lowering passes themselves, which could be addressed in a separate PR.
Thank you,
Luca
https://github.com/llvm/llvm-project/pull/181841
More information about the cfe-commits
mailing list