149 lines · plain
1// Test hlfir.assign operation parse, verify (no errors), and unparse.2 3// RUN: fir-opt %s | fir-opt | FileCheck %s4 5func.func @scalar_logical(%arg0: !fir.ref<!fir.logical<1>>, %arg1: !fir.ref<!fir.logical<1>>) {6 hlfir.assign %arg1 to %arg0 : !fir.ref<!fir.logical<1>>, !fir.ref<!fir.logical<1>>7 return8}9// CHECK-LABEL: func.func @scalar_logical(10// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.logical<1>>,11// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<!fir.logical<1>>) {12// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !fir.ref<!fir.logical<1>>, !fir.ref<!fir.logical<1>>13 14func.func @scalar_logical_2(%arg0: !fir.ref<!fir.logical<1>>, %arg1: i1) {15 hlfir.assign %arg1 to %arg0 : i1, !fir.ref<!fir.logical<1>>16 return17}18// CHECK-LABEL: func.func @scalar_logical_2(19// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.logical<1>>,20// CHECK-SAME: %[[VAL_1:.*]]: i1) {21// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : i1, !fir.ref<!fir.logical<1>>22 23func.func @scalar_integer(%arg0: !fir.ref<i32>, %arg1: !fir.ref<i32>) {24 hlfir.assign %arg1 to %arg0 : !fir.ref<i32>, !fir.ref<i32>25 return26}27// CHECK-LABEL: func.func @scalar_integer(28// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32>,29// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i32>) {30// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !fir.ref<i32>, !fir.ref<i32>31 32func.func @scalar_integer_2(%arg0: !fir.ref<i32>, %arg1: i32) {33 hlfir.assign %arg1 to %arg0 : i32, !fir.ref<i32>34 return35}36// CHECK-LABEL: func.func @scalar_integer_2(37// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32>,38// CHECK-SAME: %[[VAL_1:.*]]: i32) {39// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : i32, !fir.ref<i32>40 41func.func @scalar_real(%arg0: !fir.ref<f16>, %arg1: !fir.ref<f16>) {42 hlfir.assign %arg1 to %arg0 : !fir.ref<f16>, !fir.ref<f16>43 return44}45// CHECK-LABEL: func.func @scalar_real(46// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<f16>,47// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<f16>) {48// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !fir.ref<f16>, !fir.ref<f16>49 50func.func @scalar_complex(%arg0: !fir.ref<complex<f64>>, %arg1: !fir.ref<complex<f64>>) {51 hlfir.assign %arg1 to %arg0 : !fir.ref<complex<f64>>, !fir.ref<complex<f64>>52 return53}54// CHECK-LABEL: func.func @scalar_complex(55// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<complex<f64>>,56// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<complex<f64>>) {57// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !fir.ref<complex<f64>>, !fir.ref<complex<f64>>58 59func.func @scalar_complex_2(%arg0: !fir.ref<complex<f64>>, %arg1: complex<f64>) {60 hlfir.assign %arg1 to %arg0 : complex<f64>, !fir.ref<complex<f64>>61 return62}63// CHECK-LABEL: func.func @scalar_complex_2(64// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<complex<f64>>,65// CHECK-SAME: %[[VAL_1:.*]]: complex<f64>) {66// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : complex<f64>, !fir.ref<complex<f64>>67 68 69func.func @scalar_character(%arg0: !fir.boxchar<1>, %arg1: !fir.boxchar<1>) {70 hlfir.assign %arg1 to %arg0 : !fir.boxchar<1>, !fir.boxchar<1>71 return72}73// CHECK-LABEL: func.func @scalar_character(74// CHECK-SAME: %[[VAL_0:.*]]: !fir.boxchar<1>,75// CHECK-SAME: %[[VAL_1:.*]]: !fir.boxchar<1>) {76// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !fir.boxchar<1>, !fir.boxchar<1>77 78func.func @scalar_character_2(%arg0: !fir.ref<!fir.char<1,32>>, %arg1: !fir.ref<!fir.char<1,64>>) {79 hlfir.assign %arg1 to %arg0 : !fir.ref<!fir.char<1,64>>, !fir.ref<!fir.char<1,32>>80 return81}82// CHECK-LABEL: func.func @scalar_character_2(83// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.char<1,32>>,84// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<!fir.char<1,64>>) {85// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !fir.ref<!fir.char<1,64>>, !fir.ref<!fir.char<1,32>>86 87func.func @scalar_character_3(%arg0: !fir.boxchar<1>, %arg1: !hlfir.expr<!fir.char<1,?>>) {88 hlfir.assign %arg1 to %arg0 : !hlfir.expr<!fir.char<1,?>>, !fir.boxchar<1>89 return90}91// CHECK-LABEL: func.func @scalar_character_3(92// CHECK-SAME: %[[VAL_0:.*]]: !fir.boxchar<1>,93// CHECK-SAME: %[[VAL_1:.*]]: !hlfir.expr<!fir.char<1,?>>) {94// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !hlfir.expr<!fir.char<1,?>>, !fir.boxchar<1>95 96func.func @array(%arg0: !fir.ref<!fir.array<10xi32>>, %arg1: i32) {97 hlfir.assign %arg1 to %arg0 : i32, !fir.ref<!fir.array<10xi32>>98 return99}100// CHECK-LABEL: func.func @array(101// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>,102// CHECK-SAME: %[[VAL_1:.*]]: i32) {103// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : i32, !fir.ref<!fir.array<10xi32>>104 105func.func @array_2(%arg0: !fir.ref<!fir.array<10xi32>>, %arg1: !hlfir.expr<?xi32>) {106 hlfir.assign %arg1 to %arg0 : !hlfir.expr<?xi32>, !fir.ref<!fir.array<10xi32>>107 return108}109// CHECK-LABEL: func.func @array_2(110// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>,111// CHECK-SAME: %[[VAL_1:.*]]: !hlfir.expr<?xi32>) {112// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !hlfir.expr<?xi32>, !fir.ref<!fir.array<10xi32>>113 114func.func @array_3(%arg0: !fir.box<!fir.array<?xi32>>, %arg1: !hlfir.expr<?xi32>) {115 hlfir.assign %arg1 to %arg0 : !hlfir.expr<?xi32>, !fir.box<!fir.array<?xi32>>116 return117}118// CHECK-LABEL: func.func @array_3(119// CHECK-SAME: %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>,120// CHECK-SAME: %[[VAL_1:.*]]: !hlfir.expr<?xi32>) {121// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !hlfir.expr<?xi32>, !fir.box<!fir.array<?xi32>>122 123func.func @array_4(%arg0: !fir.box<!fir.array<?xi32>>, %arg1: !fir.box<!fir.array<?xi32>>) {124 hlfir.assign %arg1 to %arg0 : !fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>125 return126}127// CHECK-LABEL: func.func @array_4(128// CHECK-SAME: %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>,129// CHECK-SAME: %[[VAL_1:.*]]: !fir.box<!fir.array<?xi32>>) {130// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] : !fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>131 132func.func @alloc_assign(%arg0: !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, %arg1: !fir.box<!fir.array<?xi32>>) {133 hlfir.assign %arg1 to %arg0 realloc : !fir.box<!fir.array<?xi32>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>134 return135}136// CHECK-LABEL: func.func @alloc_assign(137// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>,138// CHECK-SAME: %[[VAL_1:.*]]: !fir.box<!fir.array<?xi32>>) {139// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] realloc : !fir.box<!fir.array<?xi32>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>140 141func.func @alloc_assign_keep_lhs_len(%arg0: !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>, %arg1: !fir.box<!fir.array<?x!fir.char<1,?>>>) {142 hlfir.assign %arg1 to %arg0 realloc keep_lhs_len : !fir.box<!fir.array<?x!fir.char<1,?>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>143 return144}145// CHECK-LABEL: func.func @alloc_assign_keep_lhs_len(146// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>,147// CHECK-SAME: %[[VAL_1:.*]]: !fir.box<!fir.array<?x!fir.char<1,?>>>) {148// CHECK: hlfir.assign %[[VAL_1]] to %[[VAL_0]] realloc keep_lhs_len : !fir.box<!fir.array<?x!fir.char<1,?>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>149