blob: 077754ef013dfea648948a44acfe8ac5792c8241 [file] [log] [blame]
Konstantin Zhuravlyov081385a2016-10-12 13:44:24 +00001; RUN: llc < %s -mtriple=arm-eabi -mattr=+v4t -O0 | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK_O0
2; RUN: llc < %s -mtriple=arm-eabi -mattr=+v4t -O1 | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK_O1
3
4; In /O0, the addition must not be eliminated. This happens when the load
5; and store are folded by the DAGCombiner. In /O1 and above, the optimization
6; must be executed.
7
8; CHECK-LABEL: {{^}}main
9; CHECK: mov [[TMP:r[0-9]+]], #0
10; CHECK-NEXT: str [[TMP]], [sp, #4]
Nirav Daveda8f2212017-05-16 19:43:56 +000011; CHECK_O0: str [[TMP]], [sp]
Konstantin Zhuravlyov081385a2016-10-12 13:44:24 +000012; CHECK_O0: ldr [[TMP:r[0-9]+]], [sp]
13; CHECK_O0-NEXT: add [[TMP]], [[TMP]], #2
14; CHECK_O1-NOT: ldr [[TMP:r[0-9]+]], [sp]
15; CHECK_O1-NOT: add [[TMP]], [[TMP]], #2
16
17define i32 @main() {
18bb:
19 %tmp = alloca i32, align 4
20 %tmp1 = alloca i32, align 4
21 store i32 0, i32* %tmp, align 4
22 store i32 0, i32* %tmp1, align 4
23 %tmp2 = load i32, i32* %tmp1, align 4
24 %tmp3 = add nsw i32 %tmp2, 2
25 store i32 %tmp3, i32* %tmp1, align 4
26 %tmp4 = load i32, i32* %tmp1, align 4
27 %tmp5 = icmp eq i32 %tmp4, 2
28 br i1 %tmp5, label %bb6, label %bb7
29
30bb6: ; preds = %bb
31 store i32 0, i32* %tmp, align 4
32 br label %bb8
33
34bb7: ; preds = %bb
35 store i32 5, i32* %tmp, align 4
36 br label %bb8
37
38bb8: ; preds = %bb7, %bb6
39 %tmp9 = load i32, i32* %tmp, align 4
40 ret i32 %tmp9
41}