| /// Verify that converts are only generated one per fir.declare | |
| // RUN: fir-opt %s --fir-to-memref --allow-unregistered-dialect | FileCheck %s | |
| // Derived from | |
| // do i = 1, n | |
| // a(i) = i | |
| // call y(i) | |
| // call z(i) | |
| // enddo | |
| // CHECK-LABEL: func.func @x_ | |
| // CHECK: [[ALLOCA:%.+]] = memref.alloca() {bindc_name = "i"} : memref<i32> | |
| // CHECK-NEXT: [[CONVERT0:%[0-9]]] = fir.convert [[ALLOCA]] : (memref<i32>) -> !fir.ref<i32> | |
| // CHECK-NEXT: [[DECLARE:%[0-9]]] = fir.declare [[CONVERT0]] | |
| // CHECK-NEXT: [[CONVERT1:%[0-9]]] = fir.convert [[DECLARE]] : (!fir.ref<i32>) -> memref<i32> | |
| // CHECK-NEXT: [[LOAD:%[0-9]]] = memref.load [[CONVERT1]] | |
| // CHECK-NEXT: [[CONVERT2:%[0-9]]] = fir.convert [[CONVERT1]] : (memref<i32>) -> !fir.ref<i32> | |
| // CHECK-NEXT: fir.call @y_([[CONVERT2]]) | |
| // CHECK-NEXT: [[CONVERT3:%[0-9]]] = fir.convert [[CONVERT1]] : (memref<i32>) -> !fir.ref<i32> | |
| // CHECK-NEXT: fir.call @z_([[CONVERT3]]) | |
| func.func @x_() attributes {fir.internal_name = "_QPx"} { | |
| %1 = fir.alloca i32 {bindc_name = "i"} | |
| %2 = fir.declare %1 {uniq_name = "_QFxEi"} : (!fir.ref<i32>) -> !fir.ref<i32> | |
| %3 = fir.load %2 : !fir.ref<i32> | |
| fir.call @y_(%2) fastmath<contract> : (!fir.ref<i32>) -> () | |
| fir.call @z_(%2) fastmath<contract> : (!fir.ref<i32>) -> () | |
| return | |
| } |