Files
TheRock/compiler/amd-llvm/flang/test/Fir/MIF/change_team2.mlir
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

161 lines
13 KiB
MLIR

// RUN: fir-opt --mif-convert %s | FileCheck %s
// mlir generated by the example in flang/test/Lower/MIF/change_team2.f90
module attributes {dlti.dl_spec = #dlti.dl_spec<!llvm.ptr<270> = dense<32> : vector<4xi64>, !llvm.ptr<271> = dense<32> : vector<4xi64>, !llvm.ptr<272> = dense<64> : vector<4xi64>, i64 = dense<64> : vector<2xi64>, i128 = dense<128> : vector<2xi64>, f80 = dense<128> : vector<2xi64>, !llvm.ptr = dense<64> : vector<4xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i16 = dense<16> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, f64 = dense<64> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, "dlti.endianness" = "little", "dlti.mangling_mode" = "e", "dlti.legal_int_widths" = array<i32: 8, 16, 32, 64>, "dlti.stack_alignment" = 128 : i64>, fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", llvm.ident = "flang version 22.0.0 (git@github.com:SiPearl/llvm-project.git 666e4313ebc03587f27774139ad8f780bac15c3e)"} {
func.func @_QQmain() {
%0 = fir.dummy_scope : !fir.dscope
%1 = fir.alloca i32 {bindc_name = "image_status", uniq_name = "_QFEimage_status"}
%2:2 = hlfir.declare %1 {uniq_name = "_QFEimage_status"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
%3 = fir.alloca i32 {bindc_name = "new_team", uniq_name = "_QFEnew_team"}
%4:2 = hlfir.declare %3 {uniq_name = "_QFEnew_team"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
%5 = fir.address_of(@_QMiso_fortran_envECstat_failed_image) : !fir.ref<i32>
%6:2 = hlfir.declare %5 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QMiso_fortran_envECstat_failed_image"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
%7 = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "team", uniq_name = "_QFEteam"}
%8:2 = hlfir.declare %7 {uniq_name = "_QFEteam"} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>)
%9 = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
fir.copy %9 to %8#0 no_overlap : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
%10 = mif.this_image : () -> i32
%c2_i32 = arith.constant 2 : i32
%11 = arith.remsi %10, %c2_i32 : i32
%c1_i32 = arith.constant 1 : i32
%12 = arith.addi %11, %c1_i32 : i32
hlfir.assign %12 to %4#0 : i32, !fir.ref<i32>
%13 = fir.load %4#0 : !fir.ref<i32>
%14 = fir.embox %8#0 : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> !fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
mif.form_team team_number %13 team_var %14 : (i32, !fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> ()
%15 = fir.embox %8#0 : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> !fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
mif.change_team %15 : (!fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) {
%22 = mif.team_number : () -> i64
%23 = fir.convert %22 : (i64) -> i32
%24 = fir.load %4#0 : !fir.ref<i32>
%25 = arith.cmpi ne, %23, %24 : i32
cf.cond_br %25, ^bb1, ^bb2
^bb1: // pred: ^bb0
%c1_i32_5 = arith.constant 1 : i32
%false_6 = arith.constant false
%false_7 = arith.constant false
fir.call @_FortranAStopStatement(%c1_i32_5, %false_6, %false_7) fastmath<contract> : (i32, i1, i1) -> ()
fir.unreachable
^bb2: // pred: ^bb0
mif.end_team : () -> ()
}
%c0_i128 = arith.constant 0 : i128
%16:3 = hlfir.associate %c0_i128 {adapt.valuebyref} : (i128) -> (!fir.ref<i128>, !fir.ref<i128>, i1)
%17 = fir.call @_QFPruntime_popcnt(%16#0) fastmath<contract> : (!fir.ref<i128>) -> i32
%c0_i32 = arith.constant 0 : i32
%18 = arith.cmpi ne, %17, %c0_i32 : i32
hlfir.end_associate %16#1, %16#2 : !fir.ref<i128>, i1
cf.cond_br %18, ^bb1, ^bb2
^bb1: // pred: ^bb0
%c2_i32_0 = arith.constant 2 : i32
%false = arith.constant false
%false_1 = arith.constant false
fir.call @_FortranAStopStatement(%c2_i32_0, %false, %false_1) fastmath<contract> : (i32, i1, i1) -> ()
fir.unreachable
^bb2: // pred: ^bb0
%c1_i128 = arith.constant 1 : i128
%19:3 = hlfir.associate %c1_i128 {adapt.valuebyref} : (i128) -> (!fir.ref<i128>, !fir.ref<i128>, i1)
%20 = fir.call @_QFPruntime_poppar(%19#0) fastmath<contract> : (!fir.ref<i128>) -> i32
%c1_i32_2 = arith.constant 1 : i32
%21 = arith.cmpi ne, %20, %c1_i32_2 : i32
hlfir.end_associate %19#1, %19#2 : !fir.ref<i128>, i1
cf.cond_br %21, ^bb3, ^bb4
^bb3: // pred: ^bb2
%c3_i32 = arith.constant 3 : i32
%false_3 = arith.constant false
%false_4 = arith.constant false
fir.call @_FortranAStopStatement(%c3_i32, %false_3, %false_4) fastmath<contract> : (i32, i1, i1) -> ()
fir.unreachable
^bb4: // pred: ^bb2
return
}
}
// CHECK: %[[VAL_0:.*]] = fir.alloca i64
// CHECK: %[[VAL_1:.*]] = fir.alloca i64
// CHECK: %[[VAL_2:.*]] = fir.alloca i32
// CHECK: %[[VAL_3:.*]] = fir.dummy_scope : !fir.dscope
// CHECK: %[[VAL_4:.*]] = fir.alloca i32 {bindc_name = "image_status", uniq_name = "_QFEimage_status"}
// CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_4]] {uniq_name = "_QFEimage_status"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
// CHECK: %[[VAL_6:.*]] = fir.alloca i32 {bindc_name = "new_team", uniq_name = "_QFEnew_team"}
// CHECK: %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_6]] {uniq_name = "_QFEnew_team"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
// CHECK: %[[VAL_8:.*]] = fir.address_of(@_QMiso_fortran_envECstat_failed_image) : !fir.ref<i32>
// CHECK: %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_8]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QMiso_fortran_envECstat_failed_image"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
// CHECK: %[[VAL_10:.*]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}> {bindc_name = "team", uniq_name = "_QFEteam"}
// CHECK: %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]] {uniq_name = "_QFEteam"} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>)
// CHECK: %[[VAL_12:.*]] = fir.address_of(@_QQ_QM__fortran_builtinsT__builtin_team_type.DerivedInit) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
// CHECK: fir.copy %[[VAL_12]] to %[[VAL_11]]#0 no_overlap : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
// CHECK: %[[VAL_13:.*]] = fir.absent !fir.box<none>
// CHECK: fir.call @_QMprifPprif_this_image_no_coarray(%[[VAL_13]], %[[VAL_2]]) : (!fir.box<none>, !fir.ref<i32>) -> ()
// CHECK: %[[VAL_14:.*]] = fir.load %[[VAL_2]] : !fir.ref<i32>
// CHECK: %[[C2_i32:.*]] = arith.constant 2 : i32
// CHECK: %[[VAL_15:.*]] = arith.remsi %[[VAL_14]], %[[C2_i32]] : i32
// CHECK: %[[C1_i32:.*]] = arith.constant 1 : i32
// CHECK: %[[VAL_16:.*]] = arith.addi %[[VAL_15]], %[[C1_i32]] : i32
// CHECK: hlfir.assign %[[VAL_16]] to %[[VAL_7]]#0 : i32, !fir.ref<i32>
// CHECK: %[[VAL_17:.*]] = fir.load %[[VAL_7]]#0 : !fir.ref<i32>
// CHECK: %[[VAL_18:.*]] = fir.embox %[[VAL_11]]#0 : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> !fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
// CHECK: %[[VAL_19:.*]] = fir.convert %[[VAL_17]] : (i32) -> i64
// CHECK: fir.store %[[VAL_19]] to %[[VAL_1]] : !fir.ref<i64>
// CHECK: %[[VAL_20:.*]] = fir.absent !fir.ref<i32>
// CHECK: %[[VAL_21:.*]] = fir.absent !fir.ref<i32>
// CHECK: %[[VAL_22:.*]] = fir.absent !fir.box<!fir.char<1,?>>
// CHECK: %[[VAL_23:.*]] = fir.convert %[[VAL_18]] : (!fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> !fir.box<none>
// CHECK: fir.call @_QMprifPprif_form_team(%[[VAL_1]], %[[VAL_23]], %[[VAL_20]], %[[VAL_21]], %[[VAL_22]], %[[VAL_22]]) : (!fir.ref<i64>, !fir.box<none>, !fir.ref<i32>, !fir.ref<i32>, !fir.box<!fir.char<1,?>>, !fir.box<!fir.char<1,?>>) -> ()
// CHECK: %[[VAL_24:.*]] = fir.embox %[[VAL_11]]#0 : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> !fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>
// CHECK: %[[VAL_25:.*]] = fir.absent !fir.ref<i32>
// CHECK: %[[VAL_26:.*]] = fir.absent !fir.box<!fir.char<1,?>>
// CHECK: %[[VAL_27:.*]] = fir.convert %[[VAL_24]] : (!fir.box<!fir.type<_QM__fortran_builtinsT__builtin_team_type{_QM__fortran_builtinsT__builtin_team_type.__id:i64}>>) -> !fir.box<none>
// CHECK: fir.call @_QMprifPprif_change_team(%[[VAL_27]], %[[VAL_25]], %[[VAL_26]], %[[VAL_26]]) : (!fir.box<none>, !fir.ref<i32>, !fir.box<!fir.char<1,?>>, !fir.box<!fir.char<1,?>>) -> ()
// CHECK: cf.br ^bb1
// CHECK: ^bb1: // pred: ^bb0
// CHECK: %[[VAL_28:.*]] = fir.absent !fir.box<none>
// CHECK: fir.call @_QMprifPprif_team_number(%[[VAL_28]], %[[VAL_0]]) : (!fir.box<none>, !fir.ref<i64>) -> ()
// CHECK: %[[VAL_29:.*]] = fir.load %0 : !fir.ref<i64>
// CHECK: %[[VAL_30:.*]] = fir.convert %[[VAL_29]] : (i64) -> i32
// CHECK: %[[VAL_31:.*]] = fir.load %[[VAL_7]]#0 : !fir.ref<i32>
// CHECK: %[[VAL_32:.*]] = arith.cmpi ne, %[[VAL_30]], %[[VAL_31]] : i32
// CHECK: cf.cond_br %[[VAL_32]], ^bb2, ^bb3
// CHECK: ^bb2: // pred: ^bb1
// CHECK: %[[C1_i32_0:.*]] = arith.constant 1 : i32
// CHECK: %[[FALSE:.*]] = arith.constant false
// CHECK: %[[FALSE_1:.*]] = arith.constant false
// CHECK: fir.call @_FortranAStopStatement(%[[C1_i32_0]], %[[FALSE]], %[[FALSE_1]]) fastmath<contract> : (i32, i1, i1) -> ()
// CHECK: fir.unreachable
// CHECK: ^bb3: // pred: ^bb1
// CHECK: %[[VAL_33:.*]] = fir.absent !fir.ref<i32>
// CHECK: %[[VAL_34:.*]] = fir.absent !fir.box<!fir.char<1,?>>
// CHECK: fir.call @_QMprifPprif_end_team(%[[VAL_33]], %[[VAL_34]], %[[VAL_34]]) : (!fir.ref<i32>, !fir.box<!fir.char<1,?>>, !fir.box<!fir.char<1,?>>) -> ()
// CHECK: cf.br ^bb4
// CHECK: ^bb4: // pred: ^bb3
// CHECK: %[[C0_i128:.*]] = arith.constant 0 : i128
// CHECK: %[[VAL_35:.*]]:3 = hlfir.associate %[[C0_i128]] {adapt.valuebyref} : (i128) -> (!fir.ref<i128>, !fir.ref<i128>, i1)
// CHECK: %[[VAL_36:.*]] = fir.call @_QFPruntime_popcnt(%[[VAL_35]]#0) fastmath<contract> : (!fir.ref<i128>) -> i32
// CHECK: %[[C0_i32:.*]] = arith.constant 0 : i32
// CHECK: %[[VAL_37:.*]] = arith.cmpi ne, %[[VAL_36]], %[[C0_i32]] : i32
// CHECK: hlfir.end_associate %[[VAL_35]]#1, %[[VAL_35]]#2 : !fir.ref<i128>, i1
// CHECK: cf.cond_br %[[VAL_37]], ^bb5, ^bb6
// CHECK: ^bb5: // pred: ^bb4
// CHECK: %[[C2_i32_2:.*]] = arith.constant 2 : i32
// CHECK: %[[FALSE_3:.*]] = arith.constant false
// CHECK: %[[FALSE_4:.*]] = arith.constant false
// CHECK: fir.call @_FortranAStopStatement(%[[C2_i32_2]], %[[FALSE_3]], %[[FALSE_4]]) fastmath<contract> : (i32, i1, i1) -> ()
// CHECK: fir.unreachable
// CHECK: ^bb6: // pred: ^bb4
// CHECK: %[[C1_i128:.*]] = arith.constant 1 : i128
// CHECK: %[[VAL_38:.*]]:3 = hlfir.associate %[[C1_i128]] {adapt.valuebyref} : (i128) -> (!fir.ref<i128>, !fir.ref<i128>, i1)
// CHECK: %[[VAL_39:.*]] = fir.call @_QFPruntime_poppar(%[[VAL_38]]#0) fastmath<contract> : (!fir.ref<i128>) -> i32
// CHECK: %[[C1_i32_5:.*]] = arith.constant 1 : i32
// CHECK: %[[VAL_40:.*]] = arith.cmpi ne, %[[VAL_39]], %[[C1_i32_5]] : i32
// CHECK: hlfir.end_associate %[[VAL_38]]#1, %[[VAL_38]]#2 : !fir.ref<i128>, i1
// CHECK: cf.cond_br %40, ^bb7, ^bb8
// CHECK: ^bb7: // pred: ^bb6
// CHECK: %[[C3_i32:.*]] = arith.constant 3 : i32
// CHECK: %[[FALSE_6:.*]] = arith.constant false
// CHECK: %[[FALSE_7:.*]] = arith.constant false
// CHECK: fir.call @_FortranAStopStatement(%[[C3_i32]], %[[FALSE_6]], %[[FALSE_7]]) fastmath<contract> : (i32, i1, i1) -> ()
// CHECK: fir.unreachable
// CHECK: ^bb8: // pred: ^bb6
// CHECK: return