1// RUN: fir-opt --cse -split-input-file %s | FileCheck %s 2 3// Check that the redundant fir.load is removed. 4func.func @fun(%arg0: !fir.ref<i64>) -> i64 { 5 %0 = fir.load %arg0 : !fir.ref<i64> 6 %1 = fir.load %arg0 : !fir.ref<i64> 7 %2 = arith.addi %0, %1 : i64 8 return %2 : i64 9} 10 11// CHECK-LABEL: func @fun 12// CHECK-NEXT: %[[LOAD:.*]] = fir.load %{{.*}} : !fir.ref<i64> 13// CHECK-NEXT: %{{.*}} = arith.addi %[[LOAD]], %[[LOAD]] : i64 14 15// ----- 16 17// CHECK-LABEL: func @fun( 18// CHECK-SAME: %[[A:.*]]: !fir.ref<i64> 19func.func @fun(%a : !fir.ref<i64>) -> i64 { 20 // CHECK: %[[LOAD:.*]] = fir.load %[[A]] : !fir.ref<i64> 21 %1 = fir.load %a : !fir.ref<i64> 22 %2 = fir.load %a : !fir.ref<i64> 23 // CHECK-NEXT: %{{.*}} = arith.addi %[[LOAD]], %[[LOAD]] : i64 24 %3 = arith.addi %1, %2 : i64 25 %4 = fir.load %a : !fir.ref<i64> 26 // CHECK-NEXT: %{{.*}} = arith.addi 27 %5 = arith.addi %3, %4 : i64 28 %6 = fir.load %a : !fir.ref<i64> 29 // CHECK-NEXT: %{{.*}} = arith.addi 30 %7 = arith.addi %5, %6 : i64 31 %8 = fir.load %a : !fir.ref<i64> 32 // CHECK-NEXT: %{{.*}} = arith.addi 33 %9 = arith.addi %7, %8 : i64 34 %10 = fir.load %a : !fir.ref<i64> 35 // CHECK-NEXT: %{{.*}} = arith.addi 36 %11 = arith.addi %10, %9 : i64 37 %12 = fir.load %a : !fir.ref<i64> 38 // CHECK-NEXT: %{{.*}} = arith.addi 39 %13 = arith.addi %11, %12 : i64 40 // CHECK-NEXT: return %{{.*}} : i64 41 return %13 : i64 42} 43 44// ----- 45 46func.func @fun(%a : !fir.ref<i64>) -> i64 { 47 cf.br ^bb1 48^bb1: 49 %1 = fir.load %a : !fir.ref<i64> 50 %2 = fir.load %a : !fir.ref<i64> 51 %3 = arith.addi %1, %2 : i64 52 cf.br ^bb2 53^bb2: 54 %4 = fir.load %a : !fir.ref<i64> 55 %5 = arith.subi %4, %4 : i64 56 return %5 : i64 57} 58