1
+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
1
2
; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -verify-machineinstrs | FileCheck %s
2
3
3
4
@CVal = external local_unnamed_addr global i8 , align 1
13
14
%struct.S = type { i64 , i8 , i16 , i32 }
14
15
15
16
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
16
25
%l4 = bitcast %struct.S* %p to i64*
17
26
store i64 0 , i64* %l4 , align 8
18
27
%c = getelementptr %struct.S , %struct.S* %p , i64 0 , i32 1
@@ -23,15 +32,17 @@ define void @foo(%struct.S* %p) {
23
32
store i32 0 , i32* %i , align 4
24
33
ret void
25
34
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)
32
35
}
33
36
34
37
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
35
46
%i = getelementptr %struct.S , %struct.S* %p , i64 0 , i32 3
36
47
store i32 2 , i32* %i , align 4
37
48
%s = getelementptr %struct.S , %struct.S* %p , i64 0 , i32 2
@@ -42,103 +53,171 @@ define void @bar(%struct.S* %p) {
42
53
store i64 2 , i64* %l4 , align 8
43
54
ret void
44
55
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)
51
56
}
52
57
53
58
; Function Attrs: norecurse nounwind
54
59
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
55
76
entry:
56
77
store i8 -7 , i8* @CVal , align 1
57
78
store i16 -7 , i16* @SVal , align 2
58
79
store i32 -7 , i32* @IVal , align 4
59
80
store i64 -7 , i64* @LVal , align 8
60
81
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,
67
82
}
68
83
69
84
; Function Attrs: norecurse nounwind
70
85
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
71
102
entry:
72
103
store i8 8 , i8* @CVal , align 1
73
104
store i16 8 , i16* @SVal , align 2
74
105
store i32 8 , i32* @IVal , align 4
75
106
store i64 8 , i64* @LVal , align 8
76
107
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,
83
108
}
84
109
85
110
; Function Attrs: norecurse nounwind
86
111
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
87
125
entry:
88
126
store i16 -32768 , i16* @SVal , align 2
89
127
store i32 -32768 , i32* @IVal , align 4
90
128
store i64 -32768 , i64* @LVal , align 8
91
129
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,
97
130
}
98
131
99
132
; Function Attrs: norecurse nounwind
100
133
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
101
147
entry:
102
148
store i16 32767 , i16* @SVal , align 2
103
149
store i32 32767 , i32* @IVal , align 4
104
150
store i64 32767 , i64* @LVal , align 8
105
151
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,
111
152
}
112
153
113
154
; Function Attrs: norecurse nounwind
114
155
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
115
167
entry:
116
168
store i32 -32769 , i32* @IVal , align 4
117
169
store i64 -32769 , i64* @LVal , align 8
118
170
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,
124
171
}
125
172
126
173
; Function Attrs: norecurse nounwind
127
174
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
128
189
entry:
129
190
store i16 -32768 , i16* @USVal , align 2
130
191
store i32 32768 , i32* @IVal , align 4
131
192
store i64 32768 , i64* @LVal , align 8
132
193
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,
139
194
}
140
195
141
196
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
142
221
entry:
143
222
%cmp7 = icmp sgt i32 %Len , 0
144
223
br i1 %cmp7 , label %for.body.lr.ph , label %for.cond.cleanup
@@ -161,31 +240,39 @@ for.body: ; preds = %for.body, %for.body
161
240
%indvars.iv.next = add nuw nsw i64 %indvars.iv , 1
162
241
%exitcond = icmp eq i64 %indvars.iv.next , %wide.trip.count
163
242
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)
168
243
}
169
244
170
245
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
171
256
entry:
172
257
store i32 255 , i32* @IVal , align 4
173
258
store i8 -1 , i8* @CVal , align 1
174
259
ret void
175
- ; CHECK-LABEL: setSameValDiffSizeCI
176
- ; CHECK: li 5, 255
177
- ; CHECK-DAG: stb 5,
178
- ; CHECK-DAG: stw 5,
179
260
}
180
261
181
262
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
182
274
entry:
183
275
store i32 65535 , i32* @IVal , align 4
184
276
store i16 -1 , i16* @SVal , align 2
185
277
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,
191
278
}
0 commit comments