xref: /llvm-project/llvm/test/CodeGen/AArch64/load-store-forwarding.ll (revision 5ddce70ef0e5a641d7fea95e31fc5e2439cb98cb)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=aarch64_be -o - %s | FileCheck %s --check-prefix CHECK-BE
3; RUN: llc -mtriple=aarch64 -o - %s | FileCheck %s --check-prefix CHECK-LE
4
5define i8 @test1(i32 %a, ptr %pa) {
6; CHECK-BE-LABEL: test1:
7; CHECK-BE:       // %bb.0:
8; CHECK-BE-NEXT:    mov w8, w0
9; CHECK-BE-NEXT:    lsr w0, w0, #24
10; CHECK-BE-NEXT:    str w8, [x1]
11; CHECK-BE-NEXT:    ret
12;
13; CHECK-LE-LABEL: test1:
14; CHECK-LE:       // %bb.0:
15; CHECK-LE-NEXT:    str w0, [x1]
16; CHECK-LE-NEXT:    ret
17  store i32 %a, ptr %pa
18  %res = load i8, ptr %pa
19  ret i8 %res
20}
21
22define i8 @test2(i32 %a, ptr %pa) {
23; CHECK-BE-LABEL: test2:
24; CHECK-BE:       // %bb.0:
25; CHECK-BE-NEXT:    str w0, [x1]
26; CHECK-BE-NEXT:    ldrb w0, [x1, #1]
27; CHECK-BE-NEXT:    ret
28;
29; CHECK-LE-LABEL: test2:
30; CHECK-LE:       // %bb.0:
31; CHECK-LE-NEXT:    str w0, [x1]
32; CHECK-LE-NEXT:    ubfx w0, w0, #8, #8
33; CHECK-LE-NEXT:    ret
34  %p8 = getelementptr i8, ptr %pa, i32 1
35  store i32 %a, ptr %pa
36  %res = load i8, ptr %p8
37  ret i8 %res
38}
39
40define i8 @test3(i32 %a, ptr %pa) {
41; CHECK-BE-LABEL: test3:
42; CHECK-BE:       // %bb.0:
43; CHECK-BE-NEXT:    str w0, [x1]
44; CHECK-BE-NEXT:    ldrb w0, [x1, #2]
45; CHECK-BE-NEXT:    ret
46;
47; CHECK-LE-LABEL: test3:
48; CHECK-LE:       // %bb.0:
49; CHECK-LE-NEXT:    str w0, [x1]
50; CHECK-LE-NEXT:    ubfx w0, w0, #16, #8
51; CHECK-LE-NEXT:    ret
52  %p8 = getelementptr i8, ptr %pa, i32 2
53  store i32 %a, ptr %pa
54  %res = load i8, ptr %p8
55  ret i8 %res
56}
57
58define i8 @test4(i32 %a, ptr %pa) {
59; CHECK-BE-LABEL: test4:
60; CHECK-BE:       // %bb.0:
61; CHECK-BE-NEXT:    str w0, [x1]
62; CHECK-BE-NEXT:    ret
63;
64; CHECK-LE-LABEL: test4:
65; CHECK-LE:       // %bb.0:
66; CHECK-LE-NEXT:    str w0, [x1]
67; CHECK-LE-NEXT:    lsr w0, w0, #24
68; CHECK-LE-NEXT:    ret
69  %p8 = getelementptr i8, ptr %pa, i32 3
70  store i32 %a, ptr %pa
71  %res = load i8, ptr %p8
72  ret i8 %res
73}
74