53 lines · plain
1// RUN: mlir-translate --mlir-to-llvmir %s | FileCheck %s2 3// Regression test for a compiler crash. Ensure that the insertion point is set4// correctly after the barrier's cancel check5 6llvm.func @test() {7 omp.parallel {8 omp.cancel cancellation_construct_type(parallel)9 omp.barrier10 omp.terminator11 }12 llvm.return13}14 15// CHECK-LABEL: define internal void @test..omp_par16// CHECK: omp.par.entry:17// CHECK: %[[VAL_4:.*]] = alloca i32, align 418// CHECK: %[[VAL_5:.*]] = load i32, ptr %[[VAL_6:.*]], align 419// CHECK: store i32 %[[VAL_5]], ptr %[[VAL_4]], align 420// CHECK: %[[VAL_7:.*]] = load i32, ptr %[[VAL_4]], align 421// CHECK: br label %[[VAL_8:.*]]22// CHECK: omp.region.after_alloca: ; preds = %[[VAL_9:.*]]23// CHECK: br label %[[VAL_10:.*]]24// CHECK: omp.par.region: ; preds = %[[VAL_8]]25// CHECK: br label %[[VAL_11:.*]]26// CHECK: omp.par.region1: ; preds = %[[VAL_10]]27// CHECK: %[[VAL_12:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)28// CHECK: %[[VAL_13:.*]] = call i32 @__kmpc_cancel(ptr @1, i32 %[[VAL_12]], i32 1)29// CHECK: %[[VAL_14:.*]] = icmp eq i32 %[[VAL_13]], 030// CHECK: br i1 %[[VAL_14]], label %[[VAL_15:.*]], label %[[VAL_16:.*]]31// CHECK: omp.par.region1.cncl: ; preds = %[[VAL_11]]32// CHECK: br label %[[FINI:.*]]33// CHECK: .fini:34// CHECK: %[[TID:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)35// CHECK: %[[CNCL_BARRIER:.*]] = call i32 @__kmpc_cancel_barrier(ptr @2, i32 %[[TID]])36// CHECK: br label %[[EXIT_STUB:.*]]37// CHECK: omp.par.region1.split: ; preds = %[[VAL_11]]38// CHECK: %[[VAL_20:.*]] = call i32 @__kmpc_global_thread_num(ptr @1)39// CHECK: %[[VAL_21:.*]] = call i32 @__kmpc_cancel_barrier(ptr @3, i32 %[[VAL_20]])40// CHECK: %[[VAL_22:.*]] = icmp eq i32 %[[VAL_21]], 041// CHECK: br i1 %[[VAL_22]], label %[[VAL_23:.*]], label %[[VAL_24:.*]]42// CHECK: omp.par.region1.split.cncl: ; preds = %[[VAL_15]]43// CHECK: br label %[[FINI]]44// CHECK: omp.par.region1.split.cont: ; preds = %[[VAL_15]]45// CHECK: br label %[[VAL_25:.*]]46// CHECK: omp.region.cont: ; preds = %[[VAL_23]]47// CHECK: br label %[[VAL_26:.*]]48// CHECK: omp.par.pre_finalize: ; preds = %[[VAL_25]]49// CHECK: br label %[[FINI]]50// CHECK: omp.par.exit.exitStub:51// CHECK: ret void52 53