@@ -41,3 +41,34 @@ subroutine split_test2(s1, s2, p)
4141! CHECK: return
4242call split(s1, s2, p, .true. )
4343end subroutine split_test2
44+
45+ ! CHECK-LABEL: func @_QPsplit_test3(
46+ ! CHECK-SAME: %[[s1:[^:]+]]: !fir.boxchar<1>{{.*}}, %[[s2:[^:]+]]: !fir.boxchar<1>{{.*}}, %[[p:[^:]+]]: !fir.ref<i32>{{.*}}, %[[back:[^:]+]]: !fir.ref<!fir.logical<4>>{{.*}})
47+ subroutine split_test3 (s1 , s2 , p , back )
48+ character (* ) :: s1, s2
49+ integer :: p
50+ logical , optional :: back
51+ ! CHECK: %[[c1:.*]]:2 = fir.unboxchar %arg0 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)
52+ ! CHECK: %[[c2:.*]]:2 = fir.unboxchar %arg1 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)
53+ ! CHECK: %[[is_present:.*]] = fir.is_present %arg3 : (!fir.ref<!fir.logical<4>>) -> i1
54+ ! CHECK: %[[back_unwrap:.*]] = fir.if %[[is_present]] -> (!fir.logical<4>) {
55+ ! CHECK: {{.*}} = fir.load %arg3 : !fir.ref<!fir.logical<4>>
56+ ! CHECK: fir.result {{.*}} : !fir.logical<4>
57+ ! CHECK: } else {
58+ ! CHECK: %false = arith.constant false
59+ ! CHECK: {{.*}} = fir.convert %false : (i1) -> !fir.logical<4>
60+ ! CHECK: fir.result {{.*}} : !fir.logical<4>
61+ ! CHECK: }
62+ ! CHECK: %[[pos:.*]] = fir.load %arg2 : !fir.ref<i32>
63+ ! CHECK: %[[c1base:.*]] = fir.convert %[[c1]]#0 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
64+ ! CHECK: %[[c1len:.*]] = fir.convert %[[c1]]#1 : (index) -> i64
65+ ! CHECK: %[[c2base:.*]] = fir.convert %[[c2]]#0 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
66+ ! CHECK: %[[c2len:.*]] = fir.convert %[[c2]]#1 : (index) -> i64
67+ ! CHECK: %[[pos1:.*]] = fir.convert %[[pos]] : (i32) -> i64
68+ ! CHECK: %[[back_convert:.*]] = fir.convert %[[back_unwrap]] : (!fir.logical<4>) -> i1
69+ ! CHECK: %[[pos2:.*]] = fir.call @_FortranASplit1(%[[c1base]], %[[c1len]], %[[c2base]], %[[c2len]], %[[pos1]], %[[back_convert]], {{.*}}) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i8>, i64, i64, i1, !fir.ref<i8>, i32) -> i64
70+ ! CHECK: %[[pos3:.*]] = fir.convert %[[pos2]] : (i64) -> i32
71+ ! CHECK: fir.store %[[pos3]] to %[[p]] : !fir.ref<i32>
72+ ! CHECK: return
73+ call split(s1, s2, p, back)
74+ end subroutine split_test3
0 commit comments