Skip to content

Commit d7aded3

Browse files
committed
[PowerPC] Automatically generate store-constant.ll . NFC
1 parent 761dd78 commit d7aded3

File tree

1 file changed

+145
-58
lines changed

1 file changed

+145
-58
lines changed
Lines changed: 145 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
12
; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -verify-machineinstrs | FileCheck %s
23

34
@CVal = external local_unnamed_addr global i8, align 1
@@ -13,6 +14,14 @@
1314
%struct.S = type { i64, i8, i16, i32 }
1415

1516
define void @foo(%struct.S* %p) {
17+
; CHECK-LABEL: foo:
18+
; CHECK: # %bb.0:
19+
; CHECK-NEXT: li 4, 0
20+
; CHECK-NEXT: stb 4, 8(3)
21+
; CHECK-NEXT: std 4, 0(3)
22+
; CHECK-NEXT: sth 4, 10(3)
23+
; CHECK-NEXT: stw 4, 12(3)
24+
; CHECK-NEXT: blr
1625
%l4 = bitcast %struct.S* %p to i64*
1726
store i64 0, i64* %l4, align 8
1827
%c = getelementptr %struct.S, %struct.S* %p, i64 0, i32 1
@@ -23,15 +32,17 @@ define void @foo(%struct.S* %p) {
2332
store i32 0, i32* %i, align 4
2433
ret void
2534

26-
; CHECK-LABEL: @foo
27-
; CHECK: li 4, 0
28-
; CHECK: stb 4, 8(3)
29-
; CHECK: std 4, 0(3)
30-
; CHECK: sth 4, 10(3)
31-
; CHECK: stw 4, 12(3)
3235
}
3336

3437
define void @bar(%struct.S* %p) {
38+
; CHECK-LABEL: bar:
39+
; CHECK: # %bb.0:
40+
; CHECK-NEXT: li 4, 2
41+
; CHECK-NEXT: stw 4, 12(3)
42+
; CHECK-NEXT: sth 4, 10(3)
43+
; CHECK-NEXT: std 4, 0(3)
44+
; CHECK-NEXT: stb 4, 8(3)
45+
; CHECK-NEXT: blr
3546
%i = getelementptr %struct.S, %struct.S* %p, i64 0, i32 3
3647
store i32 2, i32* %i, align 4
3748
%s = getelementptr %struct.S, %struct.S* %p, i64 0, i32 2
@@ -42,103 +53,171 @@ define void @bar(%struct.S* %p) {
4253
store i64 2, i64* %l4, align 8
4354
ret void
4455

45-
; CHECK-LABEL: @bar
46-
; CHECK: li 4, 2
47-
; CHECK-DAG: stw 4, 12(3)
48-
; CHECK-DAG: sth 4, 10(3)
49-
; CHECK-DAG: std 4, 0(3)
50-
; CHECK-DAG: stb 4, 8(3)
5156
}
5257

5358
; Function Attrs: norecurse nounwind
5459
define void @setSmallNeg() {
60+
; CHECK-LABEL: setSmallNeg:
61+
; CHECK: # %bb.0: # %entry
62+
; CHECK-NEXT: addis 3, 2, .LC0@toc@ha
63+
; CHECK-NEXT: addis 4, 2, .LC1@toc@ha
64+
; CHECK-NEXT: addis 5, 2, .LC2@toc@ha
65+
; CHECK-NEXT: addis 6, 2, .LC3@toc@ha
66+
; CHECK-NEXT: li 7, -7
67+
; CHECK-NEXT: ld 3, .LC0@toc@l(3)
68+
; CHECK-NEXT: ld 4, .LC1@toc@l(4)
69+
; CHECK-NEXT: ld 5, .LC2@toc@l(5)
70+
; CHECK-NEXT: ld 6, .LC3@toc@l(6)
71+
; CHECK-NEXT: stb 7, 0(3)
72+
; CHECK-NEXT: sth 7, 0(4)
73+
; CHECK-NEXT: std 7, 0(6)
74+
; CHECK-NEXT: stw 7, 0(5)
75+
; CHECK-NEXT: blr
5576
entry:
5677
store i8 -7, i8* @CVal, align 1
5778
store i16 -7, i16* @SVal, align 2
5879
store i32 -7, i32* @IVal, align 4
5980
store i64 -7, i64* @LVal, align 8
6081
ret void
61-
; CHECK-LABEL: setSmallNeg
62-
; CHECK: li 7, -7
63-
; CHECK-DAG: stb 7,
64-
; CHECK-DAG: sth 7,
65-
; CHECK-DAG: stw 7,
66-
; CHECK-DAG: std 7,
6782
}
6883

6984
; Function Attrs: norecurse nounwind
7085
define void @setSmallPos() {
86+
; CHECK-LABEL: setSmallPos:
87+
; CHECK: # %bb.0: # %entry
88+
; CHECK-NEXT: addis 3, 2, .LC0@toc@ha
89+
; CHECK-NEXT: addis 4, 2, .LC1@toc@ha
90+
; CHECK-NEXT: addis 5, 2, .LC2@toc@ha
91+
; CHECK-NEXT: addis 6, 2, .LC3@toc@ha
92+
; CHECK-NEXT: li 7, 8
93+
; CHECK-NEXT: ld 3, .LC0@toc@l(3)
94+
; CHECK-NEXT: ld 4, .LC1@toc@l(4)
95+
; CHECK-NEXT: ld 5, .LC2@toc@l(5)
96+
; CHECK-NEXT: ld 6, .LC3@toc@l(6)
97+
; CHECK-NEXT: stb 7, 0(3)
98+
; CHECK-NEXT: sth 7, 0(4)
99+
; CHECK-NEXT: std 7, 0(6)
100+
; CHECK-NEXT: stw 7, 0(5)
101+
; CHECK-NEXT: blr
71102
entry:
72103
store i8 8, i8* @CVal, align 1
73104
store i16 8, i16* @SVal, align 2
74105
store i32 8, i32* @IVal, align 4
75106
store i64 8, i64* @LVal, align 8
76107
ret void
77-
; CHECK-LABEL: setSmallPos
78-
; CHECK: li 7, 8
79-
; CHECK-DAG: stb 7,
80-
; CHECK-DAG: sth 7,
81-
; CHECK-DAG: stw 7,
82-
; CHECK-DAG: std 7,
83108
}
84109

85110
; Function Attrs: norecurse nounwind
86111
define void @setMaxNeg() {
112+
; CHECK-LABEL: setMaxNeg:
113+
; CHECK: # %bb.0: # %entry
114+
; CHECK-NEXT: addis 3, 2, .LC1@toc@ha
115+
; CHECK-NEXT: addis 4, 2, .LC2@toc@ha
116+
; CHECK-NEXT: addis 5, 2, .LC3@toc@ha
117+
; CHECK-NEXT: li 6, -32768
118+
; CHECK-NEXT: ld 3, .LC1@toc@l(3)
119+
; CHECK-NEXT: ld 4, .LC2@toc@l(4)
120+
; CHECK-NEXT: ld 5, .LC3@toc@l(5)
121+
; CHECK-NEXT: sth 6, 0(3)
122+
; CHECK-NEXT: stw 6, 0(4)
123+
; CHECK-NEXT: std 6, 0(5)
124+
; CHECK-NEXT: blr
87125
entry:
88126
store i16 -32768, i16* @SVal, align 2
89127
store i32 -32768, i32* @IVal, align 4
90128
store i64 -32768, i64* @LVal, align 8
91129
ret void
92-
; CHECK-LABEL: setMaxNeg
93-
; CHECK: li 6, -32768
94-
; CHECK-DAG: sth 6,
95-
; CHECK-DAG: stw 6,
96-
; CHECK-DAG: std 6,
97130
}
98131

99132
; Function Attrs: norecurse nounwind
100133
define void @setMaxPos() {
134+
; CHECK-LABEL: setMaxPos:
135+
; CHECK: # %bb.0: # %entry
136+
; CHECK-NEXT: addis 3, 2, .LC1@toc@ha
137+
; CHECK-NEXT: addis 4, 2, .LC2@toc@ha
138+
; CHECK-NEXT: addis 5, 2, .LC3@toc@ha
139+
; CHECK-NEXT: li 6, 32767
140+
; CHECK-NEXT: ld 3, .LC1@toc@l(3)
141+
; CHECK-NEXT: ld 4, .LC2@toc@l(4)
142+
; CHECK-NEXT: ld 5, .LC3@toc@l(5)
143+
; CHECK-NEXT: sth 6, 0(3)
144+
; CHECK-NEXT: stw 6, 0(4)
145+
; CHECK-NEXT: std 6, 0(5)
146+
; CHECK-NEXT: blr
101147
entry:
102148
store i16 32767, i16* @SVal, align 2
103149
store i32 32767, i32* @IVal, align 4
104150
store i64 32767, i64* @LVal, align 8
105151
ret void
106-
; CHECK-LABEL: setMaxPos
107-
; CHECK: li 6, 32767
108-
; CHECK-DAG: sth 6,
109-
; CHECK-DAG: stw 6,
110-
; CHECK-DAG: std 6,
111152
}
112153

113154
; Function Attrs: norecurse nounwind
114155
define void @setExcessiveNeg() {
156+
; CHECK-LABEL: setExcessiveNeg:
157+
; CHECK: # %bb.0: # %entry
158+
; CHECK-NEXT: addis 3, 2, .LC2@toc@ha
159+
; CHECK-NEXT: addis 4, 2, .LC3@toc@ha
160+
; CHECK-NEXT: lis 5, -1
161+
; CHECK-NEXT: ld 3, .LC2@toc@l(3)
162+
; CHECK-NEXT: ld 4, .LC3@toc@l(4)
163+
; CHECK-NEXT: ori 5, 5, 32767
164+
; CHECK-NEXT: stw 5, 0(3)
165+
; CHECK-NEXT: std 5, 0(4)
166+
; CHECK-NEXT: blr
115167
entry:
116168
store i32 -32769, i32* @IVal, align 4
117169
store i64 -32769, i64* @LVal, align 8
118170
ret void
119-
; CHECK-LABEL: setExcessiveNeg
120-
; CHECK: lis 5, -1
121-
; CHECK: ori 5, 5, 32767
122-
; CHECK-DAG: stw 5,
123-
; CHECK-DAG: std 5,
124171
}
125172

126173
; Function Attrs: norecurse nounwind
127174
define void @setExcessivePos() {
175+
; CHECK-LABEL: setExcessivePos:
176+
; CHECK: # %bb.0: # %entry
177+
; CHECK-NEXT: addis 3, 2, .LC4@toc@ha
178+
; CHECK-NEXT: addis 4, 2, .LC2@toc@ha
179+
; CHECK-NEXT: addis 5, 2, .LC3@toc@ha
180+
; CHECK-NEXT: li 6, 0
181+
; CHECK-NEXT: ld 3, .LC4@toc@l(3)
182+
; CHECK-NEXT: ld 4, .LC2@toc@l(4)
183+
; CHECK-NEXT: ld 5, .LC3@toc@l(5)
184+
; CHECK-NEXT: ori 6, 6, 32768
185+
; CHECK-NEXT: sth 6, 0(3)
186+
; CHECK-NEXT: stw 6, 0(4)
187+
; CHECK-NEXT: std 6, 0(5)
188+
; CHECK-NEXT: blr
128189
entry:
129190
store i16 -32768, i16* @USVal, align 2
130191
store i32 32768, i32* @IVal, align 4
131192
store i64 32768, i64* @LVal, align 8
132193
ret void
133-
; CHECK-LABEL: setExcessivePos
134-
; CHECK: li 6, 0
135-
; CHECK: ori 6, 6, 32768
136-
; CHECK-DAG: sth 6,
137-
; CHECK-DAG: stw 6,
138-
; CHECK-DAG: std 6,
139194
}
140195

141196
define void @SetArr(i32 signext %Len) {
197+
; CHECK-LABEL: SetArr:
198+
; CHECK: # %bb.0: # %entry
199+
; CHECK-NEXT: cmpwi 3, 1
200+
; CHECK-NEXT: bltlr 0
201+
; CHECK-NEXT: # %bb.1: # %for.body.lr.ph
202+
; CHECK-NEXT: addis 4, 2, .LC5@toc@ha
203+
; CHECK-NEXT: addis 5, 2, .LC6@toc@ha
204+
; CHECK-NEXT: clrldi 6, 3, 32
205+
; CHECK-NEXT: ld 4, .LC5@toc@l(4)
206+
; CHECK-NEXT: ld 5, .LC6@toc@l(5)
207+
; CHECK-NEXT: ld 4, 0(4)
208+
; CHECK-NEXT: ld 5, 0(5)
209+
; CHECK-NEXT: mtctr 6
210+
; CHECK-NEXT: addi 3, 4, -8
211+
; CHECK-NEXT: addi 4, 5, -4
212+
; CHECK-NEXT: li 5, -7
213+
; CHECK-NEXT: .p2align 4
214+
; CHECK-NEXT: .LBB8_2: # %for.body
215+
; CHECK-NEXT: #
216+
; CHECK-NEXT: stdu 5, 8(3)
217+
; CHECK-NEXT: stwu 5, 4(4)
218+
; CHECK-NEXT: bdnz .LBB8_2
219+
; CHECK-NEXT: # %bb.3: # %for.cond.cleanup
220+
; CHECK-NEXT: blr
142221
entry:
143222
%cmp7 = icmp sgt i32 %Len, 0
144223
br i1 %cmp7, label %for.body.lr.ph, label %for.cond.cleanup
@@ -161,31 +240,39 @@ for.body: ; preds = %for.body, %for.body
161240
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
162241
%exitcond = icmp eq i64 %indvars.iv.next, %wide.trip.count
163242
br i1 %exitcond, label %for.cond.cleanup, label %for.body
164-
; CHECK-LABEL: SetArr
165-
; CHECK: li 5, -7
166-
; CHECK: stdu 5, 8(3)
167-
; CHECK: stwu 5, 4(4)
168243
}
169244

170245
define void @setSameValDiffSizeCI() {
246+
; CHECK-LABEL: setSameValDiffSizeCI:
247+
; CHECK: # %bb.0: # %entry
248+
; CHECK-NEXT: addis 3, 2, .LC2@toc@ha
249+
; CHECK-NEXT: addis 4, 2, .LC0@toc@ha
250+
; CHECK-NEXT: li 5, 255
251+
; CHECK-NEXT: ld 3, .LC2@toc@l(3)
252+
; CHECK-NEXT: ld 4, .LC0@toc@l(4)
253+
; CHECK-NEXT: stw 5, 0(3)
254+
; CHECK-NEXT: stb 5, 0(4)
255+
; CHECK-NEXT: blr
171256
entry:
172257
store i32 255, i32* @IVal, align 4
173258
store i8 -1, i8* @CVal, align 1
174259
ret void
175-
; CHECK-LABEL: setSameValDiffSizeCI
176-
; CHECK: li 5, 255
177-
; CHECK-DAG: stb 5,
178-
; CHECK-DAG: stw 5,
179260
}
180261

181262
define void @setSameValDiffSizeSI() {
263+
; CHECK-LABEL: setSameValDiffSizeSI:
264+
; CHECK: # %bb.0: # %entry
265+
; CHECK-NEXT: addis 3, 2, .LC2@toc@ha
266+
; CHECK-NEXT: addis 4, 2, .LC1@toc@ha
267+
; CHECK-NEXT: li 5, 0
268+
; CHECK-NEXT: ld 3, .LC2@toc@l(3)
269+
; CHECK-NEXT: ld 4, .LC1@toc@l(4)
270+
; CHECK-NEXT: ori 5, 5, 65535
271+
; CHECK-NEXT: stw 5, 0(3)
272+
; CHECK-NEXT: sth 5, 0(4)
273+
; CHECK-NEXT: blr
182274
entry:
183275
store i32 65535, i32* @IVal, align 4
184276
store i16 -1, i16* @SVal, align 2
185277
ret void
186-
; CHECK-LABEL: setSameValDiffSizeSI
187-
; CHECK: li 5, 0
188-
; CHECK: ori 5, 5, 65535
189-
; CHECK-DAG: sth 5,
190-
; CHECK-DAG: stw 5,
191278
}

0 commit comments

Comments
 (0)