brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · 93fa206 Raw
219 lines · plain
1// RUN: mlir-translate --mlir-to-llvmir %s | FileCheck %s2 3llvm.func @cancellation_point_parallel() {4  omp.parallel {5    omp.cancellation_point cancellation_construct_type(parallel)6    omp.terminator7  }8  llvm.return9}10// CHECK-LABEL: define internal void @cancellation_point_parallel..omp_par11// CHECK:       omp.par.entry:12// CHECK:         %[[VAL_5:.*]] = alloca i32, align 413// CHECK:         %[[VAL_6:.*]] = load i32, ptr %[[VAL_7:.*]], align 414// CHECK:         store i32 %[[VAL_6]], ptr %[[VAL_5]], align 415// CHECK:         %[[VAL_8:.*]] = load i32, ptr %[[VAL_5]], align 416// CHECK:         br label %[[VAL_9:.*]]17// CHECK:       omp.region.after_alloca:                          ; preds = %[[VAL_10:.*]]18// CHECK:         br label %[[VAL_11:.*]]19// CHECK:       omp.par.region:                                   ; preds = %[[VAL_9]]20// CHECK:         br label %[[VAL_12:.*]]21// CHECK:       omp.par.region1:                                  ; preds = %[[VAL_11]]22// CHECK:         %[[VAL_13:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)23// CHECK:         %[[VAL_14:.*]] = call i32 @__kmpc_cancellationpoint(ptr @1, i32 %[[VAL_13]], i32 1)24// CHECK:         %[[VAL_15:.*]] = icmp eq i32 %[[VAL_14]], 025// CHECK:         br i1 %[[VAL_15]], label %[[VAL_16:.*]], label %[[VAL_17:.*]]26// CHECK:       omp.par.region1.cncl:                             ; preds = %[[VAL_12]]27// CHECK:         br label %[[FINI:.*]]28// CHECK:       .fini:29// CHECK:         %[[VAL_18:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)30// CHECK:         %[[VAL_19:.*]] = call i32 @__kmpc_cancel_barrier(ptr @2, i32 %[[VAL_18]])31// CHECK:         br label %[[EXIT_STUB:.*]]32// CHECK:       omp.par.region1.split:                            ; preds = %[[VAL_12]]33// CHECK:         br label %[[VAL_21:.*]]34// CHECK:       omp.region.cont:                                  ; preds = %[[VAL_16]]35// CHECK:         br label %[[VAL_22:.*]]36// CHECK:       omp.par.pre_finalize:                             ; preds = %[[VAL_21]]37// CHECK:         br label %[[FINI]]38// CHECK:       omp.par.exit.exitStub:39// CHECK:         ret void40 41llvm.func @cancellation_point_sections() {42  omp.sections {43    omp.section {44      omp.cancellation_point cancellation_construct_type(sections)45      omp.terminator46    }47    omp.terminator48  }49  llvm.return50}51// CHECK-LABEL: define void @cancellation_point_sections52// CHECK:         %[[VAL_23:.*]] = alloca i32, align 453// CHECK:         %[[VAL_24:.*]] = alloca i32, align 454// CHECK:         %[[VAL_25:.*]] = alloca i32, align 455// CHECK:         %[[VAL_26:.*]] = alloca i32, align 456// CHECK:         br label %[[VAL_27:.*]]57// CHECK:       entry:                                            ; preds = %[[VAL_28:.*]]58// CHECK:         br label %[[VAL_29:.*]]59// CHECK:       omp_section_loop.preheader:                       ; preds = %[[VAL_27]]60// CHECK:         store i32 0, ptr %[[VAL_24]], align 461// CHECK:         store i32 0, ptr %[[VAL_25]], align 462// CHECK:         store i32 1, ptr %[[VAL_26]], align 463// CHECK:         %[[VAL_30:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)64// CHECK:         call void @__kmpc_for_static_init_4u(ptr @1, i32 %[[VAL_30]], i32 34, ptr %[[VAL_23]], ptr %[[VAL_24]], ptr %[[VAL_25]], ptr %[[VAL_26]], i32 1, i32 0)65// CHECK:         %[[VAL_31:.*]] = load i32, ptr %[[VAL_24]], align 466// CHECK:         %[[VAL_32:.*]] = load i32, ptr %[[VAL_25]], align 467// CHECK:         %[[VAL_33:.*]] = sub i32 %[[VAL_32]], %[[VAL_31]]68// CHECK:         %[[VAL_34:.*]] = add i32 %[[VAL_33]], 169// CHECK:         br label %[[VAL_35:.*]]70// CHECK:       omp_section_loop.header:                          ; preds = %[[VAL_36:.*]], %[[VAL_29]]71// CHECK:         %[[VAL_37:.*]] = phi i32 [ 0, %[[VAL_29]] ], [ %[[VAL_38:.*]], %[[VAL_36]] ]72// CHECK:         br label %[[VAL_39:.*]]73// CHECK:       omp_section_loop.cond:                            ; preds = %[[VAL_35]]74// CHECK:         %[[VAL_40:.*]] = icmp ult i32 %[[VAL_37]], %[[VAL_34]]75// CHECK:         br i1 %[[VAL_40]], label %[[VAL_41:.*]], label %[[VAL_42:.*]]76// CHECK:       omp_section_loop.body:                            ; preds = %[[VAL_39]]77// CHECK:         %[[VAL_43:.*]] = add i32 %[[VAL_37]], %[[VAL_31]]78// CHECK:         %[[VAL_44:.*]] = mul i32 %[[VAL_43]], 179// CHECK:         %[[VAL_45:.*]] = add i32 %[[VAL_44]], 080// CHECK:         switch i32 %[[VAL_45]], label %[[VAL_46:.*]] [81// CHECK:           i32 0, label %[[VAL_47:.*]]82// CHECK:         ]83// CHECK:       omp_section_loop.body.case:                       ; preds = %[[VAL_41]]84// CHECK:         br label %[[VAL_48:.*]]85// CHECK:       omp.section.region:                               ; preds = %[[VAL_47]]86// CHECK:         %[[VAL_49:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)87// CHECK:         %[[VAL_50:.*]] = call i32 @__kmpc_cancellationpoint(ptr @1, i32 %[[VAL_49]], i32 3)88// CHECK:         %[[VAL_51:.*]] = icmp eq i32 %[[VAL_50]], 089// CHECK:         br i1 %[[VAL_51]], label %[[VAL_52:.*]], label %[[VAL_53:.*]]90// CHECK:       omp.section.region.split:                         ; preds = %[[VAL_48]]91// CHECK:         br label %[[VAL_54:.*]]92// CHECK:       omp.region.cont:                                  ; preds = %[[VAL_52]]93// CHECK:         br label %[[VAL_46]]94// CHECK:       omp_section_loop.body.sections.after:             ; preds = %[[VAL_54]], %[[VAL_41]]95// CHECK:         br label %[[VAL_36]]96// CHECK:       omp_section_loop.inc:                             ; preds = %[[VAL_46]]97// CHECK:         %[[VAL_38]] = add nuw i32 %[[VAL_37]], 198// CHECK:         br label %[[VAL_35]]99// CHECK:       omp_section_loop.exit:100// CHECK:         call void @__kmpc_for_static_fini(ptr @1, i32 %[[VAL_30]])101// CHECK:         %[[VAL_55:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)102// CHECK:         call void @__kmpc_barrier(ptr @2, i32 %[[VAL_55]])103// CHECK:         br label %[[VAL_56:.*]]104// CHECK:       omp_section_loop.after:                           ; preds = %[[VAL_42]]105// CHECK:         ret void106// CHECK:       omp.section.region.cncl:                          ; preds = %[[VAL_48]]107// CHECK:         br label %[[VAL_42]]108 109llvm.func @cancellation_point_wsloop(%lb : i32, %ub : i32, %step : i32) {110  omp.wsloop {111    omp.loop_nest (%iv) : i32 = (%lb) to (%ub) step (%step) {112      omp.cancellation_point cancellation_construct_type(loop)113      omp.yield114    }115  }116  llvm.return117}118// CHECK-LABEL: define void @cancellation_point_wsloop119// CHECK:         %[[VAL_58:.*]] = alloca i32, align 4120// CHECK:         %[[VAL_59:.*]] = alloca i32, align 4121// CHECK:         %[[VAL_60:.*]] = alloca i32, align 4122// CHECK:         %[[VAL_61:.*]] = alloca i32, align 4123// CHECK:         br label %[[VAL_62:.*]]124// CHECK:       omp.region.after_alloca:                          ; preds = %[[VAL_63:.*]]125// CHECK:         br label %[[VAL_64:.*]]126// CHECK:       entry:                                            ; preds = %[[VAL_62]]127// CHECK:         br label %[[VAL_65:.*]]128// CHECK:       omp.wsloop.region:                                ; preds = %[[VAL_64]]129// CHECK:         %[[VAL_66:.*]] = icmp slt i32 %[[VAL_67:.*]], 0130// CHECK:         %[[VAL_68:.*]] = sub i32 0, %[[VAL_67]]131// CHECK:         %[[VAL_69:.*]] = select i1 %[[VAL_66]], i32 %[[VAL_68]], i32 %[[VAL_67]]132// CHECK:         %[[VAL_70:.*]] = select i1 %[[VAL_66]], i32 %[[VAL_71:.*]], i32 %[[VAL_72:.*]]133// CHECK:         %[[VAL_73:.*]] = select i1 %[[VAL_66]], i32 %[[VAL_72]], i32 %[[VAL_71]]134// CHECK:         %[[VAL_74:.*]] = sub nsw i32 %[[VAL_73]], %[[VAL_70]]135// CHECK:         %[[VAL_75:.*]] = icmp sle i32 %[[VAL_73]], %[[VAL_70]]136// CHECK:         %[[VAL_76:.*]] = sub i32 %[[VAL_74]], 1137// CHECK:         %[[VAL_77:.*]] = udiv i32 %[[VAL_76]], %[[VAL_69]]138// CHECK:         %[[VAL_78:.*]] = add i32 %[[VAL_77]], 1139// CHECK:         %[[VAL_79:.*]] = icmp ule i32 %[[VAL_74]], %[[VAL_69]]140// CHECK:         %[[VAL_80:.*]] = select i1 %[[VAL_79]], i32 1, i32 %[[VAL_78]]141// CHECK:         %[[VAL_81:.*]] = select i1 %[[VAL_75]], i32 0, i32 %[[VAL_80]]142// CHECK:         br label %[[VAL_82:.*]]143// CHECK:       omp_loop.preheader:                               ; preds = %[[VAL_65]]144// CHECK:         store i32 0, ptr %[[VAL_59]], align 4145// CHECK:         %[[VAL_83:.*]] = sub i32 %[[VAL_81]], 1146// CHECK:         store i32 %[[VAL_83]], ptr %[[VAL_60]], align 4147// CHECK:         store i32 1, ptr %[[VAL_61]], align 4148// CHECK:         %[[VAL_84:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)149// CHECK:         call void @__kmpc_for_static_init_4u(ptr @1, i32 %[[VAL_84]], i32 34, ptr %[[VAL_58]], ptr %[[VAL_59]], ptr %[[VAL_60]], ptr %[[VAL_61]], i32 1, i32 0)150// CHECK:         %[[VAL_85:.*]] = load i32, ptr %[[VAL_59]], align 4151// CHECK:         %[[VAL_86:.*]] = load i32, ptr %[[VAL_60]], align 4152// CHECK:         %[[VAL_87:.*]] = sub i32 %[[VAL_86]], %[[VAL_85]]153// CHECK:         %[[VAL_88:.*]] = add i32 %[[VAL_87]], 1154// CHECK:         br label %[[VAL_89:.*]]155// CHECK:       omp_loop.header:                                  ; preds = %[[VAL_90:.*]], %[[VAL_82]]156// CHECK:         %[[VAL_91:.*]] = phi i32 [ 0, %[[VAL_82]] ], [ %[[VAL_92:.*]], %[[VAL_90]] ]157// CHECK:         br label %[[VAL_93:.*]]158// CHECK:       omp_loop.cond:                                    ; preds = %[[VAL_89]]159// CHECK:         %[[VAL_94:.*]] = icmp ult i32 %[[VAL_91]], %[[VAL_88]]160// CHECK:         br i1 %[[VAL_94]], label %[[VAL_95:.*]], label %[[VAL_96:.*]]161// CHECK:       omp_loop.body:                                    ; preds = %[[VAL_93]]162// CHECK:         %[[VAL_97:.*]] = add i32 %[[VAL_91]], %[[VAL_85]]163// CHECK:         %[[VAL_98:.*]] = mul i32 %[[VAL_97]], %[[VAL_67]]164// CHECK:         %[[VAL_99:.*]] = add i32 %[[VAL_98]], %[[VAL_72]]165// CHECK:         br label %[[VAL_100:.*]]166// CHECK:       omp.loop_nest.region:                             ; preds = %[[VAL_95]]167// CHECK:         %[[VAL_101:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)168// CHECK:         %[[VAL_102:.*]] = call i32 @__kmpc_cancellationpoint(ptr @1, i32 %[[VAL_101]], i32 2)169// CHECK:         %[[VAL_103:.*]] = icmp eq i32 %[[VAL_102]], 0170// CHECK:         br i1 %[[VAL_103]], label %[[VAL_104:.*]], label %[[VAL_105:.*]]171// CHECK:       omp.loop_nest.region.split:                       ; preds = %[[VAL_100]]172// CHECK:         br label %[[VAL_106:.*]]173// CHECK:       omp.region.cont1:                                 ; preds = %[[VAL_104]]174// CHECK:         br label %[[VAL_90]]175// CHECK:       omp_loop.inc:                                     ; preds = %[[VAL_106]]176// CHECK:         %[[VAL_92]] = add nuw i32 %[[VAL_91]], 1177// CHECK:         br label %[[VAL_89]]178// CHECK:       omp_loop.exit:179// CHECK:         call void @__kmpc_for_static_fini(ptr @1, i32 %[[VAL_84]])180// CHECK:         %[[VAL_107:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)181// CHECK:         call void @__kmpc_barrier(ptr @2, i32 %[[VAL_107]])182// CHECK:         br label %[[VAL_108:.*]]183// CHECK:       omp_loop.after:                                   ; preds = %[[VAL_96]]184// CHECK:         br label %[[VAL_109:.*]]185// CHECK:       omp.region.cont:                                  ; preds = %[[VAL_108]]186// CHECK:         ret void187// CHECK:       omp.loop_nest.region.cncl:                        ; preds = %[[VAL_100]]188// CHECK:         br label %[[VAL_96]]189 190 191llvm.func @cancellation_point_taskgroup() {192  omp.taskgroup {193    omp.task {194      omp.cancellation_point cancellation_construct_type(taskgroup)195      omp.terminator196    }197    omp.terminator198  }199  llvm.return200}201// CHECK-LABEL: define internal void @cancellation_point_taskgroup..omp_par(202// CHECK:       task.alloca:203// CHECK:         br label %[[VAL_50:.*]]204// CHECK:       task.body:                                        ; preds = %[[VAL_51:.*]]205// CHECK:         br label %[[VAL_52:.*]]206// CHECK:       omp.task.region:                                  ; preds = %[[VAL_50]]207// CHECK:         %[[VAL_53:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)208// CHECK:         %[[VAL_54:.*]] = call i32 @__kmpc_cancellationpoint(ptr @1, i32 %[[VAL_53]], i32 4)209// CHECK:         %[[VAL_55:.*]] = icmp eq i32 %[[VAL_54]], 0210// CHECK:         br i1 %[[VAL_55]], label %omp.task.region.split, label %omp.task.region.cncl211// CHECK:       omp.task.region.cncl:212// CHECK:         br label %omp.region.cont1213// CHECK:       omp.region.cont1:214// CHECK:         br label %task.exit.exitStub215// CHECK:       omp.task.region.split:216// CHECK:         br label %omp.region.cont1217// CHECK:       task.exit.exitStub:218// CHECK:         ret void219