brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 814d845 Raw
72 lines · plain
1// Test hlfir.forall_index operation parse, verify (no errors), unparse,2// and canonicalization.3// RUN: fir-opt %s | fir-opt | FileCheck %s4// RUN: fir-opt -canonicalize %s | FileCheck %s --check-prefix=CANONICALIZATION5 6func.func @forall_index(%x: !fir.ref<!fir.array<10xf32>>, %y: !fir.ref<!fir.array<10xf32>>) {7  %c1 = arith.constant 1 : index8  %c10 = arith.constant 10 : index9  hlfir.forall lb {10    hlfir.yield %c1 : index11  } ub {12    hlfir.yield %c10 : index13  } (%arg0: i64) {14    %i = hlfir.forall_index "i" %arg0 : (i64) -> !fir.ref<i64>15    hlfir.region_assign {16      %ival = fir.load %i : !fir.ref<i64>17      %yi = hlfir.designate %y(%ival) : (!fir.ref<!fir.array<10xf32>>, i64) -> !fir.ref<f32>18      hlfir.yield %yi : !fir.ref<f32>19    } to {20      %ival = fir.load %i : !fir.ref<i64>21      %xi = hlfir.designate %x(%ival) : (!fir.ref<!fir.array<10xf32>>, i64) -> !fir.ref<f32>22      hlfir.yield %xi : !fir.ref<f32>23    }24  }25  return26}27// CHECK-LABEL:  func.func @forall_index(28// CHECK:           hlfir.forall lb {29// CHECK:           } ub {30// CHECK:           }  (%[[VAL_4:.*]]: i64) {31// CHECK:             hlfir.forall_index "i" %[[VAL_4]] : (i64) -> !fir.ref<i64>32 33// CANONICALIZATION-LABEL:  func.func @forall_index(34// CANONICALIZATION:      hlfir.forall lb {35// CANONICALIZATION:      } ub {36// CANONICALIZATION:      }  (%[[VAL_4:.*]]: i64) {37// CANONICALIZATION-NOT:    hlfir.forall_index38// CANONICALIZATION:        hlfir.designate %{{.*}} (%[[VAL_4]])  : (!fir.ref<!fir.array<10xf32>>, i64) -> !fir.ref<f32>39// CANONICALIZATION:        hlfir.designate %{{.*}} (%[[VAL_4]])  : (!fir.ref<!fir.array<10xf32>>, i64) -> !fir.ref<f32>40 41func.func @forall_index_do_not_canonicalize(%x: !fir.ref<!fir.array<10xf32>>, %y: !fir.ref<!fir.array<10xf32>>) {42  %c1 = arith.constant 1 : index43  %c10 = arith.constant 10 : index44  hlfir.forall lb {45    hlfir.yield %c1 : index46  } ub {47    hlfir.yield %c10 : index48  } (%arg0: i64) {49    %i = hlfir.forall_index "i" %arg0 : (i64) -> !fir.ref<i64>50    hlfir.region_assign {51      %res = fir.call @taking_address(%i) : (!fir.ref<i64>) -> f3252      hlfir.yield %res : f3253    } to {54      %ival = fir.load %i : !fir.ref<i64>55      %xi = hlfir.designate %x(%ival) : (!fir.ref<!fir.array<10xf32>>, i64) -> !fir.ref<f32>56      hlfir.yield %xi : !fir.ref<f32>57    }58  }59  return60}61// CHECK-LABEL:  func.func @forall_index_do_not_canonicalize(62// CHECK:           hlfir.forall lb {63// CHECK:           } ub {64// CHECK:           }  (%[[VAL_4:.*]]: i64) {65// CHECK:             hlfir.forall_index "i" %[[VAL_4]] : (i64) -> !fir.ref<i64>66 67// CANONICALIZATION-LABEL:  func.func @forall_index_do_not_canonicalize(68// CANONICALIZATION:  %[[VAL_5:.*]] = hlfir.forall_index "i" %[[VAL_4:.*]] : (i64) -> !fir.ref<i64>69// CANONICALIZATION:  fir.call @taking_address(%[[VAL_5]]) : (!fir.ref<i64>) -> f3270// CANONICALIZATION:  %[[VAL_6:.*]] = fir.load %[[VAL_5]] : !fir.ref<i64>71// CANONICALIZATION:  hlfir.designate %{{.*}} (%[[VAL_6]])  : (!fir.ref<!fir.array<10xf32>>, i64) -> !fir.ref<f32>72