File: p10-fi-elim.ll

package info (click to toggle)
llvm-toolchain-14 1%3A14.0.6-12
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,496,180 kB
  • sloc: cpp: 5,593,972; ansic: 986,872; asm: 585,869; python: 184,223; objc: 72,530; lisp: 31,119; f90: 27,793; javascript: 9,780; pascal: 9,762; sh: 9,482; perl: 7,468; ml: 5,432; awk: 3,523; makefile: 2,538; xml: 953; cs: 573; fortran: 567
file content (159 lines) | stat: -rw-r--r-- 6,143 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
; RUN:   FileCheck %s
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
; RUN:   FileCheck %s --check-prefix=CHECK-BE

%96 = type <{ i32 }>
%97 = type <{ i32 }>
%98 = type <{ i32 }>
%100 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64] }>
%101 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64], [24 x i8] }>
%102 = type <{ i8, i8, i8, i8, i32, i64, i64, [1 x i64], [1 x i64], [1 x i64] }>
%103 = type <{ [152 x i8]*, i8, i8, i8, i8, [4 x i8], i32, [12 x i8], i32, [4 x i8] }>
%104 = type <{ i32 }>
%105 = type <{ i32 }>
%106 = type <{ i32 }>

; Function Attrs: nobuiltin norecurse
define dso_local signext i32 @test_FI_elim([40 x i8]* noalias nocapture dereferenceable(40) %arg, [0 x %96]* noalias nocapture nonnull readonly %arg2, [0 x %97]* noalias nocapture nonnull readonly %arg3, [0 x %98]* noalias nocapture nonnull readonly %arg4, %100* noalias nocapture dereferenceable(48) %arg6, %101* noalias nocapture dereferenceable(72) %arg7) local_unnamed_addr #2 {
; CHECK-LABEL: test_FI_elim:
; CHECK:       # %bb.0: # %bb
; CHECK-NEXT:    mflr r0
; CHECK-NEXT:    std r0, 16(r1)
; CHECK-NEXT:    stdu r1, -80(r1)
; CHECK-NEXT:    .cfi_def_cfa_offset 80
; CHECK-NEXT:    .cfi_offset lr, 16
; CHECK-NEXT:    lxv v2, 0(r3)
; CHECK-NEXT:    mr r9, r6
; CHECK-NEXT:    mr r6, r5
; CHECK-NEXT:    li r0, 4
; CHECK-NEXT:    li r11, 3
; CHECK-NEXT:    std r0, 0(r3)
; CHECK-NEXT:    stb r11, 0(0)
; CHECK-NEXT:    li r12, -127
; CHECK-NEXT:    stb r12, 0(r3)
; CHECK-NEXT:    li r2, 1
; CHECK-NEXT:    stb r11, 0(r3)
; CHECK-NEXT:    stb r12, 0(r3)
; CHECK-NEXT:    stw r2, 0(r3)
; CHECK-NEXT:    mfvsrd r5, v2
; CHECK-NEXT:    vaddudm v3, v2, v2
; CHECK-NEXT:    pstxv v2, 64(r1), 0
; CHECK-NEXT:    neg r5, r5
; CHECK-NEXT:    mfvsrd r10, v3
; CHECK-NEXT:    std r5, 0(r3)
; CHECK-NEXT:    lbz r5, 2(r7)
; CHECK-NEXT:    mr r7, r9
; CHECK-NEXT:    neg r10, r10
; CHECK-NEXT:    std r2, 0(r3)
; CHECK-NEXT:    std r0, 0(r3)
; CHECK-NEXT:    std r10, 0(r3)
; CHECK-NEXT:    rlwinm r5, r5, 0, 27, 27
; CHECK-NEXT:    stb r5, 0(0)
; CHECK-NEXT:    lbz r5, 2(r8)
; CHECK-NEXT:    rlwinm r5, r5, 0, 27, 27
; CHECK-NEXT:    stb r5, 0(r3)
; CHECK-NEXT:    li r5, 2
; CHECK-NEXT:    stw r5, 0(r3)
; CHECK-NEXT:    mr r5, r4
; CHECK-NEXT:    bl foo@notoc
; CHECK-NEXT:    extsw r3, r3
; CHECK-NEXT:    addi r1, r1, 80
; CHECK-NEXT:    ld r0, 16(r1)
; CHECK-NEXT:    mtlr r0
; CHECK-NEXT:    blr
;
; CHECK-BE-LABEL: test_FI_elim:
; CHECK-BE:       # %bb.0: # %bb
; CHECK-BE-NEXT:    mflr r0
; CHECK-BE-NEXT:    std r0, 16(r1)
; CHECK-BE-NEXT:    stdu r1, -176(r1)
; CHECK-BE-NEXT:    .cfi_def_cfa_offset 176
; CHECK-BE-NEXT:    .cfi_offset lr, 16
; CHECK-BE-NEXT:    .cfi_offset r30, -16
; CHECK-BE-NEXT:    lxv v2, 0(r3)
; CHECK-BE-NEXT:    mr r9, r6
; CHECK-BE-NEXT:    mr r6, r5
; CHECK-BE-NEXT:    li r0, 4
; CHECK-BE-NEXT:    li r11, 3
; CHECK-BE-NEXT:    std r30, 160(r1) # 8-byte Folded Spill
; CHECK-BE-NEXT:    std r0, 0(r3)
; CHECK-BE-NEXT:    stb r11, 0(0)
; CHECK-BE-NEXT:    li r12, -127
; CHECK-BE-NEXT:    stb r12, 0(r3)
; CHECK-BE-NEXT:    li r30, 1
; CHECK-BE-NEXT:    stb r11, 0(r3)
; CHECK-BE-NEXT:    stb r12, 0(r3)
; CHECK-BE-NEXT:    mfvsrld r5, v2
; CHECK-BE-NEXT:    vaddudm v3, v2, v2
; CHECK-BE-NEXT:    stw r30, 0(r3)
; CHECK-BE-NEXT:    pstxv v2, 144(r1), 0
; CHECK-BE-NEXT:    mfvsrld r10, v3
; CHECK-BE-NEXT:    neg r5, r5
; CHECK-BE-NEXT:    std r5, 0(r3)
; CHECK-BE-NEXT:    lbz r5, 2(r7)
; CHECK-BE-NEXT:    mr r7, r9
; CHECK-BE-NEXT:    neg r10, r10
; CHECK-BE-NEXT:    std r30, 0(r3)
; CHECK-BE-NEXT:    std r0, 0(r3)
; CHECK-BE-NEXT:    std r10, 0(r3)
; CHECK-BE-NEXT:    rlwinm r5, r5, 0, 27, 27
; CHECK-BE-NEXT:    stb r5, 0(0)
; CHECK-BE-NEXT:    lbz r5, 2(r8)
; CHECK-BE-NEXT:    rlwinm r5, r5, 0, 27, 27
; CHECK-BE-NEXT:    stb r5, 0(r3)
; CHECK-BE-NEXT:    li r5, 2
; CHECK-BE-NEXT:    stw r5, 0(r3)
; CHECK-BE-NEXT:    mr r5, r4
; CHECK-BE-NEXT:    bl foo
; CHECK-BE-NEXT:    nop
; CHECK-BE-NEXT:    ld r30, 160(r1) # 8-byte Folded Reload
; CHECK-BE-NEXT:    extsw r3, r3
; CHECK-BE-NEXT:    addi r1, r1, 176
; CHECK-BE-NEXT:    ld r0, 16(r1)
; CHECK-BE-NEXT:    mtlr r0
; CHECK-BE-NEXT:    blr
bb:
  %i = alloca %102, align 8
  %i8 = load <2 x i64>, <2 x i64>* undef, align 8
  %i9 = extractelement <2 x i64> %i8, i32 1
  %i10 = sub i64 0, %i9
  %i11 = load <2 x i64>, <2 x i64>* undef, align 8
  %i12 = load <2 x i64>, <2 x i64>* undef, align 8
  %i13 = add nsw <2 x i64> %i11, %i12
  %i14 = extractelement <2 x i64> %i13, i32 1
  %i15 = sub i64 0, %i14
  store i8 3, i8* null, align 8
  store i8 -127, i8* undef, align 1
  store i64 4, i64* undef, align 8
  store i32 1, i32* undef, align 4
  %i16 = getelementptr inbounds %102, %102* %i, i64 0, i32 8, i64 0
  %i17 = bitcast i64* %i16 to <2 x i64>*
  store <2 x i64> %i8, <2 x i64>* %i17, align 8
  store i64 %i10, i64* undef, align 8
  store i8 3, i8* undef, align 8
  %i18 = getelementptr inbounds %100, %100* %arg6, i64 0, i32 2
  %i19 = load i8, i8* %i18, align 1
  %i20 = and i8 %i19, 16
  store i8 %i20, i8* null, align 2
  store i8 -127, i8* undef, align 1
  store i64 1, i64* undef, align 8
  %i21 = getelementptr inbounds %101, %101* %arg7, i64 0, i32 2
  %i22 = load i8, i8* %i21, align 1
  %i23 = and i8 %i22, 16
  store i8 %i23, i8* undef, align 2
  store i64 4, i64* undef, align 8
  store i32 2, i32* undef, align 4
  store i64 %i15, i64* undef, align 8
  %i24 = bitcast [40 x i8]* %arg to %103*
  %i25 = bitcast [0 x %96]* %arg2 to [0 x %104]*
  %i26 = bitcast [0 x %97]* %arg3 to [0 x %105]*
  %i27 = bitcast [0 x %98]* %arg4 to [0 x %106]*
  %i28 = call i32 @foo(%103* nonnull %i24, i32* nonnull undef, [0 x %104]* %i25, [0 x %105]* %i26, [0 x %106]* %i27)
  ret i32 %i28
}

declare dso_local i32 @foo(%103*, i32*, [0 x %104]*, [0 x %105]*, [0 x %106]*) local_unnamed_addr #1