[AArch64] Promote loads from stores
[oota-llvm.git] / test / CodeGen / AArch64 / arm64-alloca-frame-pointer-offset.ll
1 ; RUN: llc -march=arm64 -mcpu=cyclone < %s | FileCheck %s
2
3 ; CHECK: foo
4 ; CHECK: str w[[REG0:[0-9]+]], [x19, #264]
5 ; CHECK: mov w[[REG1:[0-9]+]], w[[REG0]]
6 ; CHECK: str w[[REG1]], [x19, #132]
7
8 define i32 @foo(i32 %a) nounwind {
9   %retval = alloca i32, align 4
10   %a.addr = alloca i32, align 4
11   %arr = alloca [32 x i32], align 4
12   %i = alloca i32, align 4
13   %arr2 = alloca [32 x i32], align 4
14   %j = alloca i32, align 4
15   store i32 %a, i32* %a.addr, align 4
16   %tmp = load i32, i32* %a.addr, align 4
17   %tmp1 = zext i32 %tmp to i64
18   %v = mul i64 4, %tmp1
19   %vla = alloca i8, i64 %v, align 4
20   %tmp2 = bitcast i8* %vla to i32*
21   %tmp3 = load i32, i32* %a.addr, align 4
22   store i32 %tmp3, i32* %i, align 4
23   %tmp4 = load i32, i32* %a.addr, align 4
24   store i32 %tmp4, i32* %j, align 4
25   %tmp5 = load i32, i32* %j, align 4
26   store i32 %tmp5, i32* %retval
27   %x = load i32, i32* %retval
28   ret i32 %x
29 }