@@ -171,7 +171,7 @@ int foo() {
171
171
// CHECK: omp.inner.for.end: ; preds = %[[VAL_55]]
172
172
// CHECK-NEXT: br label %[[VAL_91:.*]]
173
173
// CHECK: omp.loop.exit: ; preds = %[[VAL_60]]
174
- // CHECK-NEXT: call void @__kmpc_for_static_fini (ptr @3 , i32 %[[VAL_45]])
174
+ // CHECK-NEXT: call void @__kmpc_distribute_static_fini (ptr @2 , i32 %[[VAL_45]])
175
175
// CHECK-NEXT: %[[VAL_92:.*]] = load i32, ptr %[[VAL_29]], align 4
176
176
// CHECK-NEXT: %[[VAL_93:.*]] = icmp ne i32 %[[VAL_92]], 0
177
177
// CHECK-NEXT: br i1 %[[VAL_93]], label %[[VAL_94:.*]], label %[[VAL_95:.*]]
@@ -500,7 +500,7 @@ int foo() {
500
500
// CHECK1: omp.inner.for.end: ; preds = %[[VAL_87]]
501
501
// CHECK1-NEXT: br label %[[VAL_103:.*]]
502
502
// CHECK1: omp.loop.exit: ; preds = %[[VAL_93]]
503
- // CHECK1-NEXT: call void @__kmpc_for_static_fini(ptr @2 , i32 %[[VAL_77]])
503
+ // CHECK1-NEXT: call void @__kmpc_for_static_fini(ptr @1 , i32 %[[VAL_77]])
504
504
// CHECK1-NEXT: %[[VAL_104:.*]] = load i32, ptr %[[VAL_60]], align 4
505
505
// CHECK1-NEXT: %[[VAL_105:.*]] = icmp ne i32 %[[VAL_104]], 0
506
506
// CHECK1-NEXT: br i1 %[[VAL_105]], label %[[VAL_106:.*]], label %[[VAL_107:.*]]
@@ -764,7 +764,7 @@ int foo() {
764
764
// CHECK2: omp.inner.for.end: ; preds = %[[VAL_87]]
765
765
// CHECK2-NEXT: br label %[[VAL_101:.*]]
766
766
// CHECK2: omp.loop.exit: ; preds = %[[VAL_93]]
767
- // CHECK2-NEXT: call void @__kmpc_for_static_fini(ptr @2 , i32 %[[VAL_77]])
767
+ // CHECK2-NEXT: call void @__kmpc_for_static_fini(ptr @1 , i32 %[[VAL_77]])
768
768
// CHECK2-NEXT: %[[VAL_102:.*]] = load i32, ptr %[[VAL_60]], align 4
769
769
// CHECK2-NEXT: %[[VAL_103:.*]] = icmp ne i32 %[[VAL_102]], 0
770
770
// CHECK2-NEXT: br i1 %[[VAL_103]], label %[[VAL_104:.*]], label %[[VAL_105:.*]]
@@ -923,92 +923,91 @@ int foo() {
923
923
// CHECK2-NEXT: %[[VAL_214:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
924
924
// CHECK2-NEXT: %[[VAL_215:.*]] = load float, ptr %[[VAL_214]], align 4, !llvm.access.group !5
925
925
// CHECK2-NEXT: %[[VAL_216:.*]] = fadd float %[[VAL_213]], %[[VAL_211]]
926
- // CHECK2-NEXT: %[[VAL_217:.*]] = fadd float %[[VAL_215]], 0.000000e+00
927
- // CHECK2-NEXT: %[[VAL_218:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 0
928
- // CHECK2-NEXT: %[[VAL_219:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
929
- // CHECK2-NEXT: store float %[[VAL_216]], ptr %[[VAL_218]], align 4, !llvm.access.group !5
930
- // CHECK2-NEXT: store float %[[VAL_217]], ptr %[[VAL_219]], align 4, !llvm.access.group !5
931
- // CHECK2-NEXT: br label %[[VAL_220:.*]]
926
+ // CHECK2-NEXT: %[[VAL_217:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 0
927
+ // CHECK2-NEXT: %[[VAL_218:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
928
+ // CHECK2-NEXT: store float %[[VAL_216]], ptr %[[VAL_217]], align 4, !llvm.access.group !5
929
+ // CHECK2-NEXT: store float %[[VAL_215]], ptr %[[VAL_218]], align 4, !llvm.access.group !5
930
+ // CHECK2-NEXT: br label %[[VAL_219:.*]]
932
931
// CHECK2: omp.body.continue: ; preds = %[[VAL_197]]
933
932
// CHECK2-NEXT: br label %[[VAL_193]]
934
- // CHECK2: omp.inner.for.inc: ; preds = %[[VAL_220 ]]
935
- // CHECK2-NEXT: %[[VAL_221 :.*]] = load i32, ptr %[[VAL_155]], align 4, !llvm.access.group !5
936
- // CHECK2-NEXT: %[[VAL_222 :.*]] = add nsw i32 %[[VAL_221 ]], 1
937
- // CHECK2-NEXT: store i32 %[[VAL_222 ]], ptr %[[VAL_155]], align 4, !llvm.access.group !5
933
+ // CHECK2: omp.inner.for.inc: ; preds = %[[VAL_219 ]]
934
+ // CHECK2-NEXT: %[[VAL_220 :.*]] = load i32, ptr %[[VAL_155]], align 4, !llvm.access.group !5
935
+ // CHECK2-NEXT: %[[VAL_221 :.*]] = add nsw i32 %[[VAL_220 ]], 1
936
+ // CHECK2-NEXT: store i32 %[[VAL_221 ]], ptr %[[VAL_155]], align 4, !llvm.access.group !5
938
937
// CHECK2-NEXT: br label %[[VAL_192]], !llvm.loop !6
939
938
// CHECK2: omp.inner.for.end: ; preds = %[[VAL_192]]
940
- // CHECK2-NEXT: br label %[[VAL_223 :.*]]
939
+ // CHECK2-NEXT: br label %[[VAL_222 :.*]]
941
940
// CHECK2: omp.loop.exit: ; preds = %[[VAL_198]]
942
941
// CHECK2-NEXT: call void @__kmpc_for_static_fini(ptr @2, i32 %[[VAL_182]])
943
- // CHECK2-NEXT: %[[VAL_224 :.*]] = getelementptr inbounds [1 x ptr], ptr %[[VAL_166]], i32 0, i32 0
944
- // CHECK2-NEXT: store ptr %[[VAL_163]], ptr %[[VAL_224 ]], align 4
945
- // CHECK2-NEXT: %[[VAL_225 :.*]] = call i32 @__kmpc_reduce(ptr @3, i32 %[[VAL_182]], i32 1, i32 4, ptr %[[VAL_166]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3foov_l31 .omp_outlined.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)
946
- // CHECK2-NEXT: switch i32 %[[VAL_225 ]], label %[[VAL_226 :.*]] [
947
- // CHECK2-NEXT: i32 1, label %[[VAL_227 :.*]]
948
- // CHECK2-NEXT: i32 2, label %[[VAL_228 :.*]]
942
+ // CHECK2-NEXT: %[[VAL_223 :.*]] = getelementptr inbounds [1 x ptr], ptr %[[VAL_166]], i32 0, i32 0
943
+ // CHECK2-NEXT: store ptr %[[VAL_163]], ptr %[[VAL_223 ]], align 4
944
+ // CHECK2-NEXT: %[[VAL_224 :.*]] = call i32 @__kmpc_reduce(ptr @3, i32 %[[VAL_182]], i32 1, i32 4, ptr %[[VAL_166]], ptr @__omp_offloading_1030b_4868a89__Z3foov_l31 .omp_outlined.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)
945
+ // CHECK2-NEXT: switch i32 %[[VAL_224 ]], label %[[VAL_225 :.*]] [
946
+ // CHECK2-NEXT: i32 1, label %[[VAL_226 :.*]]
947
+ // CHECK2-NEXT: i32 2, label %[[VAL_227 :.*]]
949
948
// CHECK2-NEXT: ]
950
- // CHECK2: .omp.reduction.case1: ; preds = %[[VAL_223]]
951
- // CHECK2-NEXT: %[[VAL_229:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_176]], i32 0, i32 0
952
- // CHECK2-NEXT: %[[VAL_230:.*]] = load float, ptr %[[VAL_229]], align 4
953
- // CHECK2-NEXT: %[[VAL_231:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_176]], i32 0, i32 1
954
- // CHECK2-NEXT: %[[VAL_232:.*]] = load float, ptr %[[VAL_231]], align 4
955
- // CHECK2-NEXT: %[[VAL_233:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 0
956
- // CHECK2-NEXT: %[[VAL_234:.*]] = load float, ptr %[[VAL_233]], align 4
957
- // CHECK2-NEXT: %[[VAL_235:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
958
- // CHECK2-NEXT: %[[VAL_236:.*]] = load float, ptr %[[VAL_235]], align 4
959
- // CHECK2-NEXT: %[[VAL_237:.*]] = fadd float %[[VAL_230]], %[[VAL_234]]
960
- // CHECK2-NEXT: %[[VAL_238:.*]] = fadd float %[[VAL_232]], %[[VAL_236]]
961
- // CHECK2-NEXT: %[[VAL_239:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_176]], i32 0, i32 0
962
- // CHECK2-NEXT: %[[VAL_240:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_176]], i32 0, i32 1
949
+ // CHECK2: .omp.reduction.case1: ; preds = %[[VAL_222]]
950
+ // CHECK2-NEXT: %[[VAL_228:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_176]], i32 0, i32 0
951
+ // CHECK2-NEXT: %[[VAL_229:.*]] = load float, ptr %[[VAL_228]], align 4
952
+ // CHECK2-NEXT: %[[VAL_230:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_176]], i32 0, i32 1
953
+ // CHECK2-NEXT: %[[VAL_231:.*]] = load float, ptr %[[VAL_230]], align 4
954
+ // CHECK2-NEXT: %[[VAL_232:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 0
955
+ // CHECK2-NEXT: %[[VAL_233:.*]] = load float, ptr %[[VAL_232]], align 4
956
+ // CHECK2-NEXT: %[[VAL_234:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
957
+ // CHECK2-NEXT: %[[VAL_235:.*]] = load float, ptr %[[VAL_234]], align 4
958
+ // CHECK2-NEXT: %[[VAL_236:.*]] = fadd float %[[VAL_229]], %[[VAL_233]]
959
+ // CHECK2-NEXT: %[[VAL_237:.*]] = fadd float %[[VAL_231]], %[[VAL_235]]
960
+ // CHECK2-NEXT: %[[VAL_238:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_176]], i32 0, i32 0
961
+ // CHECK2-NEXT: %[[VAL_239:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_176]], i32 0, i32 1
962
+ // CHECK2-NEXT: store float %[[VAL_236]], ptr %[[VAL_238]], align 4
963
963
// CHECK2-NEXT: store float %[[VAL_237]], ptr %[[VAL_239]], align 4
964
- // CHECK2-NEXT: store float %[[VAL_238]], ptr %[[VAL_240]], align 4
965
964
// CHECK2-NEXT: call void @__kmpc_end_reduce(ptr @3, i32 %[[VAL_182]], ptr @.gomp_critical_user_.reduction.var)
966
- // CHECK2-NEXT: br label %[[VAL_226 ]]
967
- // CHECK2: .omp.reduction.case2: ; preds = %[[VAL_223 ]]
968
- // CHECK2-NEXT: %[[VAL_241 :.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 0
969
- // CHECK2-NEXT: %[[VAL_242 :.*]] = load float, ptr %[[VAL_241 ]], align 4
970
- // CHECK2-NEXT: %[[VAL_243 :.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
971
- // CHECK2-NEXT: %[[VAL_244 :.*]] = load float, ptr %[[VAL_243 ]], align 4
965
+ // CHECK2-NEXT: br label %[[VAL_225 ]]
966
+ // CHECK2: .omp.reduction.case2: ; preds = %[[VAL_222 ]]
967
+ // CHECK2-NEXT: %[[VAL_240 :.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 0
968
+ // CHECK2-NEXT: %[[VAL_241 :.*]] = load float, ptr %[[VAL_240 ]], align 4
969
+ // CHECK2-NEXT: %[[VAL_242 :.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
970
+ // CHECK2-NEXT: %[[VAL_243 :.*]] = load float, ptr %[[VAL_242 ]], align 4
972
971
// CHECK2-NEXT: call void @__atomic_load(i32 noundef 8, ptr noundef %[[VAL_176]], ptr noundef %[[VAL_167]], i32 noundef 0)
973
- // CHECK2-NEXT: br label %[[VAL_245:.*]]
974
- // CHECK2: atomic_cont: ; preds = %[[VAL_245]], %[[VAL_228]]
975
- // CHECK2-NEXT: %[[VAL_246:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_167]], i32 0, i32 0
976
- // CHECK2-NEXT: %[[VAL_247:.*]] = load float, ptr %[[VAL_246]], align 4
977
- // CHECK2-NEXT: %[[VAL_248:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_167]], i32 0, i32 1
978
- // CHECK2-NEXT: %[[VAL_249:.*]] = load float, ptr %[[VAL_248]], align 4
979
- // CHECK2-NEXT: %[[VAL_250:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_169]], i32 0, i32 0
980
- // CHECK2-NEXT: %[[VAL_251:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_169]], i32 0, i32 1
981
- // CHECK2-NEXT: store float %[[VAL_247]], ptr %[[VAL_250]], align 4
982
- // CHECK2-NEXT: store float %[[VAL_249]], ptr %[[VAL_251]], align 4
983
- // CHECK2-NEXT: %[[VAL_252:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_169]], i32 0, i32 0
984
- // CHECK2-NEXT: %[[VAL_253:.*]] = load float, ptr %[[VAL_252]], align 4
985
- // CHECK2-NEXT: %[[VAL_254:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_169]], i32 0, i32 1
986
- // CHECK2-NEXT: %[[VAL_255:.*]] = load float, ptr %[[VAL_254]], align 4
987
- // CHECK2-NEXT: %[[VAL_256:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 0
988
- // CHECK2-NEXT: %[[VAL_257:.*]] = load float, ptr %[[VAL_256]], align 4
989
- // CHECK2-NEXT: %[[VAL_258:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
990
- // CHECK2-NEXT: %[[VAL_259:.*]] = load float, ptr %[[VAL_258]], align 4
991
- // CHECK2-NEXT: %[[VAL_260:.*]] = fadd float %[[VAL_253]], %[[VAL_257]]
992
- // CHECK2-NEXT: %[[VAL_261:.*]] = fadd float %[[VAL_255]], %[[VAL_259]]
993
- // CHECK2-NEXT: %[[VAL_262:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_168]], i32 0, i32 0
994
- // CHECK2-NEXT: %[[VAL_263:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_168]], i32 0, i32 1
972
+ // CHECK2-NEXT: br label %[[VAL_244:.*]]
973
+ // CHECK2: atomic_cont: ; preds = %[[VAL_244]], %[[VAL_227]]
974
+ // CHECK2-NEXT: %[[VAL_245:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_167]], i32 0, i32 0
975
+ // CHECK2-NEXT: %[[VAL_246:.*]] = load float, ptr %[[VAL_245]], align 4
976
+ // CHECK2-NEXT: %[[VAL_247:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_167]], i32 0, i32 1
977
+ // CHECK2-NEXT: %[[VAL_248:.*]] = load float, ptr %[[VAL_247]], align 4
978
+ // CHECK2-NEXT: %[[VAL_249:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_169]], i32 0, i32 0
979
+ // CHECK2-NEXT: %[[VAL_250:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_169]], i32 0, i32 1
980
+ // CHECK2-NEXT: store float %[[VAL_246]], ptr %[[VAL_249]], align 4
981
+ // CHECK2-NEXT: store float %[[VAL_248]], ptr %[[VAL_250]], align 4
982
+ // CHECK2-NEXT: %[[VAL_251:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_169]], i32 0, i32 0
983
+ // CHECK2-NEXT: %[[VAL_252:.*]] = load float, ptr %[[VAL_251]], align 4
984
+ // CHECK2-NEXT: %[[VAL_253:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_169]], i32 0, i32 1
985
+ // CHECK2-NEXT: %[[VAL_254:.*]] = load float, ptr %[[VAL_253]], align 4
986
+ // CHECK2-NEXT: %[[VAL_255:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 0
987
+ // CHECK2-NEXT: %[[VAL_256:.*]] = load float, ptr %[[VAL_255]], align 4
988
+ // CHECK2-NEXT: %[[VAL_257:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_163]], i32 0, i32 1
989
+ // CHECK2-NEXT: %[[VAL_258:.*]] = load float, ptr %[[VAL_257]], align 4
990
+ // CHECK2-NEXT: %[[VAL_259:.*]] = fadd float %[[VAL_252]], %[[VAL_256]]
991
+ // CHECK2-NEXT: %[[VAL_260:.*]] = fadd float %[[VAL_254]], %[[VAL_258]]
992
+ // CHECK2-NEXT: %[[VAL_261:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_168]], i32 0, i32 0
993
+ // CHECK2-NEXT: %[[VAL_262:.*]] = getelementptr inbounds { float, float }, ptr %[[VAL_168]], i32 0, i32 1
994
+ // CHECK2-NEXT: store float %[[VAL_259]], ptr %[[VAL_261]], align 4
995
995
// CHECK2-NEXT: store float %[[VAL_260]], ptr %[[VAL_262]], align 4
996
- // CHECK2-NEXT: store float %[[VAL_261]], ptr %[[VAL_263]], align 4
997
- // CHECK2-NEXT: %[[VAL_264:.*]] = call noundef zeroext i1 @__atomic_compare_exchange(i32 noundef 8, ptr noundef %[[VAL_176]], ptr noundef %[[VAL_167]], ptr noundef %[[VAL_168]], i32 noundef 0, i32 noundef 0)
998
- // CHECK2-NEXT: br i1 %[[VAL_264]], label %[[VAL_265:.*]], label %[[VAL_245]]
999
- // CHECK2: atomic_exit: ; preds = %[[VAL_245]]
996
+ // CHECK2-NEXT: %[[VAL_263:.*]] = call noundef zeroext i1 @__atomic_compare_exchange(i32 noundef 8, ptr noundef %[[VAL_176]], ptr noundef %[[VAL_167]], ptr noundef %[[VAL_168]], i32 noundef 0, i32 noundef 0)
997
+ // CHECK2-NEXT: br i1 %[[VAL_263]], label %[[VAL_264:.*]], label %[[VAL_244]]
998
+ // CHECK2: atomic_exit: ; preds = %[[VAL_244]]
1000
999
// CHECK2-NEXT: call void @__kmpc_end_reduce(ptr @3, i32 %[[VAL_182]], ptr @.gomp_critical_user_.reduction.var)
1001
- // CHECK2-NEXT: br label %[[VAL_226 ]]
1002
- // CHECK2: .omp.reduction.default: ; preds = %[[VAL_265 ]], %[[VAL_227 ]], %[[VAL_223 ]]
1003
- // CHECK2-NEXT: %[[VAL_266 :.*]] = load i32, ptr %[[VAL_161]], align 4
1004
- // CHECK2-NEXT: %[[VAL_267 :.*]] = icmp ne i32 %[[VAL_266 ]], 0
1005
- // CHECK2-NEXT: br i1 %[[VAL_267 ]], label %[[VAL_268 :.*]], label %[[VAL_269 :.*]]
1006
- // CHECK2: .omp.lastprivate.then: ; preds = %[[VAL_226 ]]
1000
+ // CHECK2-NEXT: br label %[[VAL_225 ]]
1001
+ // CHECK2: .omp.reduction.default: ; preds = %[[VAL_264 ]], %[[VAL_226 ]], %[[VAL_222 ]]
1002
+ // CHECK2-NEXT: %[[VAL_265 :.*]] = load i32, ptr %[[VAL_161]], align 4
1003
+ // CHECK2-NEXT: %[[VAL_266 :.*]] = icmp ne i32 %[[VAL_265 ]], 0
1004
+ // CHECK2-NEXT: br i1 %[[VAL_266 ]], label %[[VAL_267 :.*]], label %[[VAL_268 :.*]]
1005
+ // CHECK2: .omp.lastprivate.then: ; preds = %[[VAL_225 ]]
1007
1006
// CHECK2-NEXT: store i32 10, ptr %[[VAL_162]], align 4
1008
- // CHECK2-NEXT: %[[VAL_270 :.*]] = load i32, ptr %[[VAL_162]], align 4
1009
- // CHECK2-NEXT: store i32 %[[VAL_270 ]], ptr %[[VAL_153]], align 4
1010
- // CHECK2-NEXT: br label %[[VAL_269 ]]
1011
- // CHECK2: .omp.lastprivate.done: ; preds = %[[VAL_268 ]], %[[VAL_226 ]]
1007
+ // CHECK2-NEXT: %[[VAL_269 :.*]] = load i32, ptr %[[VAL_162]], align 4
1008
+ // CHECK2-NEXT: store i32 %[[VAL_269 ]], ptr %[[VAL_153]], align 4
1009
+ // CHECK2-NEXT: br label %[[VAL_268 ]]
1010
+ // CHECK2: .omp.lastprivate.done: ; preds = %[[VAL_267 ]], %[[VAL_225 ]]
1012
1011
// CHECK2-NEXT: ret void
1013
1012
//
1014
1013
//
0 commit comments