1- // RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s
2-
1+ // RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s --enable-var-scope
32
43
54llvm.func @tile_trivial_loop (%baseptr: !llvm.ptr , %tc: i32 , %ts: i32 ) -> () {
@@ -15,87 +14,81 @@ llvm.func @tile_trivial_loop(%baseptr: !llvm.ptr, %tc: i32, %ts: i32) -> () {
1514}
1615
1716
18- // CHECK: ; ModuleID = 'LLVMDialectModule'
19- // CHECK-NEXT: source_filename = "LLVMDialectModule"
20- // CHECK-EMPTY:
21- // CHECK-NEXT: define void @tile_trivial_loop(ptr %0, i32 %1, i32 %2) {
22- // CHECK-NEXT: br label %omp_omp.loop.preheader
23- // CHECK-EMPTY:
24- // CHECK-NEXT: omp_omp.loop.preheader: ; preds = %3
25- // CHECK-NEXT: %4 = udiv i32 %1, %2
26- // CHECK-NEXT: %5 = urem i32 %1, %2
27- // CHECK-NEXT: %6 = icmp ne i32 %5, 0
28- // CHECK-NEXT: %7 = zext i1 %6 to i32
29- // CHECK-NEXT: %omp_floor0.tripcount = add nuw i32 %4, %7
30- // CHECK-NEXT: br label %omp_floor0.preheader
31- // CHECK-EMPTY:
32- // CHECK-NEXT: omp_floor0.preheader: ; preds = %omp_omp.loop.preheader
33- // CHECK-NEXT: br label %omp_floor0.header
17+ // CHECK-LABEL: define void @tile_trivial_loop(
18+ // CHECK-SAME: ptr %[[TMP0:.+]], i32 %[[TMP1:.+]], i32 %[[TMP2:.+]]) {
19+ // CHECK-NEXT: br label %[[OMP_OMP_LOOP_PREHEADER:.+]]
3420// CHECK-EMPTY:
35- // CHECK-NEXT: omp_floor0.header: ; preds = %omp_floor0.inc, %omp_floor0.preheader
36- // CHECK-NEXT: %omp_floor0.iv = phi i32 [ 0, %omp_floor0.preheader ], [ %omp_floor0.next, %omp_floor0.inc ]
37- // CHECK-NEXT: br label %omp_floor0.cond
21+ // CHECK-NEXT: [[OMP_OMP_LOOP_PREHEADER]]:
22+ // CHECK-NEXT: %[[TMP4:.+]] = udiv i32 %[[TMP1:.+]], %[[TMP2:.+]]
23+ // CHECK-NEXT: %[[TMP5:.+]] = urem i32 %[[TMP1:.+]], %[[TMP2:.+]]
24+ // CHECK-NEXT: %[[TMP6:.+]] = icmp ne i32 %[[TMP5:.+]], 0
25+ // CHECK-NEXT: %[[TMP7:.+]] = zext i1 %[[TMP6:.+]] to i32
26+ // CHECK-NEXT: %[[OMP_FLOOR0_TRIPCOUNT:.+]] = add nuw i32 %[[TMP4:.+]], %[[TMP7:.+]]
27+ // CHECK-NEXT: br label %[[OMP_FLOOR0_PREHEADER:.+]]
3828// CHECK-EMPTY:
39- // CHECK-NEXT: omp_floor0.cond: ; preds = %omp_floor0.header
40- // CHECK-NEXT: %omp_floor0.cmp = icmp ult i32 %omp_floor0.iv, %omp_floor0.tripcount
41- // CHECK-NEXT: br i1 %omp_floor0.cmp, label %omp_floor0.body, label %omp_floor0.exit
29+ // CHECK-NEXT: [[OMP_FLOOR0_PREHEADER]]:
30+ // CHECK-NEXT: br label %[[OMP_FLOOR0_HEADER:.+]]
4231// CHECK-EMPTY:
43- // CHECK-NEXT: omp_floor0.body: ; preds = %omp_floor0.cond
44- // CHECK-NEXT: %8 = icmp eq i32 %omp_floor0.iv, %4
45- // CHECK-NEXT: %9 = select i1 %8, i32 %5, i32 %2
46- // CHECK-NEXT: br label %omp_tile0.preheader
32+ // CHECK-NEXT: [[OMP_FLOOR0_HEADER]]:
33+ // CHECK-NEXT: %[[OMP_FLOOR0_IV:.+]] = phi i32 [ 0, %[[OMP_FLOOR0_PREHEADER:.+]] ], [ %[[OMP_FLOOR0_NEXT:.+]], %[[OMP_FLOOR0_INC:.+]] ]
34+ // CHECK-NEXT: br label %[[OMP_FLOOR0_COND:.+]]
4735// CHECK-EMPTY:
48- // CHECK-NEXT: omp_tile0.preheader: ; preds = %omp_floor0.body
49- // CHECK-NEXT: br label %omp_tile0.header
36+ // CHECK-NEXT: [[OMP_FLOOR0_COND]]:
37+ // CHECK-NEXT: %[[OMP_FLOOR0_CMP:.+]] = icmp ult i32 %[[OMP_FLOOR0_IV:.+]], %[[OMP_FLOOR0_TRIPCOUNT:.+]]
38+ // CHECK-NEXT: br i1 %[[OMP_FLOOR0_CMP:.+]], label %[[OMP_FLOOR0_BODY:.+]], label %[[OMP_FLOOR0_EXIT:.+]]
5039// CHECK-EMPTY:
51- // CHECK-NEXT: omp_tile0.header: ; preds = %omp_tile0.inc, %omp_tile0.preheader
52- // CHECK-NEXT: %omp_tile0.iv = phi i32 [ 0, %omp_tile0.preheader ], [ %omp_tile0.next, %omp_tile0.inc ]
53- // CHECK-NEXT: br label %omp_tile0.cond
40+ // CHECK-NEXT: [[OMP_FLOOR0_BODY]]:
41+ // CHECK-NEXT: %[[TMP8:.+]] = icmp eq i32 %[[OMP_FLOOR0_IV:.+]], %[[TMP4:.+]]
42+ // CHECK-NEXT: %[[TMP9:.+]] = select i1 %[[TMP8:.+]], i32 %[[TMP5:.+]], i32 %[[TMP2:.+]]
43+ // CHECK-NEXT: br label %[[OMP_TILE0_PREHEADER:.+]]
5444// CHECK-EMPTY:
55- // CHECK-NEXT: omp_tile0.cond: ; preds = %omp_tile0.header
56- // CHECK-NEXT: %omp_tile0.cmp = icmp ult i32 %omp_tile0.iv, %9
57- // CHECK-NEXT: br i1 %omp_tile0.cmp, label %omp_tile0.body, label %omp_tile0.exit
45+ // CHECK-NEXT: [[OMP_TILE0_PREHEADER]]:
46+ // CHECK-NEXT: br label %[[OMP_TILE0_HEADER:.+]]
5847// CHECK-EMPTY:
59- // CHECK-NEXT: omp_tile0.body: ; preds = %omp_tile0.cond
60- // CHECK-NEXT: %10 = mul nuw i32 %2, %omp_floor0.iv
61- // CHECK-NEXT: %11 = add nuw i32 %10, %omp_tile0.iv
62- // CHECK-NEXT: br label %omp_omp.loop.body
48+ // CHECK-NEXT: [[OMP_TILE0_HEADER]]:
49+ // CHECK-NEXT: %[[OMP_TILE0_IV:.+]] = phi i32 [ 0, %[[OMP_TILE0_PREHEADER:.+]] ], [ %[[OMP_TILE0_NEXT:.+]], %[[OMP_TILE0_INC:.+]] ]
50+ // CHECK-NEXT: br label %[[OMP_TILE0_COND:.+]]
6351// CHECK-EMPTY:
64- // CHECK-NEXT: omp_omp.loop.body: ; preds = %omp_tile0.body
65- // CHECK-NEXT: br label %omp.loop.region
52+ // CHECK-NEXT: [[OMP_TILE0_COND]]:
53+ // CHECK-NEXT: %[[OMP_TILE0_CMP:.+]] = icmp ult i32 %[[OMP_TILE0_IV:.+]], %[[TMP9:.+]]
54+ // CHECK-NEXT: br i1 %[[OMP_TILE0_CMP:.+]], label %[[OMP_TILE0_BODY:.+]], label %[[OMP_TILE0_EXIT:.+]]
6655// CHECK-EMPTY:
67- // CHECK-NEXT: omp.loop.region: ; preds = %omp_omp.loop.body
68- // CHECK-NEXT: %12 = getelementptr inbounds float, ptr %0, i32 %11
69- // CHECK-NEXT: store float 4.200000e+01, ptr %12, align 4
70- // CHECK-NEXT: br label %omp.region.cont
56+ // CHECK-NEXT: [[OMP_TILE0_BODY]]:
57+ // CHECK-NEXT: %[[TMP10:.+]] = mul nuw i32 %[[TMP2:.+]], %[[OMP_FLOOR0_IV:.+]]
58+ // CHECK-NEXT: %[[TMP11:.+]] = add nuw i32 %[[TMP10:.+]], %[[OMP_TILE0_IV:.+]]
59+ // CHECK-NEXT: br label %[[OMP_OMP_LOOP_BODY:.+]]
7160// CHECK-EMPTY:
72- // CHECK-NEXT: omp.region.cont: ; preds = %omp.loop.region
73- // CHECK-NEXT: br label %omp_tile0.inc
61+ // CHECK-NEXT: [[OMP_OMP_LOOP_BODY]]:
62+ // CHECK-NEXT: br label %[[OMP_LOOP_REGION:.+]]
7463// CHECK-EMPTY:
75- // CHECK-NEXT: omp_tile0.inc: ; preds = %omp.region.cont
76- // CHECK-NEXT: %omp_tile0.next = add nuw i32 %omp_tile0.iv, 1
77- // CHECK-NEXT: br label %omp_tile0.header
64+ // CHECK-NEXT: [[OMP_LOOP_REGION]]:
65+ // CHECK-NEXT: %[[TMP12:.+]] = getelementptr inbounds float, ptr %[[TMP0:.+]], i32 %[[TMP11:.+]]
66+ // CHECK-NEXT: store float 4.200000e+01, ptr %[[TMP12:.+]], align 4
67+ // CHECK-NEXT: br label %[[OMP_REGION_CONT:.+]]
7868// CHECK-EMPTY:
79- // CHECK-NEXT: omp_tile0.exit: ; preds = %omp_tile0.cond
80- // CHECK-NEXT: br label %omp_tile0.after
69+ // CHECK-NEXT: [[OMP_REGION_CONT]]:
70+ // CHECK-NEXT: br label %[[OMP_TILE0_INC:.+]]
8171// CHECK-EMPTY:
82- // CHECK-NEXT: omp_tile0.after: ; preds = %omp_tile0.exit
83- // CHECK-NEXT: br label %omp_floor0.inc
72+ // CHECK-NEXT: [[OMP_TILE0_INC]]:
73+ // CHECK-NEXT: %[[OMP_TILE0_NEXT:.+]] = add nuw i32 %[[OMP_TILE0_IV:.+]], 1
74+ // CHECK-NEXT: br label %[[OMP_TILE0_HEADER:.+]]
8475// CHECK-EMPTY:
85- // CHECK-NEXT: omp_floor0.inc: ; preds = %omp_tile0.after
86- // CHECK-NEXT: %omp_floor0.next = add nuw i32 %omp_floor0.iv, 1
87- // CHECK-NEXT: br label %omp_floor0.header
76+ // CHECK-NEXT: [[OMP_TILE0_EXIT]]:
77+ // CHECK-NEXT: br label %[[OMP_TILE0_AFTER:.+]]
8878// CHECK-EMPTY:
89- // CHECK-NEXT: omp_floor0.exit: ; preds = %omp_floor0.cond
90- // CHECK-NEXT: br label %omp_floor0.after
79+ // CHECK-NEXT: [[OMP_TILE0_AFTER]]:
80+ // CHECK-NEXT: br label %[[OMP_FLOOR0_INC:.+]]
9181// CHECK-EMPTY:
92- // CHECK-NEXT: omp_floor0.after: ; preds = %omp_floor0.exit
93- // CHECK-NEXT: br label %omp_omp.loop.after
82+ // CHECK-NEXT: [[OMP_FLOOR0_INC]]:
83+ // CHECK-NEXT: %[[OMP_FLOOR0_NEXT:.+]] = add nuw i32 %[[OMP_FLOOR0_IV:.+]], 1
84+ // CHECK-NEXT: br label %[[OMP_FLOOR0_HEADER:.+]]
9485// CHECK-EMPTY:
95- // CHECK-NEXT: omp_omp.loop.after: ; preds = %omp_floor0.after
96- // CHECK-NEXT: ret void
97- // CHECK-NEXT: }
86+ // CHECK-NEXT: [[OMP_FLOOR0_EXIT]]:
87+ // CHECK-NEXT: br label %[[OMP_FLOOR0_AFTER:.+]]
9888// CHECK-EMPTY:
99- // CHECK-NEXT: !llvm.module.flags = !{!0}
89+ // CHECK-NEXT: [[OMP_FLOOR0_AFTER]]:
90+ // CHECK-NEXT: br label %[[OMP_OMP_LOOP_AFTER:.+]]
10091// CHECK-EMPTY:
101- // CHECK-NEXT: !0 = !{i32 2, !"Debug Info Version", i32 3}
92+ // CHECK-NEXT: [[OMP_OMP_LOOP_AFTER]]:
93+ // CHECK-NEXT: ret void
94+ // CHECK-NEXT: }
0 commit comments