xref: /llvm-project/llvm/test/CodeGen/PowerPC/p10-fi-elim.ll (revision f4fbcd62af31ac8921c2c2216bdbed1b49a0dff1)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
3; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
4; RUN:   FileCheck %s
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
6; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
7; RUN:   FileCheck %s --check-prefix=CHECK-BE
8
9%96 = type <{ i32 }>
10%97 = type <{ i32 }>
11%98 = type <{ i32 }>
12%100 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64] }>
13%101 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64], [24 x i8] }>
14%102 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64] }>
15%103 = type <{ ptr, i8, i8, i8, i8, [4 x i8], i32, [12 x i8], i32, [4 x i8] }>
16%104 = type <{ i32 }>
17%105 = type <{ i32 }>
18%106 = type <{ i32 }>
19
20; Function Attrs: nobuiltin norecurse
21define dso_local signext i32 @test_FI_elim(ptr noalias nocapture dereferenceable(40) %arg, ptr noalias nocapture nonnull readonly %arg2, ptr noalias nocapture nonnull readonly %arg3, ptr noalias nocapture nonnull readonly %arg4, ptr noalias nocapture dereferenceable(48) %arg6, ptr noalias nocapture dereferenceable(72) %arg7) local_unnamed_addr #2 {
22; CHECK-LABEL: test_FI_elim:
23; CHECK:       # %bb.0: # %bb
24; CHECK-NEXT:    mflr r0
25; CHECK-NEXT:    std r0, 16(r1)
26; CHECK-NEXT:    stdu r1, -80(r1)
27; CHECK-NEXT:    .cfi_def_cfa_offset 80
28; CHECK-NEXT:    .cfi_offset lr, 16
29; CHECK-NEXT:    lxv v2, 0(r3)
30; CHECK-NEXT:    mr r9, r6
31; CHECK-NEXT:    mr r6, r5
32; CHECK-NEXT:    li r12, -127
33; CHECK-NEXT:    li r0, 4
34; CHECK-NEXT:    stb r12, 0(r3)
35; CHECK-NEXT:    li r2, 1
36; CHECK-NEXT:    std r0, 0(r3)
37; CHECK-NEXT:    stw r2, 0(r3)
38; CHECK-NEXT:    li r11, 3
39; CHECK-NEXT:    stb r11, 0(0)
40; CHECK-NEXT:    mfvsrd r5, v2
41; CHECK-NEXT:    vaddudm v3, v2, v2
42; CHECK-NEXT:    pstxv v2, 64(r1), 0
43; CHECK-NEXT:    neg r5, r5
44; CHECK-NEXT:    mfvsrd r10, v3
45; CHECK-NEXT:    std r5, 0(r3)
46; CHECK-NEXT:    lbz r5, 2(r7)
47; CHECK-NEXT:    mr r7, r9
48; CHECK-NEXT:    stb r11, 0(r3)
49; CHECK-NEXT:    stb r12, 0(r3)
50; CHECK-NEXT:    std r2, 0(r3)
51; CHECK-NEXT:    neg r10, r10
52; CHECK-NEXT:    rlwinm r5, r5, 0, 27, 27
53; CHECK-NEXT:    stb r5, 0(0)
54; CHECK-NEXT:    lbz r5, 2(r8)
55; CHECK-NEXT:    rlwinm r5, r5, 0, 27, 27
56; CHECK-NEXT:    stb r5, 0(r3)
57; CHECK-NEXT:    li r5, 2
58; CHECK-NEXT:    std r0, 0(r3)
59; CHECK-NEXT:    stw r5, 0(r3)
60; CHECK-NEXT:    mr r5, r4
61; CHECK-NEXT:    std r10, 0(r3)
62; CHECK-NEXT:    bl foo@notoc
63; CHECK-NEXT:    extsw r3, r3
64; CHECK-NEXT:    addi r1, r1, 80
65; CHECK-NEXT:    ld r0, 16(r1)
66; CHECK-NEXT:    mtlr r0
67; CHECK-NEXT:    blr
68;
69; CHECK-BE-LABEL: test_FI_elim:
70; CHECK-BE:       # %bb.0: # %bb
71; CHECK-BE-NEXT:    mflr r0
72; CHECK-BE-NEXT:    std r0, 16(r1)
73; CHECK-BE-NEXT:    stdu r1, -176(r1)
74; CHECK-BE-NEXT:    .cfi_def_cfa_offset 176
75; CHECK-BE-NEXT:    .cfi_offset lr, 16
76; CHECK-BE-NEXT:    .cfi_offset r30, -16
77; CHECK-BE-NEXT:    lxv v2, 0(r3)
78; CHECK-BE-NEXT:    mr r9, r6
79; CHECK-BE-NEXT:    mr r6, r5
80; CHECK-BE-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
81; CHECK-BE-NEXT:    li r12, -127
82; CHECK-BE-NEXT:    li r0, 4
83; CHECK-BE-NEXT:    stb r12, 0(r3)
84; CHECK-BE-NEXT:    li r30, 1
85; CHECK-BE-NEXT:    std r0, 0(r3)
86; CHECK-BE-NEXT:    stw r30, 0(r3)
87; CHECK-BE-NEXT:    li r11, 3
88; CHECK-BE-NEXT:    stb r11, 0(0)
89; CHECK-BE-NEXT:    mfvsrld r5, v2
90; CHECK-BE-NEXT:    vaddudm v3, v2, v2
91; CHECK-BE-NEXT:    pstxv v2, 144(r1), 0
92; CHECK-BE-NEXT:    mfvsrld r10, v3
93; CHECK-BE-NEXT:    neg r5, r5
94; CHECK-BE-NEXT:    std r5, 0(r3)
95; CHECK-BE-NEXT:    lbz r5, 2(r7)
96; CHECK-BE-NEXT:    mr r7, r9
97; CHECK-BE-NEXT:    stb r11, 0(r3)
98; CHECK-BE-NEXT:    stb r12, 0(r3)
99; CHECK-BE-NEXT:    std r30, 0(r3)
100; CHECK-BE-NEXT:    neg r10, r10
101; CHECK-BE-NEXT:    rlwinm r5, r5, 0, 27, 27
102; CHECK-BE-NEXT:    stb r5, 0(0)
103; CHECK-BE-NEXT:    lbz r5, 2(r8)
104; CHECK-BE-NEXT:    rlwinm r5, r5, 0, 27, 27
105; CHECK-BE-NEXT:    stb r5, 0(r3)
106; CHECK-BE-NEXT:    li r5, 2
107; CHECK-BE-NEXT:    std r0, 0(r3)
108; CHECK-BE-NEXT:    stw r5, 0(r3)
109; CHECK-BE-NEXT:    mr r5, r4
110; CHECK-BE-NEXT:    std r10, 0(r3)
111; CHECK-BE-NEXT:    bl foo
112; CHECK-BE-NEXT:    nop
113; CHECK-BE-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
114; CHECK-BE-NEXT:    extsw r3, r3
115; CHECK-BE-NEXT:    addi r1, r1, 176
116; CHECK-BE-NEXT:    ld r0, 16(r1)
117; CHECK-BE-NEXT:    mtlr r0
118; CHECK-BE-NEXT:    blr
119bb:
120  %i = alloca %102, align 8
121  %i8 = load <2 x i64>, ptr undef, align 8
122  %i9 = extractelement <2 x i64> %i8, i32 1
123  %i10 = sub i64 0, %i9
124  %i11 = load <2 x i64>, ptr undef, align 8
125  %i12 = load <2 x i64>, ptr undef, align 8
126  %i13 = add nsw <2 x i64> %i11, %i12
127  %i14 = extractelement <2 x i64> %i13, i32 1
128  %i15 = sub i64 0, %i14
129  store i8 3, ptr null, align 8
130  store i8 -127, ptr undef, align 1
131  store i64 4, ptr undef, align 8
132  store i32 1, ptr undef, align 4
133  %i16 = getelementptr inbounds %102, ptr %i, i64 0, i32 8, i64 0
134  store <2 x i64> %i8, ptr %i16, align 8
135  store i64 %i10, ptr undef, align 8
136  store i8 3, ptr undef, align 8
137  %i18 = getelementptr inbounds %100, ptr %arg6, i64 0, i32 2
138  %i19 = load i8, ptr %i18, align 1
139  %i20 = and i8 %i19, 16
140  store i8 %i20, ptr null, align 2
141  store i8 -127, ptr undef, align 1
142  store i64 1, ptr undef, align 8
143  %i21 = getelementptr inbounds %101, ptr %arg7, i64 0, i32 2
144  %i22 = load i8, ptr %i21, align 1
145  %i23 = and i8 %i22, 16
146  store i8 %i23, ptr undef, align 2
147  store i64 4, ptr undef, align 8
148  store i32 2, ptr undef, align 4
149  store i64 %i15, ptr undef, align 8
150  %i28 = call i32 @foo(ptr nonnull %arg, ptr nonnull undef, ptr %arg2, ptr %arg3, ptr %arg4)
151  ret i32 %i28
152}
153
154declare dso_local i32 @foo(ptr, ptr, ptr, ptr, ptr) local_unnamed_addr #1
155