[win/asan] GetInstructionSize: Fix `83 E4 XX` to return 3. (#119644)
[llvm-project.git] / llvm / test / CodeGen / ARM / dag-combine-ldst.ll
bloba03e372822f135cd6b876fd4da892ec8c2f84218
1 ; 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
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.
8 ; CHECK-LABEL:   {{^}}main
9 ; CHECK:         mov [[TMP:r[0-9]+]], #0
10 ; CHECK-NEXT:    str [[TMP]], [sp, #4]
11 ; CHECK_O0:      str [[TMP]], [sp]
12 ; 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
17 define i32 @main() {
18 bb:
19   %tmp = alloca i32, align 4
20   %tmp1 = alloca i32, align 4
21   store i32 0, ptr %tmp, align 4
22   store i32 0, ptr %tmp1, align 4
23   %tmp2 = load i32, ptr %tmp1, align 4
24   %tmp3 = add nsw i32 %tmp2, 2
25   store i32 %tmp3, ptr %tmp1, align 4
26   %tmp4 = load i32, ptr %tmp1, align 4
27   %tmp5 = icmp eq i32 %tmp4, 2
28   br i1 %tmp5, label %bb6, label %bb7
30 bb6:                                              ; preds = %bb
31   store i32 0, ptr %tmp, align 4
32   br label %bb8
34 bb7:                                              ; preds = %bb
35   store i32 5, ptr %tmp, align 4
36   br label %bb8
38 bb8:                                              ; preds = %bb7, %bb6
39   %tmp9 = load i32, ptr %tmp, align 4
40   ret i32 %tmp9