17
17
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
18
18
; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
19
19
; RUN: -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-BE-P9
20
- ; xscvdpsxws and uxws is only available on Power7 and above
21
- ; Codgen is different for LE Power7 and Power8
20
+ ; xscvdpsxws and xscvdpsxws is only available on Power7 and above
21
+ ; Codgen is different for Power7, Power8, and Power9.
22
22
23
23
define dso_local <4 x i32 > @test (<4 x i32 > %a , double %b ) {
24
24
; CHECK-LE-P7-LABEL: test:
@@ -38,20 +38,16 @@ define dso_local <4 x i32> @test(<4 x i32> %a, double %b) {
38
38
;
39
39
; CHECK-LE-P8-LABEL: test:
40
40
; CHECK-LE-P8: # %bb.0: # %entry
41
- ; CHECK-LE-P8-NEXT: xscvdpsxws f0 , f1
41
+ ; CHECK-LE-P8-NEXT: xscvdpsxws v3 , f1
42
42
; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI0_0@toc@ha
43
43
; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI0_0@toc@l
44
- ; CHECK-LE-P8-NEXT: lvx v3, 0, r3
45
- ; CHECK-LE-P8-NEXT: mffprwz r4, f0
46
- ; CHECK-LE-P8-NEXT: mtvsrwz v4, r4
47
- ; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3
44
+ ; CHECK-LE-P8-NEXT: lvx v4, 0, r3
45
+ ; CHECK-LE-P8-NEXT: vperm v2, v3, v2, v4
48
46
; CHECK-LE-P8-NEXT: blr
49
47
;
50
48
; CHECK-LE-P9-LABEL: test:
51
49
; CHECK-LE-P9: # %bb.0: # %entry
52
50
; CHECK-LE-P9-NEXT: xscvdpsxws f0, f1
53
- ; CHECK-LE-P9-NEXT: mffprwz r3, f0
54
- ; CHECK-LE-P9-NEXT: mtfprwz f0, r3
55
51
; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 0
56
52
; CHECK-LE-P9-NEXT: blr
57
53
;
@@ -70,9 +66,7 @@ define dso_local <4 x i32> @test(<4 x i32> %a, double %b) {
70
66
;
71
67
; CHECK-BE-P8-LABEL: test:
72
68
; CHECK-BE-P8: # %bb.0: # %entry
73
- ; CHECK-BE-P8-NEXT: xscvdpsxws f0, f1
74
- ; CHECK-BE-P8-NEXT: mffprwz r3, f0
75
- ; CHECK-BE-P8-NEXT: mtvsrwz v3, r3
69
+ ; CHECK-BE-P8-NEXT: xscvdpsxws v3, f1
76
70
; CHECK-BE-P8-NEXT: vmrghw v3, v2, v3
77
71
; CHECK-BE-P8-NEXT: xxsldwi vs0, v3, v2, 3
78
72
; CHECK-BE-P8-NEXT: xxsldwi v2, vs0, vs0, 1
@@ -81,8 +75,6 @@ define dso_local <4 x i32> @test(<4 x i32> %a, double %b) {
81
75
; CHECK-BE-P9-LABEL: test:
82
76
; CHECK-BE-P9: # %bb.0: # %entry
83
77
; CHECK-BE-P9-NEXT: xscvdpsxws f0, f1
84
- ; CHECK-BE-P9-NEXT: mffprwz r3, f0
85
- ; CHECK-BE-P9-NEXT: mtfprwz f0, r3
86
78
; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 12
87
79
; CHECK-BE-P9-NEXT: blr
88
80
entry:
@@ -109,20 +101,16 @@ define dso_local <4 x i32> @test2(<4 x i32> %a, float %b) {
109
101
;
110
102
; CHECK-LE-P8-LABEL: test2:
111
103
; CHECK-LE-P8: # %bb.0: # %entry
112
- ; CHECK-LE-P8-NEXT: xscvdpsxws f0 , f1
104
+ ; CHECK-LE-P8-NEXT: xscvdpsxws v3 , f1
113
105
; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI1_0@toc@ha
114
106
; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI1_0@toc@l
115
- ; CHECK-LE-P8-NEXT: lvx v3, 0, r3
116
- ; CHECK-LE-P8-NEXT: mffprwz r4, f0
117
- ; CHECK-LE-P8-NEXT: mtvsrwz v4, r4
118
- ; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3
107
+ ; CHECK-LE-P8-NEXT: lvx v4, 0, r3
108
+ ; CHECK-LE-P8-NEXT: vperm v2, v3, v2, v4
119
109
; CHECK-LE-P8-NEXT: blr
120
110
;
121
111
; CHECK-LE-P9-LABEL: test2:
122
112
; CHECK-LE-P9: # %bb.0: # %entry
123
113
; CHECK-LE-P9-NEXT: xscvdpsxws f0, f1
124
- ; CHECK-LE-P9-NEXT: mffprwz r3, f0
125
- ; CHECK-LE-P9-NEXT: mtfprwz f0, r3
126
114
; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 0
127
115
; CHECK-LE-P9-NEXT: blr
128
116
;
@@ -141,9 +129,7 @@ define dso_local <4 x i32> @test2(<4 x i32> %a, float %b) {
141
129
;
142
130
; CHECK-BE-P8-LABEL: test2:
143
131
; CHECK-BE-P8: # %bb.0: # %entry
144
- ; CHECK-BE-P8-NEXT: xscvdpsxws f0, f1
145
- ; CHECK-BE-P8-NEXT: mffprwz r3, f0
146
- ; CHECK-BE-P8-NEXT: mtvsrwz v3, r3
132
+ ; CHECK-BE-P8-NEXT: xscvdpsxws v3, f1
147
133
; CHECK-BE-P8-NEXT: vmrghw v3, v2, v3
148
134
; CHECK-BE-P8-NEXT: xxsldwi vs0, v3, v2, 3
149
135
; CHECK-BE-P8-NEXT: xxsldwi v2, vs0, vs0, 1
@@ -152,8 +138,6 @@ define dso_local <4 x i32> @test2(<4 x i32> %a, float %b) {
152
138
; CHECK-BE-P9-LABEL: test2:
153
139
; CHECK-BE-P9: # %bb.0: # %entry
154
140
; CHECK-BE-P9-NEXT: xscvdpsxws f0, f1
155
- ; CHECK-BE-P9-NEXT: mffprwz r3, f0
156
- ; CHECK-BE-P9-NEXT: mtfprwz f0, r3
157
141
; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 12
158
142
; CHECK-BE-P9-NEXT: blr
159
143
entry:
@@ -180,20 +164,16 @@ define dso_local <4 x i32> @test3(<4 x i32> %a, double %b) {
180
164
;
181
165
; CHECK-LE-P8-LABEL: test3:
182
166
; CHECK-LE-P8: # %bb.0: # %entry
183
- ; CHECK-LE-P8-NEXT: xscvdpuxws f0 , f1
167
+ ; CHECK-LE-P8-NEXT: xscvdpuxws v3 , f1
184
168
; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI2_0@toc@ha
185
169
; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI2_0@toc@l
186
- ; CHECK-LE-P8-NEXT: lvx v3, 0, r3
187
- ; CHECK-LE-P8-NEXT: mffprwz r4, f0
188
- ; CHECK-LE-P8-NEXT: mtvsrwz v4, r4
189
- ; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3
170
+ ; CHECK-LE-P8-NEXT: lvx v4, 0, r3
171
+ ; CHECK-LE-P8-NEXT: vperm v2, v3, v2, v4
190
172
; CHECK-LE-P8-NEXT: blr
191
173
;
192
174
; CHECK-LE-P9-LABEL: test3:
193
175
; CHECK-LE-P9: # %bb.0: # %entry
194
176
; CHECK-LE-P9-NEXT: xscvdpuxws f0, f1
195
- ; CHECK-LE-P9-NEXT: mffprwz r3, f0
196
- ; CHECK-LE-P9-NEXT: mtfprwz f0, r3
197
177
; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 0
198
178
; CHECK-LE-P9-NEXT: blr
199
179
;
@@ -212,9 +192,7 @@ define dso_local <4 x i32> @test3(<4 x i32> %a, double %b) {
212
192
;
213
193
; CHECK-BE-P8-LABEL: test3:
214
194
; CHECK-BE-P8: # %bb.0: # %entry
215
- ; CHECK-BE-P8-NEXT: xscvdpuxws f0, f1
216
- ; CHECK-BE-P8-NEXT: mffprwz r3, f0
217
- ; CHECK-BE-P8-NEXT: mtvsrwz v3, r3
195
+ ; CHECK-BE-P8-NEXT: xscvdpuxws v3, f1
218
196
; CHECK-BE-P8-NEXT: vmrghw v3, v2, v3
219
197
; CHECK-BE-P8-NEXT: xxsldwi vs0, v3, v2, 3
220
198
; CHECK-BE-P8-NEXT: xxsldwi v2, vs0, vs0, 1
@@ -223,8 +201,6 @@ define dso_local <4 x i32> @test3(<4 x i32> %a, double %b) {
223
201
; CHECK-BE-P9-LABEL: test3:
224
202
; CHECK-BE-P9: # %bb.0: # %entry
225
203
; CHECK-BE-P9-NEXT: xscvdpuxws f0, f1
226
- ; CHECK-BE-P9-NEXT: mffprwz r3, f0
227
- ; CHECK-BE-P9-NEXT: mtfprwz f0, r3
228
204
; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 12
229
205
; CHECK-BE-P9-NEXT: blr
230
206
entry:
@@ -251,20 +227,16 @@ define dso_local <4 x i32> @test4(<4 x i32> %a, float %b) {
251
227
;
252
228
; CHECK-LE-P8-LABEL: test4:
253
229
; CHECK-LE-P8: # %bb.0: # %entry
254
- ; CHECK-LE-P8-NEXT: xscvdpuxws f0 , f1
230
+ ; CHECK-LE-P8-NEXT: xscvdpuxws v3 , f1
255
231
; CHECK-LE-P8-NEXT: addis r3, r2, .LCPI3_0@toc@ha
256
232
; CHECK-LE-P8-NEXT: addi r3, r3, .LCPI3_0@toc@l
257
- ; CHECK-LE-P8-NEXT: lvx v3, 0, r3
258
- ; CHECK-LE-P8-NEXT: mffprwz r4, f0
259
- ; CHECK-LE-P8-NEXT: mtvsrwz v4, r4
260
- ; CHECK-LE-P8-NEXT: vperm v2, v4, v2, v3
233
+ ; CHECK-LE-P8-NEXT: lvx v4, 0, r3
234
+ ; CHECK-LE-P8-NEXT: vperm v2, v3, v2, v4
261
235
; CHECK-LE-P8-NEXT: blr
262
236
;
263
237
; CHECK-LE-P9-LABEL: test4:
264
238
; CHECK-LE-P9: # %bb.0: # %entry
265
239
; CHECK-LE-P9-NEXT: xscvdpuxws f0, f1
266
- ; CHECK-LE-P9-NEXT: mffprwz r3, f0
267
- ; CHECK-LE-P9-NEXT: mtfprwz f0, r3
268
240
; CHECK-LE-P9-NEXT: xxinsertw v2, vs0, 0
269
241
; CHECK-LE-P9-NEXT: blr
270
242
;
@@ -283,9 +255,7 @@ define dso_local <4 x i32> @test4(<4 x i32> %a, float %b) {
283
255
;
284
256
; CHECK-BE-P8-LABEL: test4:
285
257
; CHECK-BE-P8: # %bb.0: # %entry
286
- ; CHECK-BE-P8-NEXT: xscvdpuxws f0, f1
287
- ; CHECK-BE-P8-NEXT: mffprwz r3, f0
288
- ; CHECK-BE-P8-NEXT: mtvsrwz v3, r3
258
+ ; CHECK-BE-P8-NEXT: xscvdpuxws v3, f1
289
259
; CHECK-BE-P8-NEXT: vmrghw v3, v2, v3
290
260
; CHECK-BE-P8-NEXT: xxsldwi vs0, v3, v2, 3
291
261
; CHECK-BE-P8-NEXT: xxsldwi v2, vs0, vs0, 1
@@ -294,8 +264,6 @@ define dso_local <4 x i32> @test4(<4 x i32> %a, float %b) {
294
264
; CHECK-BE-P9-LABEL: test4:
295
265
; CHECK-BE-P9: # %bb.0: # %entry
296
266
; CHECK-BE-P9-NEXT: xscvdpuxws f0, f1
297
- ; CHECK-BE-P9-NEXT: mffprwz r3, f0
298
- ; CHECK-BE-P9-NEXT: mtfprwz f0, r3
299
267
; CHECK-BE-P9-NEXT: xxinsertw v2, vs0, 12
300
268
; CHECK-BE-P9-NEXT: blr
301
269
entry:
0 commit comments