[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / falkor-hwpf-fix.ll
blobde72d7e448246789aa9fe612e603d68f3b83f826
1 ; RUN: llc < %s -mtriple aarch64 -mcpu=falkor -disable-post-ra | FileCheck %s
3 ; Check that strided load tag collisions are avoided on Falkor.
5 ; CHECK-LABEL: hwpf1:
6 ; CHECK: ldp {{w[0-9]+}}, {{w[0-9]+}}, [x[[BASE:[0-9]+]], #-16]
7 ; CHECK: mov x[[BASE2:[0-9]+]], x[[BASE]]
8 ; CHECK: ldp {{w[0-9]+}}, {{w[0-9]+}}, [x[[BASE2]], #-8]
9 ; CHECK: ldp {{w[0-9]+}}, {{w[0-9]+}}, [x[[BASE3:[0-9]+]]]
10 ; CHECK: mov x[[BASE4:[0-9]+]], x[[BASE3]]
11 ; CHECK: ldp {{w[0-9]+}}, {{w[0-9]+}}, [x[[BASE4]], #8]
13 define void @hwpf1(ptr %p, ptr %sp, ptr %sp2, ptr %sp3, ptr %sp4) {
14 entry:
15   br label %loop
17 loop:
18   %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]
20   %gep = getelementptr inbounds i32, ptr %p, i32 %iv
21   %load1 = load i32, ptr %gep
23   %gep2 = getelementptr inbounds i32, ptr %gep, i32 1
24   %load2 = load i32, ptr %gep2
26   %add = add i32 %load1, %load2
27   %storegep = getelementptr inbounds i32, ptr %sp, i32 %iv
28   store i32 %add, ptr %storegep
30   %gep3 = getelementptr inbounds i32, ptr %gep, i32 2
31   %load3 = load i32, ptr %gep3
33   %gep4 = getelementptr inbounds i32, ptr %gep, i32 3
34   %load4 = load i32, ptr %gep4
36   %add2 = add i32 %load3, %load4
37   %storegep2 = getelementptr inbounds i32, ptr %sp2, i32 %iv
38   store i32 %add2, ptr %storegep2
40   %gep5 = getelementptr inbounds i32, ptr %gep, i32 4
41   %load5 = load i32, ptr %gep5
43   %gep6 = getelementptr inbounds i32, ptr %gep, i32 5
44   %load6 = load i32, ptr %gep6
46   %add3 = add i32 %load5, %load6
47   %storegep3 = getelementptr inbounds i32, ptr %sp3, i32 %iv
48   store i32 %add3, ptr %storegep3
50   %gep7 = getelementptr inbounds i32, ptr %gep, i32 6
51   %load7 = load i32, ptr %gep7
53   %gep8 = getelementptr inbounds i32, ptr %gep, i32 7
54   %load8 = load i32, ptr %gep8
56   %add4 = add i32 %load7, %load8
57   %storegep4 = getelementptr inbounds i32, ptr %sp4, i32 %iv
58   store i32 %add4, ptr %storegep4
60   %inc = add i32 %iv, 8
61   %exitcnd = icmp uge i32 %inc, 1024
62   br i1 %exitcnd, label %exit, label %loop
64 exit:
65   ret void