brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 39724d8 Raw
88 lines · plain
1// Test hlfir.region_assign and hlfir.yield operation parse, verify (no errors),2// and unparse.3// RUN: fir-opt %s | fir-opt | FileCheck %s4 5func.func @region_assign_test(%y : !fir.box<!fir.array<?xi64>>, %x: !fir.box<!fir.array<?xf32>>) {6  %c100 = arith.constant 100 : index7  %shape = fir.shape %c100 : (index) -> !fir.shape<1>8  hlfir.region_assign {9    %expr = hlfir.elemental %shape : (!fir.shape<1>) -> !hlfir.expr<?xf32> {10    ^bb0(%i : index):11      %yelt = hlfir.designate %y(%i) : (!fir.box<!fir.array<?xi64>>, index) -> !fir.ref<i64>12      %elt = fir.call @some_elemental(%yelt) : (!fir.ref<i64>) -> f3213      hlfir.yield_element %elt : f3214    }15    hlfir.yield %expr : !hlfir.expr<?xf32>16  } to {17    hlfir.yield %x : !fir.box<!fir.array<?xf32>>18  }19  return20}21// CHECK-LABEL:   func.func @region_assign_test(22// CHECK-SAME:                                  %[[VAL_0:.*]]: !fir.box<!fir.array<?xi64>>,23// CHECK-SAME:                                  %[[VAL_1:.*]]: !fir.box<!fir.array<?xf32>>) {24// CHECK:           %[[VAL_2:.*]] = arith.constant 100 : index25// CHECK:           %[[VAL_3:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1>26// CHECK:           hlfir.region_assign {27// CHECK:             %[[VAL_4:.*]] = hlfir.elemental %[[VAL_3]] : (!fir.shape<1>) -> !hlfir.expr<?xf32> {28// CHECK:             ^bb0(%[[VAL_5:.*]]: index):29// CHECK:               %[[VAL_6:.*]] = hlfir.designate %[[VAL_0]] (%[[VAL_5]])  : (!fir.box<!fir.array<?xi64>>, index) -> !fir.ref<i64>30// CHECK:               %[[VAL_7:.*]] = fir.call @some_elemental(%[[VAL_6]]) : (!fir.ref<i64>) -> f3231// CHECK:               hlfir.yield_element %[[VAL_7]] : f3232// CHECK:             }33// CHECK:             hlfir.yield %[[VAL_8:.*]] : !hlfir.expr<?xf32>34// CHECK:           } to {35// CHECK:             hlfir.yield %[[VAL_1]] : !fir.box<!fir.array<?xf32>>36// CHECK:           }37 38func.func @region_user_assign_test(%y : !fir.box<!fir.array<?xi64>>, %x: !fir.box<!fir.array<?xf32>>) {39  hlfir.region_assign {40    hlfir.yield %y : !fir.box<!fir.array<?xi64>>41  } to {42    hlfir.yield %x : !fir.box<!fir.array<?xf32>>43  } user_defined_assign (%rhs : !fir.ref<i64>) to (%lhs : !fir.ref<f32>) {44    %0 = fir.load %rhs : !fir.ref<i64>45    fir.call @user_assign(%lhs, %0) : (!fir.ref<f32>, i64) -> ()46  }47  return48}49// CHECK-LABEL:   func.func @region_user_assign_test(50// CHECK-SAME:                                       %[[VAL_0:.*]]: !fir.box<!fir.array<?xi64>>,51// CHECK-SAME:                                       %[[VAL_1:.*]]: !fir.box<!fir.array<?xf32>>) {52// CHECK:           hlfir.region_assign {53// CHECK:             hlfir.yield %[[VAL_0]] : !fir.box<!fir.array<?xi64>>54// CHECK:           } to {55// CHECK:             hlfir.yield %[[VAL_1]] : !fir.box<!fir.array<?xf32>>56// CHECK:           } user_defined_assign  (%[[VAL_2:.*]]: !fir.ref<i64>) to (%[[VAL_3:.*]]: !fir.ref<f32>) {57// CHECK:             %[[VAL_4:.*]] = fir.load %[[VAL_2]] : !fir.ref<i64>58// CHECK:             fir.call @user_assign(%[[VAL_3]], %[[VAL_4]]) : (!fir.ref<f32>, i64) -> ()59// CHECK:           }60 61func.func @yield_cleanup(%x: !fir.box<!fir.array<?xf32>>) {62  hlfir.region_assign {63    %0 = fir.allocmem !fir.array<100xf32>64    fir.call @fillin_some_values(%0) : (!fir.heap<!fir.array<100xf32>>) -> ()65    hlfir.yield %0 : !fir.heap<!fir.array<100xf32>> cleanup {66      fir.freemem %0 : !fir.heap<!fir.array<100xf32>>67    }68  } to {69    hlfir.yield %x : !fir.box<!fir.array<?xf32>>70  }71  return72}73// CHECK-LABEL:   func.func @yield_cleanup(74// CHECK-SAME:                             %[[VAL_0:.*]]: !fir.box<!fir.array<?xf32>>) {75// CHECK:           hlfir.region_assign {76// CHECK:             %[[VAL_1:.*]] = fir.allocmem !fir.array<100xf32>77// CHECK:             fir.call @fillin_some_values(%[[VAL_1]]) : (!fir.heap<!fir.array<100xf32>>) -> ()78// CHECK:             hlfir.yield %[[VAL_1]] : !fir.heap<!fir.array<100xf32>> cleanup {79// CHECK:               fir.freemem %[[VAL_1]] : !fir.heap<!fir.array<100xf32>>80// CHECK:             }81// CHECK:           } to {82// CHECK:             hlfir.yield %[[VAL_0]] : !fir.box<!fir.array<?xf32>>83// CHECK:           }84 85func.func private @user_assign(!fir.ref<f32>, i64) -> ()86func.func private @some_elemental(!fir.ref<i64>) -> f3287func.func private @fillin_some_values(!fir.heap<!fir.array<100xf32>>) -> ()88