brintos

brintos / llvm-project-archived public Read only

0
0
Text · 49.5 KiB · 864d507 Raw
611 lines · plain
1// RUN: fir-opt %s --simplify-hlfir-intrinsics | FileCheck %s2 3 4//  function test_eq(x, y)5//    logical :: test_eq6//    character(len=*,kind=1) :: x, y7//    test_eq = x .eq. y8//  end function test_eq9  func.func @_QPtest_eq(%arg0: !fir.boxchar<1> {fir.bindc_name = "x"}, %arg1: !fir.boxchar<1> {fir.bindc_name = "y"}) -> !fir.logical<4> {10// CHECK-LABEL:   func.func @_QPtest_eq(11// CHECK-SAME:      %[[ARG0:.*]]: !fir.boxchar<1> {fir.bindc_name = "x"},12// CHECK-SAME:      %[[ARG1:.*]]: !fir.boxchar<1> {fir.bindc_name = "y"}) -> !fir.logical<4> {13// CHECK:           %[[VAL_5:.*]] = fir.dummy_scope : !fir.dscope14// CHECK:           %[[VAL_6:.*]] = fir.alloca !fir.logical<4> {bindc_name = "test_eq", uniq_name = "_QFtest_eqEtest_eq"}15// CHECK:           %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_6]] {uniq_name = "_QFtest_eqEtest_eq"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)16// CHECK:           %[[VAL_8:.*]]:2 = fir.unboxchar %[[ARG0]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)17// CHECK:           %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_8]]#0 typeparams %[[VAL_8]]#1 dummy_scope %[[VAL_5]] {uniq_name = "_QFtest_eqEx"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)18// CHECK:           %[[VAL_10:.*]]:2 = fir.unboxchar %[[ARG1]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)19// CHECK:           %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]]#0 typeparams %[[VAL_10]]#1 dummy_scope %[[VAL_5]] {uniq_name = "_QFtest_eqEy"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)20    %0 = fir.dummy_scope : !fir.dscope21    %1 = fir.alloca !fir.logical<4> {bindc_name = "test_eq", uniq_name = "_QFtest_eqEtest_eq"}22    %2:2 = hlfir.declare %1 {uniq_name = "_QFtest_eqEtest_eq"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)23    %3:2 = fir.unboxchar %arg0 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)24    %4:2 = hlfir.declare %3#0 typeparams %3#1 dummy_scope %0 {uniq_name = "_QFtest_eqEx"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)25    %5:2 = fir.unboxchar %arg1 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)26    %6:2 = hlfir.declare %5#0 typeparams %5#1 dummy_scope %0 {uniq_name = "_QFtest_eqEy"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)27    %7 = hlfir.cmpchar eq %4#0 %6#0 : (!fir.boxchar<1>, !fir.boxchar<1>) -> i128// CHECK:           %[[VAL_12:.*]] = arith.cmpi slt, %[[VAL_8]]#1, %[[VAL_10]]#1 : index29// CHECK:           %[[VAL_13:.*]] = arith.select %[[VAL_12]], %[[VAL_8]]#1, %[[VAL_10]]#1 : index30// CHECK:           %[[VAL_14:.*]] = fir.do_loop %[[VAL_15:.*]] = %c1 to %[[VAL_13]] step %c1 iter_args(%[[VAL_16:.*]] = %c0_i8) -> (i8) {31// CHECK:             %[[VAL_17:.*]] = arith.cmpi eq, %[[VAL_16]], %c0_i8 : i832// CHECK:             %[[VAL_18:.*]] = fir.if %[[VAL_17]] -> (i8) {33// CHECK:               %[[VAL_19:.*]] = hlfir.designate %[[VAL_9]]#0  substr %[[VAL_15]], %[[VAL_15]]  typeparams %c1 : (!fir.boxchar<1>, index, index, index) -> !fir.ref<!fir.char<1>>34// CHECK:               %[[VAL_20:.*]] = fir.load %[[VAL_19]] : !fir.ref<!fir.char<1>>35// CHECK:               %[[VAL_21:.*]] = fir.extract_value %[[VAL_20]], [0 : index] : (!fir.char<1>) -> i836// CHECK:               %[[VAL_22:.*]] = hlfir.designate %[[VAL_11]]#0  substr %[[VAL_15]], %[[VAL_15]]  typeparams %c1 : (!fir.boxchar<1>, index, index, index) -> !fir.ref<!fir.char<1>>37// CHECK:               %[[VAL_23:.*]] = fir.load %[[VAL_22]] : !fir.ref<!fir.char<1>>38// CHECK:               %[[VAL_24:.*]] = fir.extract_value %[[VAL_23]], [0 : index] : (!fir.char<1>) -> i839// CHECK:               %[[VAL_25:.*]] = arith.cmpi ult, %[[VAL_21]], %[[VAL_24]] : i840// CHECK:               %[[VAL_26:.*]] = arith.select %[[VAL_25]], %c-1_i8, %[[VAL_16]] : i841// CHECK:               %[[VAL_27:.*]] = arith.cmpi ugt, %[[VAL_21]], %[[VAL_24]] : i842// CHECK:               %[[VAL_28:.*]] = arith.select %[[VAL_27]], %c1_i8, %[[VAL_26]] : i843// CHECK:               fir.result %[[VAL_28]] : i844// CHECK:             } else {45// CHECK:               fir.result %[[VAL_16]] : i846// CHECK:             }47// CHECK:             fir.result %[[VAL_18]] : i848// CHECK:           }49// CHECK:           %[[VAL_29:.*]] = arith.cmpi sgt, %[[VAL_8]]#1, %[[VAL_10]]#1 : index50// CHECK:           %[[VAL_30:.*]] = fir.if %[[VAL_29]] -> (i8) {51// CHECK:             %[[VAL_31:.*]] = arith.subi %[[VAL_8]]#1, %[[VAL_10]]#1 : index52// CHECK:             %[[VAL_32:.*]] = fir.do_loop %[[VAL_33:.*]] = %c1 to %[[VAL_31]] step %c1 iter_args(%[[VAL_34:.*]] = %[[VAL_14]]) -> (i8) {53// CHECK:               %[[VAL_35:.*]] = arith.cmpi eq, %[[VAL_34]], %c0_i8 : i854// CHECK:               %[[VAL_36:.*]] = fir.if %[[VAL_35]] -> (i8) {55// CHECK:                 %[[VAL_37:.*]] = arith.addi %[[VAL_10]]#1, %[[VAL_33]] : index56// CHECK:                 %[[VAL_38:.*]] = hlfir.designate %[[VAL_9]]#0  substr %[[VAL_37]], %[[VAL_37]]  typeparams %c1 : (!fir.boxchar<1>, index, index, index) -> !fir.ref<!fir.char<1>>57// CHECK:                 %[[VAL_39:.*]] = fir.load %[[VAL_38]] : !fir.ref<!fir.char<1>>58// CHECK:                 %[[VAL_40:.*]] = fir.extract_value %[[VAL_39]], [0 : index] : (!fir.char<1>) -> i859// CHECK:                 %[[VAL_41:.*]] = arith.cmpi ult, %[[VAL_40]], %c32_i8 : i860// CHECK:                 %[[VAL_42:.*]] = arith.select %[[VAL_41]], %c-1_i8, %[[VAL_34]] : i861// CHECK:                 %[[VAL_43:.*]] = arith.cmpi ugt, %[[VAL_40]], %c32_i8 : i862// CHECK:                 %[[VAL_44:.*]] = arith.select %[[VAL_43]], %c1_i8, %[[VAL_42]] : i863// CHECK:                 fir.result %[[VAL_44]] : i864// CHECK:               } else {65// CHECK:                 fir.result %[[VAL_34]] : i866// CHECK:               }67// CHECK:               fir.result %[[VAL_36]] : i868// CHECK:             }69// CHECK:             fir.result %[[VAL_32]] : i870// CHECK:           } else {71// CHECK:             %[[VAL_45:.*]] = arith.subi %[[VAL_10]]#1, %[[VAL_8]]#1 : index72// CHECK:             %[[VAL_46:.*]] = fir.do_loop %[[VAL_47:.*]] = %c1 to %[[VAL_45]] step %c1 iter_args(%[[VAL_48:.*]] = %[[VAL_14]]) -> (i8) {73// CHECK:               %[[VAL_49:.*]] = arith.cmpi eq, %[[VAL_48]], %c0_i8 : i874// CHECK:               %[[VAL_50:.*]] = fir.if %[[VAL_49]] -> (i8) {75// CHECK:                 %[[VAL_51:.*]] = arith.addi %[[VAL_8]]#1, %[[VAL_47]] : index76// CHECK:                 %[[VAL_52:.*]] = hlfir.designate %[[VAL_11]]#0  substr %[[VAL_51]], %[[VAL_51]]  typeparams %c1 : (!fir.boxchar<1>, index, index, index) -> !fir.ref<!fir.char<1>>77// CHECK:                 %[[VAL_53:.*]] = fir.load %[[VAL_52]] : !fir.ref<!fir.char<1>>78// CHECK:                 %[[VAL_54:.*]] = fir.extract_value %[[VAL_53]], [0 : index] : (!fir.char<1>) -> i879// CHECK:                 %[[VAL_55:.*]] = arith.cmpi ugt, %[[VAL_54]], %c32_i8 : i880// CHECK:                 %[[VAL_56:.*]] = arith.select %[[VAL_55]], %c-1_i8, %[[VAL_48]] : i881// CHECK:                 %[[VAL_57:.*]] = arith.cmpi ult, %[[VAL_54]], %c32_i8 : i882// CHECK:                 %[[VAL_58:.*]] = arith.select %[[VAL_57]], %c1_i8, %[[VAL_56]] : i883// CHECK:                 fir.result %[[VAL_58]] : i884// CHECK:               } else {85// CHECK:                 fir.result %[[VAL_48]] : i886// CHECK:               }87// CHECK:               fir.result %[[VAL_50]] : i888// CHECK:             }89// CHECK:             fir.result %[[VAL_46]] : i890// CHECK:           }91// CHECK:           %[[VAL_59:.*]] = arith.cmpi eq, %[[VAL_30]], %c0_i8 : i892// CHECK:           %[[VAL_60:.*]] = fir.convert %[[VAL_59]] : (i1) -> !fir.logical<4>93    %8 = fir.convert %7 : (i1) -> !fir.logical<4>94    hlfir.assign %8 to %2#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>95    %9 = fir.load %2#0 : !fir.ref<!fir.logical<4>>96    return %9 : !fir.logical<4>97  }98 99//  function test_ne(c1, c2)100//    integer :: test_ne101//    character(len=1,kind=2) :: c1, c2102//    test_ne =  c1 /= c2103//  end function test_ne104  func.func @_QPtest_ne(%arg0: !fir.boxchar<2> {fir.bindc_name = "c1"}, %arg1: !fir.boxchar<2> {fir.bindc_name = "c2"}) -> i32 {105// CHECK-LABEL:   func.func @_QPtest_ne(106// CHECK-SAME:      %[[ARG0:.*]]: !fir.boxchar<2> {fir.bindc_name = "c1"},107// CHECK-SAME:      %[[ARG1:.*]]: !fir.boxchar<2> {fir.bindc_name = "c2"}) -> i32 {108// CHECK:           %[[VAL_7:.*]] = fir.dummy_scope : !fir.dscope109// CHECK:           %[[VAL_8:.*]]:2 = fir.unboxchar %[[ARG0]] : (!fir.boxchar<2>) -> (!fir.ref<!fir.char<2,?>>, index)110// CHECK:           %[[VAL_9:.*]] = fir.convert %[[VAL_8]]#0 : (!fir.ref<!fir.char<2,?>>) -> !fir.ref<!fir.char<2>>111// CHECK:           %[[VAL_10:.*]]:2 = hlfir.declare %[[VAL_9]] typeparams %c1 dummy_scope %[[VAL_7]] {uniq_name = "_QFtest_neEc1"} : (!fir.ref<!fir.char<2>>, index, !fir.dscope) -> (!fir.ref<!fir.char<2>>, !fir.ref<!fir.char<2>>)112// CHECK:           %[[VAL_11:.*]]:2 = fir.unboxchar %[[ARG1]] : (!fir.boxchar<2>) -> (!fir.ref<!fir.char<2,?>>, index)113// CHECK:           %[[VAL_12:.*]] = fir.convert %[[VAL_11]]#0 : (!fir.ref<!fir.char<2,?>>) -> !fir.ref<!fir.char<2>>114// CHECK:           %[[VAL_13:.*]]:2 = hlfir.declare %[[VAL_12]] typeparams %c1 dummy_scope %[[VAL_7]] {uniq_name = "_QFtest_neEc2"} : (!fir.ref<!fir.char<2>>, index, !fir.dscope) -> (!fir.ref<!fir.char<2>>, !fir.ref<!fir.char<2>>)115// CHECK:           %[[VAL_14:.*]] = fir.alloca i32 {bindc_name = "test_ne", uniq_name = "_QFtest_neEtest_ne"}116// CHECK:           %[[VAL_15:.*]]:2 = hlfir.declare %[[VAL_14]] {uniq_name = "_QFtest_neEtest_ne"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)117    %0 = fir.dummy_scope : !fir.dscope118    %1:2 = fir.unboxchar %arg0 : (!fir.boxchar<2>) -> (!fir.ref<!fir.char<2,?>>, index)119    %2 = fir.convert %1#0 : (!fir.ref<!fir.char<2,?>>) -> !fir.ref<!fir.char<2>>120    %c1 = arith.constant 1 : index121    %3:2 = hlfir.declare %2 typeparams %c1 dummy_scope %0 {uniq_name = "_QFtest_neEc1"} : (!fir.ref<!fir.char<2>>, index, !fir.dscope) -> (!fir.ref<!fir.char<2>>, !fir.ref<!fir.char<2>>)122    %4:2 = fir.unboxchar %arg1 : (!fir.boxchar<2>) -> (!fir.ref<!fir.char<2,?>>, index)123    %5 = fir.convert %4#0 : (!fir.ref<!fir.char<2,?>>) -> !fir.ref<!fir.char<2>>124    %c1_0 = arith.constant 1 : index125    %6:2 = hlfir.declare %5 typeparams %c1_0 dummy_scope %0 {uniq_name = "_QFtest_neEc2"} : (!fir.ref<!fir.char<2>>, index, !fir.dscope) -> (!fir.ref<!fir.char<2>>, !fir.ref<!fir.char<2>>)126    %7 = fir.alloca i32 {bindc_name = "test_ne", uniq_name = "_QFtest_neEtest_ne"}127    %8:2 = hlfir.declare %7 {uniq_name = "_QFtest_neEtest_ne"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)128    %9 = hlfir.cmpchar ne %3#0 %6#0 : (!fir.ref<!fir.char<2>>, !fir.ref<!fir.char<2>>) -> i1129// CHECK:           %[[VAL_16:.*]] = fir.do_loop %[[VAL_17:.*]] = %c1 to %c1 step %c1 iter_args(%[[VAL_18:.*]] = %c0_i16) -> (i16) {130// CHECK:             %[[VAL_19:.*]] = arith.cmpi eq, %[[VAL_18]], %c0_i16 : i16131// CHECK:             %[[VAL_20:.*]] = fir.if %[[VAL_19]] -> (i16) {132// CHECK:               %[[VAL_21:.*]] = hlfir.designate %[[VAL_10]]#0  substr %[[VAL_17]], %[[VAL_17]]  typeparams %c1 : (!fir.ref<!fir.char<2>>, index, index, index) -> !fir.ref<!fir.char<2>>133// CHECK:               %[[VAL_22:.*]] = fir.load %[[VAL_21]] : !fir.ref<!fir.char<2>>134// CHECK:               %[[VAL_23:.*]] = fir.extract_value %[[VAL_22]], [0 : index] : (!fir.char<2>) -> i16135// CHECK:               %[[VAL_24:.*]] = hlfir.designate %[[VAL_13]]#0  substr %[[VAL_17]], %[[VAL_17]]  typeparams %c1 : (!fir.ref<!fir.char<2>>, index, index, index) -> !fir.ref<!fir.char<2>>136// CHECK:               %[[VAL_25:.*]] = fir.load %[[VAL_24]] : !fir.ref<!fir.char<2>>137// CHECK:               %[[VAL_26:.*]] = fir.extract_value %[[VAL_25]], [0 : index] : (!fir.char<2>) -> i16138// CHECK:               %[[VAL_27:.*]] = arith.cmpi ult, %[[VAL_23]], %[[VAL_26]] : i16139// CHECK:               %[[VAL_28:.*]] = arith.select %[[VAL_27]], %c-1_i16, %[[VAL_18]] : i16140// CHECK:               %[[VAL_29:.*]] = arith.cmpi ugt, %[[VAL_23]], %[[VAL_26]] : i16141// CHECK:               %[[VAL_30:.*]] = arith.select %[[VAL_29]], %c1_i16, %[[VAL_28]] : i16142// CHECK:               fir.result %[[VAL_30]] : i16143// CHECK:             } else {144// CHECK:               fir.result %[[VAL_18]] : i16145// CHECK:             }146// CHECK:             fir.result %[[VAL_20]] : i16147// CHECK:           }148// CHECK:           %[[VAL_31:.*]] = fir.if %false -> (i16) {149// CHECK:             %[[VAL_32:.*]] = fir.do_loop %[[VAL_33:.*]] = %c1 to %c0 step %c1 iter_args(%[[VAL_34:.*]] = %[[VAL_16]]) -> (i16) {150// CHECK:               %[[VAL_35:.*]] = arith.cmpi eq, %[[VAL_34]], %c0_i16 : i16151// CHECK:               %[[VAL_36:.*]] = fir.if %[[VAL_35]] -> (i16) {152// CHECK:                 %[[VAL_37:.*]] = arith.addi %[[VAL_33]], %c1 : index153// CHECK:                 %[[VAL_38:.*]] = hlfir.designate %[[VAL_10]]#0  substr %[[VAL_37]], %[[VAL_37]]  typeparams %c1 : (!fir.ref<!fir.char<2>>, index, index, index) -> !fir.ref<!fir.char<2>>154// CHECK:                 %[[VAL_39:.*]] = fir.load %[[VAL_38]] : !fir.ref<!fir.char<2>>155// CHECK:                 %[[VAL_40:.*]] = fir.extract_value %[[VAL_39]], [0 : index] : (!fir.char<2>) -> i16156// CHECK:                 %[[VAL_41:.*]] = arith.cmpi ult, %[[VAL_40]], %c32_i16 : i16157// CHECK:                 %[[VAL_42:.*]] = arith.select %[[VAL_41]], %c-1_i16, %[[VAL_34]] : i16158// CHECK:                 %[[VAL_43:.*]] = arith.cmpi ugt, %[[VAL_40]], %c32_i16 : i16159// CHECK:                 %[[VAL_44:.*]] = arith.select %[[VAL_43]], %c1_i16, %[[VAL_42]] : i16160// CHECK:                 fir.result %[[VAL_44]] : i16161// CHECK:               } else {162// CHECK:                 fir.result %[[VAL_34]] : i16163// CHECK:               }164// CHECK:               fir.result %[[VAL_36]] : i16165// CHECK:             }166// CHECK:             fir.result %[[VAL_32]] : i16167// CHECK:           } else {168// CHECK:             %[[VAL_45:.*]] = fir.do_loop %[[VAL_46:.*]] = %c1 to %c0 step %c1 iter_args(%[[VAL_47:.*]] = %[[VAL_16]]) -> (i16) {169// CHECK:               %[[VAL_48:.*]] = arith.cmpi eq, %[[VAL_47]], %c0_i16 : i16170// CHECK:               %[[VAL_49:.*]] = fir.if %[[VAL_48]] -> (i16) {171// CHECK:                 %[[VAL_50:.*]] = arith.addi %[[VAL_46]], %c1 : index172// CHECK:                 %[[VAL_51:.*]] = hlfir.designate %[[VAL_13]]#0  substr %[[VAL_50]], %[[VAL_50]]  typeparams %c1 : (!fir.ref<!fir.char<2>>, index, index, index) -> !fir.ref<!fir.char<2>>173// CHECK:                 %[[VAL_52:.*]] = fir.load %[[VAL_51]] : !fir.ref<!fir.char<2>>174// CHECK:                 %[[VAL_53:.*]] = fir.extract_value %[[VAL_52]], [0 : index] : (!fir.char<2>) -> i16175// CHECK:                 %[[VAL_54:.*]] = arith.cmpi ugt, %[[VAL_53]], %c32_i16 : i16176// CHECK:                 %[[VAL_55:.*]] = arith.select %[[VAL_54]], %c-1_i16, %[[VAL_47]] : i16177// CHECK:                 %[[VAL_56:.*]] = arith.cmpi ult, %[[VAL_53]], %c32_i16 : i16178// CHECK:                 %[[VAL_57:.*]] = arith.select %[[VAL_56]], %c1_i16, %[[VAL_55]] : i16179// CHECK:                 fir.result %[[VAL_57]] : i16180// CHECK:               } else {181// CHECK:                 fir.result %[[VAL_47]] : i16182// CHECK:               }183// CHECK:               fir.result %[[VAL_49]] : i16184// CHECK:             }185// CHECK:             fir.result %[[VAL_45]] : i16186// CHECK:           }187// CHECK:           %[[VAL_58:.*]] = arith.cmpi ne, %[[VAL_31]], %c0_i16 : i16188// CHECK:           %[[VAL_59:.*]] = fir.convert %[[VAL_58]] : (i1) -> i32189    %10 = fir.convert %9 : (i1) -> i32190    hlfir.assign %10 to %8#0 : i32, !fir.ref<i32>191    %11 = fir.load %8#0 : !fir.ref<i32>192    return %11 : i32193  }194 195//  function test1196//    logical :: test1197//    character*1 :: c1, c2198//    c1 = ''199//    c2 = char(255)200//    test1  = c1 .gt. c2201//  end function test1202  func.func @_QPtest1() -> !fir.logical<4> {203// CHECK-LABEL:   func.func @_QPtest1() -> !fir.logical<4> {204// CHECK:           %[[VAL_7:.*]] = fir.dummy_scope : !fir.dscope205// CHECK:           %[[VAL_8:.*]] = fir.alloca !fir.char<1> {bindc_name = "c1", uniq_name = "_QFtest1Ec1"}206// CHECK:           %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_8]] typeparams %c1 {uniq_name = "_QFtest1Ec1"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)207// CHECK:           %[[VAL_10:.*]] = fir.alloca !fir.char<1> {bindc_name = "c2", uniq_name = "_QFtest1Ec2"}208// CHECK:           %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]] typeparams %c1 {uniq_name = "_QFtest1Ec2"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)209// CHECK:           %[[VAL_12:.*]] = fir.alloca !fir.logical<4> {bindc_name = "test1", uniq_name = "_QFtest1Etest1"}210// CHECK:           %[[VAL_13:.*]]:2 = hlfir.declare %[[VAL_12]] {uniq_name = "_QFtest1Etest1"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)211// CHECK:           %[[VAL_14:.*]] = fir.address_of(@_QQclX) : !fir.ref<!fir.char<1,0>>212// CHECK:           %[[VAL_15:.*]]:2 = hlfir.declare %[[VAL_14]] typeparams %c0 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX"} : (!fir.ref<!fir.char<1,0>>, index) -> (!fir.ref<!fir.char<1,0>>, !fir.ref<!fir.char<1,0>>)213// CHECK:           hlfir.assign %[[VAL_15]]#0 to %[[VAL_9]]#0 : !fir.ref<!fir.char<1,0>>, !fir.ref<!fir.char<1>>214// CHECK:           %[[VAL_16:.*]] = fir.address_of(@_QQclXFF) : !fir.ref<!fir.char<1>>215// CHECK:           %[[VAL_17:.*]]:2 = hlfir.declare %[[VAL_16]] typeparams %c1 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclXFF"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)216// CHECK:           hlfir.assign %[[VAL_17]]#0 to %[[VAL_11]]#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>217    %0 = fir.dummy_scope : !fir.dscope218    %c1 = arith.constant 1 : index219    %1 = fir.alloca !fir.char<1> {bindc_name = "c1", uniq_name = "_QFtest1Ec1"}220    %2:2 = hlfir.declare %1 typeparams %c1 {uniq_name = "_QFtest1Ec1"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)221    %c1_0 = arith.constant 1 : index222    %3 = fir.alloca !fir.char<1> {bindc_name = "c2", uniq_name = "_QFtest1Ec2"}223    %4:2 = hlfir.declare %3 typeparams %c1_0 {uniq_name = "_QFtest1Ec2"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)224    %5 = fir.alloca !fir.logical<4> {bindc_name = "test1", uniq_name = "_QFtest1Etest1"}225    %6:2 = hlfir.declare %5 {uniq_name = "_QFtest1Etest1"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)226    %7 = fir.address_of(@_QQclX) : !fir.ref<!fir.char<1,0>>227    %c0 = arith.constant 0 : index228    %8:2 = hlfir.declare %7 typeparams %c0 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX"} : (!fir.ref<!fir.char<1,0>>, index) -> (!fir.ref<!fir.char<1,0>>, !fir.ref<!fir.char<1,0>>)229    hlfir.assign %8#0 to %2#0 : !fir.ref<!fir.char<1,0>>, !fir.ref<!fir.char<1>>230    %9 = fir.address_of(@_QQclXFF) : !fir.ref<!fir.char<1>>231    %c1_1 = arith.constant 1 : index232    %10:2 = hlfir.declare %9 typeparams %c1_1 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclXFF"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)233    hlfir.assign %10#0 to %4#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>234    %11 = hlfir.cmpchar sgt %2#0 %4#0 : (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>) -> i1235// CHECK:           %[[VAL_18:.*]] = fir.do_loop %[[VAL_19:.*]] = %c1 to %c1 step %c1 iter_args(%[[VAL_20:.*]] = %c0_i8) -> (i8) {236// CHECK:             %[[VAL_21:.*]] = arith.cmpi eq, %[[VAL_20]], %c0_i8 : i8237// CHECK:             %[[VAL_22:.*]] = fir.if %[[VAL_21]] -> (i8) {238// CHECK:               %[[VAL_23:.*]] = hlfir.designate %[[VAL_9]]#0  substr %[[VAL_19]], %[[VAL_19]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>239// CHECK:               %[[VAL_24:.*]] = fir.load %[[VAL_23]] : !fir.ref<!fir.char<1>>240// CHECK:               %[[VAL_25:.*]] = fir.extract_value %[[VAL_24]], [0 : index] : (!fir.char<1>) -> i8241// CHECK:               %[[VAL_26:.*]] = hlfir.designate %[[VAL_11]]#0  substr %[[VAL_19]], %[[VAL_19]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>242// CHECK:               %[[VAL_27:.*]] = fir.load %[[VAL_26]] : !fir.ref<!fir.char<1>>243// CHECK:               %[[VAL_28:.*]] = fir.extract_value %[[VAL_27]], [0 : index] : (!fir.char<1>) -> i8244// CHECK:               %[[VAL_29:.*]] = arith.cmpi ult, %[[VAL_25]], %[[VAL_28]] : i8245// CHECK:               %[[VAL_30:.*]] = arith.select %[[VAL_29]], %c-1_i8, %[[VAL_20]] : i8246// CHECK:               %[[VAL_31:.*]] = arith.cmpi ugt, %[[VAL_25]], %[[VAL_28]] : i8247// CHECK:               %[[VAL_32:.*]] = arith.select %[[VAL_31]], %c1_i8, %[[VAL_30]] : i8248// CHECK:               fir.result %[[VAL_32]] : i8249// CHECK:             } else {250// CHECK:               fir.result %[[VAL_20]] : i8251// CHECK:             }252// CHECK:             fir.result %[[VAL_22]] : i8253// CHECK:           }254// CHECK:           %[[VAL_33:.*]] = fir.if %false -> (i8) {255// CHECK:             %[[VAL_34:.*]] = fir.do_loop %[[VAL_35:.*]] = %c1 to %c0 step %c1 iter_args(%[[VAL_36:.*]] = %[[VAL_18]]) -> (i8) {256// CHECK:               %[[VAL_37:.*]] = arith.cmpi eq, %[[VAL_36]], %c0_i8 : i8257// CHECK:               %[[VAL_38:.*]] = fir.if %[[VAL_37]] -> (i8) {258// CHECK:                 %[[VAL_39:.*]] = arith.addi %[[VAL_35]], %c1 : index259// CHECK:                 %[[VAL_40:.*]] = hlfir.designate %[[VAL_9]]#0  substr %[[VAL_39]], %[[VAL_39]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>260// CHECK:                 %[[VAL_41:.*]] = fir.load %[[VAL_40]] : !fir.ref<!fir.char<1>>261// CHECK:                 %[[VAL_42:.*]] = fir.extract_value %[[VAL_41]], [0 : index] : (!fir.char<1>) -> i8262// CHECK:                 %[[VAL_43:.*]] = arith.cmpi ult, %[[VAL_42]], %c32_i8 : i8263// CHECK:                 %[[VAL_44:.*]] = arith.select %[[VAL_43]], %c-1_i8, %[[VAL_36]] : i8264// CHECK:                 %[[VAL_45:.*]] = arith.cmpi ugt, %[[VAL_42]], %c32_i8 : i8265// CHECK:                 %[[VAL_46:.*]] = arith.select %[[VAL_45]], %c1_i8, %[[VAL_44]] : i8266// CHECK:                 fir.result %[[VAL_46]] : i8267// CHECK:               } else {268// CHECK:                 fir.result %[[VAL_36]] : i8269// CHECK:               }270// CHECK:               fir.result %[[VAL_38]] : i8271// CHECK:             }272// CHECK:             fir.result %[[VAL_34]] : i8273// CHECK:           } else {274// CHECK:             %[[VAL_47:.*]] = fir.do_loop %[[VAL_48:.*]] = %c1 to %c0 step %c1 iter_args(%[[VAL_49:.*]] = %[[VAL_18]]) -> (i8) {275// CHECK:               %[[VAL_50:.*]] = arith.cmpi eq, %[[VAL_49]], %c0_i8 : i8276// CHECK:               %[[VAL_51:.*]] = fir.if %[[VAL_50]] -> (i8) {277// CHECK:                 %[[VAL_52:.*]] = arith.addi %[[VAL_48]], %c1 : index278// CHECK:                 %[[VAL_53:.*]] = hlfir.designate %[[VAL_11]]#0  substr %[[VAL_52]], %[[VAL_52]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>279// CHECK:                 %[[VAL_54:.*]] = fir.load %[[VAL_53]] : !fir.ref<!fir.char<1>>280// CHECK:                 %[[VAL_55:.*]] = fir.extract_value %[[VAL_54]], [0 : index] : (!fir.char<1>) -> i8281// CHECK:                 %[[VAL_56:.*]] = arith.cmpi ugt, %[[VAL_55]], %c32_i8 : i8282// CHECK:                 %[[VAL_57:.*]] = arith.select %[[VAL_56]], %c-1_i8, %[[VAL_49]] : i8283// CHECK:                 %[[VAL_58:.*]] = arith.cmpi ult, %[[VAL_55]], %c32_i8 : i8284// CHECK:                 %[[VAL_59:.*]] = arith.select %[[VAL_58]], %c1_i8, %[[VAL_57]] : i8285// CHECK:                 fir.result %[[VAL_59]] : i8286// CHECK:               } else {287// CHECK:                 fir.result %[[VAL_49]] : i8288// CHECK:               }289// CHECK:               fir.result %[[VAL_51]] : i8290// CHECK:             }291// CHECK:             fir.result %[[VAL_47]] : i8292// CHECK:           }293// CHECK:           %[[VAL_60:.*]] = arith.cmpi sgt, %[[VAL_33]], %c0_i8 : i8294// CHECK:           %[[VAL_61:.*]] = fir.convert %[[VAL_60]] : (i1) -> !fir.logical<4>295    %12 = fir.convert %11 : (i1) -> !fir.logical<4>296    hlfir.assign %12 to %6#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>297    %13 = fir.load %6#0 : !fir.ref<!fir.logical<4>>298    return %13 : !fir.logical<4>299  }300 301//  function test2302//    logical :: test2303//    character*1 :: c1304//    c1 = ' '305//    test2  = c1 .lt. ' ' // char(255)306//  end function test2307  func.func @_QPtest2() -> !fir.logical<4> {308// CHECK-LABEL:   func.func @_QPtest2() -> !fir.logical<4> {309// CHECK:           %[[VAL_8:.*]] = fir.dummy_scope : !fir.dscope310// CHECK:           %[[VAL_9:.*]] = fir.alloca !fir.char<1> {bindc_name = "c1", uniq_name = "_QFtest2Ec1"}311// CHECK:           %[[VAL_10:.*]]:2 = hlfir.declare %[[VAL_9]] typeparams %c1 {uniq_name = "_QFtest2Ec1"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)312// CHECK:           %[[VAL_11:.*]] = fir.alloca !fir.logical<4> {bindc_name = "test2", uniq_name = "_QFtest2Etest2"}313// CHECK:           %[[VAL_12:.*]]:2 = hlfir.declare %[[VAL_11]] {uniq_name = "_QFtest2Etest2"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)314// CHECK:           %[[VAL_13:.*]] = fir.address_of(@_QQclX20) : !fir.ref<!fir.char<1>>315// CHECK:           %[[VAL_14:.*]]:2 = hlfir.declare %[[VAL_13]] typeparams %c1 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX20"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)316// CHECK:           hlfir.assign %[[VAL_14]]#0 to %[[VAL_10]]#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>317// CHECK:           %[[VAL_15:.*]] = fir.address_of(@_QQclX20FF) : !fir.ref<!fir.char<1,2>>318// CHECK:           %[[VAL_16:.*]]:2 = hlfir.declare %[[VAL_15]] typeparams %c2 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX20FF"} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)319    %0 = fir.dummy_scope : !fir.dscope320    %c1 = arith.constant 1 : index321    %1 = fir.alloca !fir.char<1> {bindc_name = "c1", uniq_name = "_QFtest2Ec1"}322    %2:2 = hlfir.declare %1 typeparams %c1 {uniq_name = "_QFtest2Ec1"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)323    %3 = fir.alloca !fir.logical<4> {bindc_name = "test2", uniq_name = "_QFtest2Etest2"}324    %4:2 = hlfir.declare %3 {uniq_name = "_QFtest2Etest2"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)325    %5 = fir.address_of(@_QQclX20) : !fir.ref<!fir.char<1>>326    %c1_0 = arith.constant 1 : index327    %6:2 = hlfir.declare %5 typeparams %c1_0 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX20"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)328    hlfir.assign %6#0 to %2#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>329    %7 = fir.address_of(@_QQclX20FF) : !fir.ref<!fir.char<1,2>>330    %c2 = arith.constant 2 : index331    %8:2 = hlfir.declare %7 typeparams %c2 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX20FF"} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)332    %9 = hlfir.cmpchar slt %2#0 %8#0 : (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1,2>>) -> i1333// CHECK:           %[[VAL_17:.*]] = fir.do_loop %[[VAL_18:.*]] = %c1 to %c1 step %c1 iter_args(%[[VAL_19:.*]] = %c0_i8) -> (i8) {334// CHECK:             %[[VAL_20:.*]] = arith.cmpi eq, %[[VAL_19]], %c0_i8 : i8335// CHECK:             %[[VAL_21:.*]] = fir.if %[[VAL_20]] -> (i8) {336// CHECK:               %[[VAL_22:.*]] = hlfir.designate %[[VAL_10]]#0  substr %[[VAL_18]], %[[VAL_18]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>337// CHECK:               %[[VAL_23:.*]] = fir.load %[[VAL_22]] : !fir.ref<!fir.char<1>>338// CHECK:               %[[VAL_24:.*]] = fir.extract_value %[[VAL_23]], [0 : index] : (!fir.char<1>) -> i8339// CHECK:               %[[VAL_25:.*]] = hlfir.designate %[[VAL_16]]#0  substr %[[VAL_18]], %[[VAL_18]]  typeparams %c1 : (!fir.ref<!fir.char<1,2>>, index, index, index) -> !fir.ref<!fir.char<1>>340// CHECK:               %[[VAL_26:.*]] = fir.load %[[VAL_25]] : !fir.ref<!fir.char<1>>341// CHECK:               %[[VAL_27:.*]] = fir.extract_value %[[VAL_26]], [0 : index] : (!fir.char<1>) -> i8342// CHECK:               %[[VAL_28:.*]] = arith.cmpi ult, %[[VAL_24]], %[[VAL_27]] : i8343// CHECK:               %[[VAL_29:.*]] = arith.select %[[VAL_28]], %c-1_i8, %[[VAL_19]] : i8344// CHECK:               %[[VAL_30:.*]] = arith.cmpi ugt, %[[VAL_24]], %[[VAL_27]] : i8345// CHECK:               %[[VAL_31:.*]] = arith.select %[[VAL_30]], %c1_i8, %[[VAL_29]] : i8346// CHECK:               fir.result %[[VAL_31]] : i8347// CHECK:             } else {348// CHECK:               fir.result %[[VAL_19]] : i8349// CHECK:             }350// CHECK:             fir.result %[[VAL_21]] : i8351// CHECK:           }352// CHECK:           %[[VAL_32:.*]] = fir.if %false -> (i8) {353// CHECK:             %[[VAL_33:.*]] = fir.do_loop %[[VAL_34:.*]] = %c1 to %c-1 step %c1 iter_args(%[[VAL_35:.*]] = %[[VAL_17]]) -> (i8) {354// CHECK:               %[[VAL_36:.*]] = arith.cmpi eq, %[[VAL_35]], %c0_i8 : i8355// CHECK:               %[[VAL_37:.*]] = fir.if %[[VAL_36]] -> (i8) {356// CHECK:                 %[[VAL_38:.*]] = arith.addi %[[VAL_34]], %c2 : index357// CHECK:                 %[[VAL_39:.*]] = hlfir.designate %[[VAL_10]]#0  substr %[[VAL_38]], %[[VAL_38]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>358// CHECK:                 %[[VAL_40:.*]] = fir.load %[[VAL_39]] : !fir.ref<!fir.char<1>>359// CHECK:                 %[[VAL_41:.*]] = fir.extract_value %[[VAL_40]], [0 : index] : (!fir.char<1>) -> i8360// CHECK:                 %[[VAL_42:.*]] = arith.cmpi ult, %[[VAL_41]], %c32_i8 : i8361// CHECK:                 %[[VAL_43:.*]] = arith.select %[[VAL_42]], %c-1_i8, %[[VAL_35]] : i8362// CHECK:                 %[[VAL_44:.*]] = arith.cmpi ugt, %[[VAL_41]], %c32_i8 : i8363// CHECK:                 %[[VAL_45:.*]] = arith.select %[[VAL_44]], %c1_i8, %[[VAL_43]] : i8364// CHECK:                 fir.result %[[VAL_45]] : i8365// CHECK:               } else {366// CHECK:                 fir.result %[[VAL_35]] : i8367// CHECK:               }368// CHECK:               fir.result %[[VAL_37]] : i8369// CHECK:             }370// CHECK:             fir.result %[[VAL_33]] : i8371// CHECK:           } else {372// CHECK:             %[[VAL_46:.*]] = fir.do_loop %[[VAL_47:.*]] = %c1 to %c1 step %c1 iter_args(%[[VAL_48:.*]] = %[[VAL_17]]) -> (i8) {373// CHECK:               %[[VAL_49:.*]] = arith.cmpi eq, %[[VAL_48]], %c0_i8 : i8374// CHECK:               %[[VAL_50:.*]] = fir.if %[[VAL_49]] -> (i8) {375// CHECK:                 %[[VAL_51:.*]] = arith.addi %[[VAL_47]], %c1 : index376// CHECK:                 %[[VAL_52:.*]] = hlfir.designate %[[VAL_16]]#0  substr %[[VAL_51]], %[[VAL_51]]  typeparams %c1 : (!fir.ref<!fir.char<1,2>>, index, index, index) -> !fir.ref<!fir.char<1>>377// CHECK:                 %[[VAL_53:.*]] = fir.load %[[VAL_52]] : !fir.ref<!fir.char<1>>378// CHECK:                 %[[VAL_54:.*]] = fir.extract_value %[[VAL_53]], [0 : index] : (!fir.char<1>) -> i8379// CHECK:                 %[[VAL_55:.*]] = arith.cmpi ugt, %[[VAL_54]], %c32_i8 : i8380// CHECK:                 %[[VAL_56:.*]] = arith.select %[[VAL_55]], %c-1_i8, %[[VAL_48]] : i8381// CHECK:                 %[[VAL_57:.*]] = arith.cmpi ult, %[[VAL_54]], %c32_i8 : i8382// CHECK:                 %[[VAL_58:.*]] = arith.select %[[VAL_57]], %c1_i8, %[[VAL_56]] : i8383// CHECK:                 fir.result %[[VAL_58]] : i8384// CHECK:               } else {385// CHECK:                 fir.result %[[VAL_48]] : i8386// CHECK:               }387// CHECK:               fir.result %[[VAL_50]] : i8388// CHECK:             }389// CHECK:             fir.result %[[VAL_46]] : i8390// CHECK:           }391// CHECK:           %[[VAL_59:.*]] = arith.cmpi slt, %[[VAL_32]], %c0_i8 : i8392// CHECK:           %[[VAL_60:.*]] = fir.convert %[[VAL_59]] : (i1) -> !fir.logical<4>393    %10 = fir.convert %9 : (i1) -> !fir.logical<4>394    hlfir.assign %10 to %4#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>395    %11 = fir.load %4#0 : !fir.ref<!fir.logical<4>>396    return %11 : !fir.logical<4>397  }398 399//  function test3400//    logical :: test3401//    character*1 :: c1, c2402//    c2 = 'a' // 'b'403//    c1 = 'a'404//    test3  = c2 .gt. c1405//  end function test3406  func.func @_QPtest3() -> !fir.logical<4> {407// CHECK-LABEL:   func.func @_QPtest3() -> !fir.logical<4> {408// CHECK:           %[[VAL_8:.*]] = fir.dummy_scope : !fir.dscope409// CHECK:           %[[VAL_9:.*]] = fir.alloca !fir.char<1> {bindc_name = "c1", uniq_name = "_QFtest3Ec1"}410// CHECK:           %[[VAL_10:.*]]:2 = hlfir.declare %[[VAL_9]] typeparams %c1 {uniq_name = "_QFtest3Ec1"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)411// CHECK:           %[[VAL_11:.*]] = fir.alloca !fir.char<1> {bindc_name = "c2", uniq_name = "_QFtest3Ec2"}412// CHECK:           %[[VAL_12:.*]]:2 = hlfir.declare %[[VAL_11]] typeparams %c1 {uniq_name = "_QFtest3Ec2"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)413// CHECK:           %[[VAL_13:.*]] = fir.alloca !fir.logical<4> {bindc_name = "test3", uniq_name = "_QFtest3Etest3"}414// CHECK:           %[[VAL_14:.*]]:2 = hlfir.declare %[[VAL_13]] {uniq_name = "_QFtest3Etest3"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)415// CHECK:           %[[VAL_15:.*]] = fir.address_of(@_QQclX6162) : !fir.ref<!fir.char<1,2>>416// CHECK:           %[[VAL_16:.*]]:2 = hlfir.declare %[[VAL_15]] typeparams %c2 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX6162"} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)417// CHECK:           hlfir.assign %[[VAL_16]]#0 to %[[VAL_12]]#0 : !fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1>>418// CHECK:           %[[VAL_17:.*]] = fir.address_of(@_QQclX61) : !fir.ref<!fir.char<1>>419// CHECK:           %[[VAL_18:.*]]:2 = hlfir.declare %[[VAL_17]] typeparams %c1 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX61"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)420// CHECK:           hlfir.assign %[[VAL_18]]#0 to %[[VAL_10]]#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>421    %0 = fir.dummy_scope : !fir.dscope422    %c1 = arith.constant 1 : index423    %1 = fir.alloca !fir.char<1> {bindc_name = "c1", uniq_name = "_QFtest3Ec1"}424    %2:2 = hlfir.declare %1 typeparams %c1 {uniq_name = "_QFtest3Ec1"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)425    %c1_0 = arith.constant 1 : index426    %3 = fir.alloca !fir.char<1> {bindc_name = "c2", uniq_name = "_QFtest3Ec2"}427    %4:2 = hlfir.declare %3 typeparams %c1_0 {uniq_name = "_QFtest3Ec2"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)428    %5 = fir.alloca !fir.logical<4> {bindc_name = "test3", uniq_name = "_QFtest3Etest3"}429    %6:2 = hlfir.declare %5 {uniq_name = "_QFtest3Etest3"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)430    %7 = fir.address_of(@_QQclX6162) : !fir.ref<!fir.char<1,2>>431    %c2 = arith.constant 2 : index432    %8:2 = hlfir.declare %7 typeparams %c2 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX6162"} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)433    hlfir.assign %8#0 to %4#0 : !fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1>>434    %9 = fir.address_of(@_QQclX61) : !fir.ref<!fir.char<1>>435    %c1_1 = arith.constant 1 : index436    %10:2 = hlfir.declare %9 typeparams %c1_1 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX61"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)437    hlfir.assign %10#0 to %2#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>438    %11 = hlfir.cmpchar sgt %4#0 %2#0 : (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>) -> i1439// CHECK:           %[[VAL_19:.*]] = fir.do_loop %[[VAL_20:.*]] = %c1 to %c1 step %c1 iter_args(%[[VAL_21:.*]] = %c0_i8) -> (i8) {440// CHECK:             %[[VAL_22:.*]] = arith.cmpi eq, %[[VAL_21]], %c0_i8 : i8441// CHECK:             %[[VAL_23:.*]] = fir.if %[[VAL_22]] -> (i8) {442// CHECK:               %[[VAL_24:.*]] = hlfir.designate %[[VAL_12]]#0  substr %[[VAL_20]], %[[VAL_20]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>443// CHECK:               %[[VAL_25:.*]] = fir.load %[[VAL_24]] : !fir.ref<!fir.char<1>>444// CHECK:               %[[VAL_26:.*]] = fir.extract_value %[[VAL_25]], [0 : index] : (!fir.char<1>) -> i8445// CHECK:               %[[VAL_27:.*]] = hlfir.designate %[[VAL_10]]#0  substr %[[VAL_20]], %[[VAL_20]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>446// CHECK:               %[[VAL_28:.*]] = fir.load %[[VAL_27]] : !fir.ref<!fir.char<1>>447// CHECK:               %[[VAL_29:.*]] = fir.extract_value %[[VAL_28]], [0 : index] : (!fir.char<1>) -> i8448// CHECK:               %[[VAL_30:.*]] = arith.cmpi ult, %[[VAL_26]], %[[VAL_29]] : i8449// CHECK:               %[[VAL_31:.*]] = arith.select %[[VAL_30]], %c-1_i8, %[[VAL_21]] : i8450// CHECK:               %[[VAL_32:.*]] = arith.cmpi ugt, %[[VAL_26]], %[[VAL_29]] : i8451// CHECK:               %[[VAL_33:.*]] = arith.select %[[VAL_32]], %c1_i8, %[[VAL_31]] : i8452// CHECK:               fir.result %[[VAL_33]] : i8453// CHECK:             } else {454// CHECK:               fir.result %[[VAL_21]] : i8455// CHECK:             }456// CHECK:             fir.result %[[VAL_23]] : i8457// CHECK:           }458// CHECK:           %[[VAL_34:.*]] = fir.if %false -> (i8) {459// CHECK:             %[[VAL_35:.*]] = fir.do_loop %[[VAL_36:.*]] = %c1 to %c0 step %c1 iter_args(%[[VAL_37:.*]] = %[[VAL_19]]) -> (i8) {460// CHECK:               %[[VAL_38:.*]] = arith.cmpi eq, %[[VAL_37]], %c0_i8 : i8461// CHECK:               %[[VAL_39:.*]] = fir.if %[[VAL_38]] -> (i8) {462// CHECK:                 %[[VAL_40:.*]] = arith.addi %[[VAL_36]], %c1 : index463// CHECK:                 %[[VAL_41:.*]] = hlfir.designate %[[VAL_12]]#0  substr %[[VAL_40]], %[[VAL_40]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>464// CHECK:                 %[[VAL_42:.*]] = fir.load %[[VAL_41]] : !fir.ref<!fir.char<1>>465// CHECK:                 %[[VAL_43:.*]] = fir.extract_value %[[VAL_42]], [0 : index] : (!fir.char<1>) -> i8466// CHECK:                 %[[VAL_44:.*]] = arith.cmpi ult, %[[VAL_43]], %c32_i8 : i8467// CHECK:                 %[[VAL_45:.*]] = arith.select %[[VAL_44]], %c-1_i8, %[[VAL_37]] : i8468// CHECK:                 %[[VAL_46:.*]] = arith.cmpi ugt, %[[VAL_43]], %c32_i8 : i8469// CHECK:                 %[[VAL_47:.*]] = arith.select %[[VAL_46]], %c1_i8, %[[VAL_45]] : i8470// CHECK:                 fir.result %[[VAL_47]] : i8471// CHECK:               } else {472// CHECK:                 fir.result %[[VAL_37]] : i8473// CHECK:               }474// CHECK:               fir.result %[[VAL_39]] : i8475// CHECK:             }476// CHECK:             fir.result %[[VAL_35]] : i8477// CHECK:           } else {478// CHECK:             %[[VAL_48:.*]] = fir.do_loop %[[VAL_49:.*]] = %c1 to %c0 step %c1 iter_args(%[[VAL_50:.*]] = %[[VAL_19]]) -> (i8) {479// CHECK:               %[[VAL_51:.*]] = arith.cmpi eq, %[[VAL_50]], %c0_i8 : i8480// CHECK:               %[[VAL_52:.*]] = fir.if %[[VAL_51]] -> (i8) {481// CHECK:                 %[[VAL_53:.*]] = arith.addi %[[VAL_49]], %c1 : index482// CHECK:                 %[[VAL_54:.*]] = hlfir.designate %[[VAL_10]]#0  substr %[[VAL_53]], %[[VAL_53]]  typeparams %c1 : (!fir.ref<!fir.char<1>>, index, index, index) -> !fir.ref<!fir.char<1>>483// CHECK:                 %[[VAL_55:.*]] = fir.load %[[VAL_54]] : !fir.ref<!fir.char<1>>484// CHECK:                 %[[VAL_56:.*]] = fir.extract_value %[[VAL_55]], [0 : index] : (!fir.char<1>) -> i8485// CHECK:                 %[[VAL_57:.*]] = arith.cmpi ugt, %[[VAL_56]], %c32_i8 : i8486// CHECK:                 %[[VAL_58:.*]] = arith.select %[[VAL_57]], %c-1_i8, %[[VAL_50]] : i8487// CHECK:                 %[[VAL_59:.*]] = arith.cmpi ult, %[[VAL_56]], %c32_i8 : i8488// CHECK:                 %[[VAL_60:.*]] = arith.select %[[VAL_59]], %c1_i8, %[[VAL_58]] : i8489// CHECK:                 fir.result %[[VAL_60]] : i8490// CHECK:               } else {491// CHECK:                 fir.result %[[VAL_50]] : i8492// CHECK:               }493// CHECK:               fir.result %[[VAL_52]] : i8494// CHECK:             }495// CHECK:             fir.result %[[VAL_48]] : i8496// CHECK:           }497// CHECK:           %[[VAL_61:.*]] = arith.cmpi sgt, %[[VAL_34]], %c0_i8 : i8498// CHECK:           %[[VAL_62:.*]] = fir.convert %[[VAL_61]] : (i1) -> !fir.logical<4>499    %12 = fir.convert %11 : (i1) -> !fir.logical<4>500    hlfir.assign %12 to %6#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>501    %13 = fir.load %6#0 : !fir.ref<!fir.logical<4>>502    return %13 : !fir.logical<4>503  }504 505//  function test4(c1,c2,c3)506//    implicit none507//    logical :: test4508//    character(len=*,kind=1) :: c1, c2, c3509//    test4  = c1 // c2 .gt. c3510//  end function test4511  func.func @_QPtest4(%arg0: !fir.boxchar<1> {fir.bindc_name = "c1"}, %arg1: !fir.boxchar<1> {fir.bindc_name = "c2"}, %arg2: !fir.boxchar<1> {fir.bindc_name = "c3"}) -> !fir.logical<4> {512// CHECK-LABEL:   func.func @_QPtest4(513// CHECK-SAME:      %[[ARG0:.*]]: !fir.boxchar<1> {fir.bindc_name = "c1"},514// CHECK-SAME:      %[[ARG1:.*]]: !fir.boxchar<1> {fir.bindc_name = "c2"},515// CHECK-SAME:      %[[ARG2:.*]]: !fir.boxchar<1> {fir.bindc_name = "c3"}) -> !fir.logical<4> {516// CHECK:           %[[VAL_5:.*]] = fir.dummy_scope : !fir.dscope517// CHECK:           %[[VAL_6:.*]]:2 = fir.unboxchar %[[ARG0]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)518// CHECK:           %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_6]]#0 typeparams %[[VAL_6]]#1 dummy_scope %[[VAL_5]] {uniq_name = "_QFtest4Ec1"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)519// CHECK:           %[[VAL_8:.*]]:2 = fir.unboxchar %[[ARG1]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)520// CHECK:           %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_8]]#0 typeparams %[[VAL_8]]#1 dummy_scope %[[VAL_5]] {uniq_name = "_QFtest4Ec2"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)521// CHECK:           %[[VAL_10:.*]]:2 = fir.unboxchar %[[ARG2]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)522// CHECK:           %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_10]]#0 typeparams %[[VAL_10]]#1 dummy_scope %[[VAL_5]] {uniq_name = "_QFtest4Ec3"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)523// CHECK:           %[[VAL_12:.*]] = fir.alloca !fir.logical<4> {bindc_name = "test4", uniq_name = "_QFtest4Etest4"}524// CHECK:           %[[VAL_13:.*]]:2 = hlfir.declare %[[VAL_12]] {uniq_name = "_QFtest4Etest4"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)525    %0 = fir.dummy_scope : !fir.dscope526    %1:2 = fir.unboxchar %arg0 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)527    %2:2 = hlfir.declare %1#0 typeparams %1#1 dummy_scope %0 {uniq_name = "_QFtest4Ec1"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)528    %3:2 = fir.unboxchar %arg1 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)529    %4:2 = hlfir.declare %3#0 typeparams %3#1 dummy_scope %0 {uniq_name = "_QFtest4Ec2"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)530    %5:2 = fir.unboxchar %arg2 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)531    %6:2 = hlfir.declare %5#0 typeparams %5#1 dummy_scope %0 {uniq_name = "_QFtest4Ec3"} : (!fir.ref<!fir.char<1,?>>, index, !fir.dscope) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>)532    %7 = fir.alloca !fir.logical<4> {bindc_name = "test4", uniq_name = "_QFtest4Etest4"}533    %8:2 = hlfir.declare %7 {uniq_name = "_QFtest4Etest4"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)534    %9 = arith.addi %1#1, %3#1 : index535    %10 = hlfir.concat %2#0, %4#0 len %9 : (!fir.boxchar<1>, !fir.boxchar<1>, index) -> !hlfir.expr<!fir.char<1,?>>536    %11 = hlfir.cmpchar sgt %10 %6#0 : (!hlfir.expr<!fir.char<1,?>>, !fir.boxchar<1>) -> i1537// CHECK:           %[[VAL_14:.*]] = arith.addi %[[VAL_6]]#1, %[[VAL_8]]#1 : index538// CHECK:           %[[VAL_15:.*]] = hlfir.concat %[[VAL_7]]#0, %[[VAL_9]]#0 len %[[VAL_14]] : (!fir.boxchar<1>, !fir.boxchar<1>, index) -> !hlfir.expr<!fir.char<1,?>>539// CHECK:           %[[VAL_16:.*]]:3 = hlfir.associate %[[VAL_15]] typeparams %[[VAL_14]] {adapt.valuebyref} : (!hlfir.expr<!fir.char<1,?>>, index) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>, i1)540// CHECK:           %[[VAL_17:.*]] = arith.cmpi slt, %[[VAL_14]], %[[VAL_10]]#1 : index541// CHECK:           %[[VAL_18:.*]] = arith.select %[[VAL_17]], %[[VAL_14]], %[[VAL_10]]#1 : index542// CHECK:           %[[VAL_19:.*]] = fir.do_loop %[[VAL_20:.*]] = %c1 to %[[VAL_18]] step %c1 iter_args(%[[VAL_21:.*]] = %c0_i8) -> (i8) {543// CHECK:             %[[VAL_22:.*]] = arith.cmpi eq, %[[VAL_21]], %c0_i8 : i8544// CHECK:             %[[VAL_23:.*]] = fir.if %[[VAL_22]] -> (i8) {545// CHECK:               %[[VAL_24:.*]] = hlfir.designate %[[VAL_16]]#0  substr %[[VAL_20]], %[[VAL_20]]  typeparams %c1 : (!fir.boxchar<1>, index, index, index) -> !fir.ref<!fir.char<1>>546// CHECK:               %[[VAL_25:.*]] = fir.load %[[VAL_24]] : !fir.ref<!fir.char<1>>547// CHECK:               %[[VAL_26:.*]] = fir.extract_value %[[VAL_25]], [0 : index] : (!fir.char<1>) -> i8548// CHECK:               %[[VAL_27:.*]] = hlfir.designate %[[VAL_11]]#0  substr %[[VAL_20]], %[[VAL_20]]  typeparams %c1 : (!fir.boxchar<1>, index, index, index) -> !fir.ref<!fir.char<1>>549// CHECK:               %[[VAL_28:.*]] = fir.load %[[VAL_27]] : !fir.ref<!fir.char<1>>550// CHECK:               %[[VAL_29:.*]] = fir.extract_value %[[VAL_28]], [0 : index] : (!fir.char<1>) -> i8551// CHECK:               %[[VAL_30:.*]] = arith.cmpi ult, %[[VAL_26]], %[[VAL_29]] : i8552// CHECK:               %[[VAL_31:.*]] = arith.select %[[VAL_30]], %c-1_i8, %[[VAL_21]] : i8553// CHECK:               %[[VAL_32:.*]] = arith.cmpi ugt, %[[VAL_26]], %[[VAL_29]] : i8554// CHECK:               %[[VAL_33:.*]] = arith.select %[[VAL_32]], %c1_i8, %[[VAL_31]] : i8555// CHECK:               fir.result %[[VAL_33]] : i8556// CHECK:             } else {557// CHECK:               fir.result %[[VAL_21]] : i8558// CHECK:             }559// CHECK:             fir.result %[[VAL_23]] : i8560// CHECK:           }561// CHECK:           %[[VAL_34:.*]] = arith.cmpi sgt, %[[VAL_14]], %[[VAL_10]]#1 : index562// CHECK:           %[[VAL_35:.*]] = fir.if %[[VAL_34]] -> (i8) {563// CHECK:             %[[VAL_36:.*]] = arith.subi %[[VAL_14]], %[[VAL_10]]#1 : index564// CHECK:             %[[VAL_37:.*]] = fir.do_loop %[[VAL_38:.*]] = %c1 to %[[VAL_36]] step %c1 iter_args(%[[VAL_39:.*]] = %[[VAL_19]]) -> (i8) {565// CHECK:               %[[VAL_40:.*]] = arith.cmpi eq, %[[VAL_39]], %c0_i8 : i8566// CHECK:               %[[VAL_41:.*]] = fir.if %[[VAL_40]] -> (i8) {567// CHECK:                 %[[VAL_42:.*]] = arith.addi %[[VAL_10]]#1, %[[VAL_38]] : index568// CHECK:                 %[[VAL_43:.*]] = hlfir.designate %[[VAL_16]]#0  substr %[[VAL_42]], %[[VAL_42]]  typeparams %c1 : (!fir.boxchar<1>, index, index, index) -> !fir.ref<!fir.char<1>>569// CHECK:                 %[[VAL_44:.*]] = fir.load %[[VAL_43]] : !fir.ref<!fir.char<1>>570// CHECK:                 %[[VAL_45:.*]] = fir.extract_value %[[VAL_44]], [0 : index] : (!fir.char<1>) -> i8571// CHECK:                 %[[VAL_46:.*]] = arith.cmpi ult, %[[VAL_45]], %c32_i8 : i8572// CHECK:                 %[[VAL_47:.*]] = arith.select %[[VAL_46]], %c-1_i8, %[[VAL_39]] : i8573// CHECK:                 %[[VAL_48:.*]] = arith.cmpi ugt, %[[VAL_45]], %c32_i8 : i8574// CHECK:                 %[[VAL_49:.*]] = arith.select %[[VAL_48]], %c1_i8, %[[VAL_47]] : i8575// CHECK:                 fir.result %[[VAL_49]] : i8576// CHECK:               } else {577// CHECK:                 fir.result %[[VAL_39]] : i8578// CHECK:               }579// CHECK:               fir.result %[[VAL_41]] : i8580// CHECK:             }581// CHECK:             fir.result %[[VAL_37]] : i8582// CHECK:           } else {583// CHECK:             %[[VAL_50:.*]] = arith.subi %[[VAL_10]]#1, %[[VAL_14]] : index584// CHECK:             %[[VAL_51:.*]] = fir.do_loop %[[VAL_52:.*]] = %c1 to %[[VAL_50]] step %c1 iter_args(%[[VAL_53:.*]] = %[[VAL_19]]) -> (i8) {585// CHECK:               %[[VAL_54:.*]] = arith.cmpi eq, %[[VAL_53]], %c0_i8 : i8586// CHECK:               %[[VAL_55:.*]] = fir.if %[[VAL_54]] -> (i8) {587// CHECK:                 %[[VAL_56:.*]] = arith.addi %[[VAL_14]], %[[VAL_52]] : index588// CHECK:                 %[[VAL_57:.*]] = hlfir.designate %[[VAL_11]]#0  substr %[[VAL_56]], %[[VAL_56]]  typeparams %c1 : (!fir.boxchar<1>, index, index, index) -> !fir.ref<!fir.char<1>>589// CHECK:                 %[[VAL_58:.*]] = fir.load %[[VAL_57]] : !fir.ref<!fir.char<1>>590// CHECK:                 %[[VAL_59:.*]] = fir.extract_value %[[VAL_58]], [0 : index] : (!fir.char<1>) -> i8591// CHECK:                 %[[VAL_60:.*]] = arith.cmpi ugt, %[[VAL_59]], %c32_i8 : i8592// CHECK:                 %[[VAL_61:.*]] = arith.select %[[VAL_60]], %c-1_i8, %[[VAL_53]] : i8593// CHECK:                 %[[VAL_62:.*]] = arith.cmpi ult, %[[VAL_59]], %c32_i8 : i8594// CHECK:                 %[[VAL_63:.*]] = arith.select %[[VAL_62]], %c1_i8, %[[VAL_61]] : i8595// CHECK:                 fir.result %[[VAL_63]] : i8596// CHECK:               } else {597// CHECK:                 fir.result %[[VAL_53]] : i8598// CHECK:               }599// CHECK:               fir.result %[[VAL_55]] : i8600// CHECK:             }601// CHECK:             fir.result %[[VAL_51]] : i8602// CHECK:           }603// CHECK:           hlfir.end_associate %[[VAL_16]]#1, %[[VAL_16]]#2 : !fir.ref<!fir.char<1,?>>, i1604// CHECK:           %[[VAL_64:.*]] = arith.cmpi sgt, %[[VAL_35]], %c0_i8 : i8605// CHECK:           %[[VAL_65:.*]] = fir.convert %[[VAL_64]] : (i1) -> !fir.logical<4>606    %12 = fir.convert %11 : (i1) -> !fir.logical<4>607    hlfir.assign %12 to %8#0 : !fir.logical<4>, !fir.ref<!fir.logical<4>>608    %13 = fir.load %8#0 : !fir.ref<!fir.logical<4>>609    return %13 : !fir.logical<4>610  }611