brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · b76492e Raw
32 lines · plain
1// Test local alloca and store inside hlfir.region_assign do not trigger the2// creation of a temporary for the LHS.3 4// RUN: fir-opt -o - -lower-hlfir-ordered-assignments --debug-only=flang-ordered-assignment -flang-dbg-order-assignment-schedule-only %s 2>&1 | FileCheck %s5// REQUIRES: asserts6 7func.func @simple(%arg0: !fir.ref<!fir.array<100x10xf32>> , %arg1: !fir.ref<!fir.array<10xi64>> , %arg2: !fir.ref<!fir.array<10xf32>>, %i: i64, %f: f32) {8  %c10 = arith.constant 10 : index9  %c100 = arith.constant 100 : index10  %0 = fir.shape %c100, %c10 : (index, index) -> !fir.shape<2>11  %1:2 = hlfir.declare %arg0(%0) {uniq_name = "_QFsimpleEx"} : (!fir.ref<!fir.array<100x10xf32>>, !fir.shape<2>) -> (!fir.ref<!fir.array<100x10xf32>>, !fir.ref<!fir.array<100x10xf32>>)12  %2 = fir.shape %c10 : (index) -> !fir.shape<1>13  %3:2 = hlfir.declare %arg1(%2) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)14  hlfir.region_assign {15    hlfir.yield %f : f3216  } to {17    %local_temp = fir.alloca i6418    fir.store %i to %local_temp : !fir.ref<i64>19    %icopy = fir.load %local_temp : !fir.ref<i64>20    hlfir.elemental_addr %2 : !fir.shape<1> {21    ^bb0(%arg3: index):22      %5 = hlfir.designate %3#0 (%arg3)  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>23      %6 = fir.load %5 : !fir.ref<i64>24      %7 = hlfir.designate %1#0 (%icopy, %6)  : (!fir.ref<!fir.array<100x10xf32>>, i64, i64) -> !fir.ref<f32>25      hlfir.yield %7 : !fir.ref<f32>26    }27  }28  return29}30 31// CHECK: run 1 evaluate: region_assign32