1 // RUN: fir-opt --cse -split-input-file %s | FileCheck %s
3 // Check that the redundant fir.load is removed.
4 func.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
11 // CHECK-LABEL: func @fun
12 // CHECK-NEXT: %[[LOAD:.*]] = fir.load %{{.*}} : !fir.ref<i64>
13 // CHECK-NEXT: %{{.*}} = arith.addi %[[LOAD]], %[[LOAD]] : i64
17 // CHECK-LABEL: func @fun(
18 // CHECK-SAME: %[[A:.*]]: !fir.ref<i64>
19 func.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
46 func.func @fun(%a : !fir.ref<i64>) -> i64 {
49 %1 = fir.load %a : !fir.ref<i64>
50 %2 = fir.load %a : !fir.ref<i64>
51 %3 = arith.addi %1, %2 : i64
54 %4 = fir.load %a : !fir.ref<i64>
55 %5 = arith.subi %4, %4 : i64