xref: /llvm-project/flang/test/HLFIR/concat.fir (revision 8dea00f4e79b7e19ab5d1adc728a0379c7f39d9e)
1// Test hlfir.concat operation parse, verify (no errors), and unparse.
2
3// RUN: fir-opt %s | fir-opt | FileCheck %s
4
5func.func @concat_var(%arg0: !fir.ref<!fir.char<1,10>>, %arg1: !fir.ref<!fir.char<1,20>>) {
6  %c30 = arith.constant 30 : index
7  %0 = hlfir.concat %arg0, %arg1 len %c30 : (!fir.ref<!fir.char<1,10>>, !fir.ref<!fir.char<1,20>>, index) -> (!hlfir.expr<!fir.char<1,30>>)
8  return
9}
10// CHECK-LABEL:   func.func @concat_var(
11// CHECK-SAME:    %[[VAL_0:.*]]: !fir.ref<!fir.char<1,10>>,
12// CHECK-SAME:    %[[VAL_1:.*]]: !fir.ref<!fir.char<1,20>>) {
13// CHECK:  %[[VAL_2:.*]] = arith.constant 30 : index
14// CHECK:  %[[VAL_3:.*]] = hlfir.concat %[[VAL_0]], %[[VAL_1]] len %[[VAL_2]] : (!fir.ref<!fir.char<1,10>>, !fir.ref<!fir.char<1,20>>, index) -> !hlfir.expr<!fir.char<1,30>>
15
16
17func.func @concat_boxchar(%arg0: !fir.boxchar<1>, %arg1: !fir.boxchar<1>) {
18  %c30 = arith.constant 30 : index
19  %0 = hlfir.concat %arg0, %arg1 len %c30 : (!fir.boxchar<1>, !fir.boxchar<1>, index) -> (!hlfir.expr<!fir.char<1,?>>)
20  return
21}
22// CHECK-LABEL:   func.func @concat_boxchar(
23// CHECK-SAME:    %[[VAL_0:.*]]: !fir.boxchar<1>,
24// CHECK-SAME:    %[[VAL_1:.*]]: !fir.boxchar<1>) {
25// CHECK:  %[[VAL_2:.*]] = arith.constant 30 : index
26// CHECK:  %[[VAL_3:.*]] = hlfir.concat %[[VAL_0]], %[[VAL_1]] len %[[VAL_2]] : (!fir.boxchar<1>, !fir.boxchar<1>, index) -> !hlfir.expr<!fir.char<1,?>>
27
28
29func.func @concat_boxchar_kind2(%arg0: !fir.boxchar<2>, %arg1: !fir.boxchar<2>) {
30  %c30 = arith.constant 30 : index
31  %0 = hlfir.concat %arg0, %arg1 len %c30 : (!fir.boxchar<2>, !fir.boxchar<2>, index) -> (!hlfir.expr<!fir.char<2,?>>)
32  return
33}
34// CHECK-LABEL:   func.func @concat_boxchar_kind2(
35// CHECK-SAME:    %[[VAL_0:.*]]: !fir.boxchar<2>,
36// CHECK-SAME:    %[[VAL_1:.*]]: !fir.boxchar<2>) {
37// CHECK:  %[[VAL_2:.*]] = arith.constant 30 : index
38// CHECK:  %[[VAL_3:.*]] = hlfir.concat %[[VAL_0]], %[[VAL_1]] len %[[VAL_2]] : (!fir.boxchar<2>, !fir.boxchar<2>, index) -> !hlfir.expr<!fir.char<2,?>>
39
40
41func.func @concat_expr(%arg0: !hlfir.expr<!fir.char<1,10>>, %arg1: !hlfir.expr<!fir.char<1,20>>) {
42  %c30 = arith.constant 30 : index
43  %0 = hlfir.concat %arg0, %arg1 len %c30 : (!hlfir.expr<!fir.char<1,10>>, !hlfir.expr<!fir.char<1,20>>, index) -> (!hlfir.expr<!fir.char<1,30>>)
44  return
45}
46// CHECK-LABEL:   func.func @concat_expr(
47// CHECK-SAME:    %[[VAL_0:.*]]: !hlfir.expr<!fir.char<1,10>>,
48// CHECK-SAME:    %[[VAL_1:.*]]: !hlfir.expr<!fir.char<1,20>>) {
49// CHECK:  %[[VAL_2:.*]] = arith.constant 30 : index
50// CHECK:  %[[VAL_3:.*]] = hlfir.concat %[[VAL_0]], %[[VAL_1]] len %[[VAL_2]] : (!hlfir.expr<!fir.char<1,10>>, !hlfir.expr<!fir.char<1,20>>, index) -> !hlfir.expr<!fir.char<1,30>>
51
52
53func.func @concat_several_args(%arg0: !fir.boxchar<1>, %arg1: !fir.boxchar<1>) {
54  %c30 = arith.constant 30 : index
55  %0 = hlfir.concat %arg0, %arg1, %arg1 len %c30 : (!fir.boxchar<1>, !fir.boxchar<1>, !fir.boxchar<1>, index) -> (!hlfir.expr<!fir.char<1,?>>)
56  return
57}
58// CHECK-LABEL:   func.func @concat_several_args(
59// CHECK-SAME:    %[[VAL_0:.*]]: !fir.boxchar<1>,
60// CHECK-SAME:    %[[VAL_1:.*]]: !fir.boxchar<1>) {
61// CHECK:  %[[VAL_2:.*]] = arith.constant 30 : index
62// CHECK:  %[[VAL_3:.*]] = hlfir.concat %[[VAL_0]], %[[VAL_1]], %[[VAL_1]] len %[[VAL_2]] : (!fir.boxchar<1>, !fir.boxchar<1>, !fir.boxchar<1>, index) -> !hlfir.expr<!fir.char<1,?>>
63