@@ -64,8 +64,8 @@ define i16 @extract_elt2_v4i16_readfirstlane(<4 x i16> %src) {
64
64
define <2 x i16 > @extract_elt01_v4i16_readfirstlane (<4 x i16 > %src ) {
65
65
; CHECK-LABEL: define <2 x i16> @extract_elt01_v4i16_readfirstlane(
66
66
; CHECK-SAME: <4 x i16> [[SRC:%.*]]) #[[ATTR0]] {
67
- ; CHECK-NEXT: [[VEC :%.*]] = call <4 x i16> @llvm.amdgcn.readfirstlane.v4i16( <4 x i16> [[SRC]])
68
- ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i16> [[VEC]], <4 x i16> poison, <2 x i32> <i32 0, i32 1>
67
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <4 x i16> [[SRC]], <4 x i16> poison, <2 x i32> <i32 0, i32 1>
68
+ ; CHECK-NEXT: [[SHUFFLE:%.*]] = call <2 x i16> @llvm.amdgcn.readfirstlane.v2i16(<2 x i16> [[TMP1]])
69
69
; CHECK-NEXT: ret <2 x i16> [[SHUFFLE]]
70
70
;
71
71
%vec = call <4 x i16 > @llvm.amdgcn.readfirstlane.v4i16 (<4 x i16 > %src )
@@ -76,8 +76,8 @@ define <2 x i16> @extract_elt01_v4i16_readfirstlane(<4 x i16> %src) {
76
76
define <2 x i16 > @extract_elt12_v4i16_readfirstlane (<4 x i16 > %src ) {
77
77
; CHECK-LABEL: define <2 x i16> @extract_elt12_v4i16_readfirstlane(
78
78
; CHECK-SAME: <4 x i16> [[SRC:%.*]]) #[[ATTR0]] {
79
- ; CHECK-NEXT: [[VEC :%.*]] = call <4 x i16> @llvm.amdgcn.readfirstlane.v4i16( <4 x i16> [[SRC]])
80
- ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i16> [[VEC]], <4 x i16> poison, <2 x i32> <i32 1, i32 2>
79
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <4 x i16> [[SRC]], <4 x i16> poison, <2 x i32> <i32 1, i32 2>
80
+ ; CHECK-NEXT: [[SHUFFLE:%.*]] = call <2 x i16> @llvm.amdgcn.readfirstlane.v2i16(<2 x i16> [[TMP1]])
81
81
; CHECK-NEXT: ret <2 x i16> [[SHUFFLE]]
82
82
;
83
83
%vec = call <4 x i16 > @llvm.amdgcn.readfirstlane.v4i16 (<4 x i16 > %src )
@@ -88,8 +88,8 @@ define <2 x i16> @extract_elt12_v4i16_readfirstlane(<4 x i16> %src) {
88
88
define <2 x i16 > @extract_elt23_v4i16_readfirstlane (<4 x i16 > %src ) {
89
89
; CHECK-LABEL: define <2 x i16> @extract_elt23_v4i16_readfirstlane(
90
90
; CHECK-SAME: <4 x i16> [[SRC:%.*]]) #[[ATTR0]] {
91
- ; CHECK-NEXT: [[VEC :%.*]] = call <4 x i16> @llvm.amdgcn.readfirstlane.v4i16( <4 x i16> [[SRC]])
92
- ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i16> [[VEC]], <4 x i16> poison, <2 x i32> <i32 2, i32 3>
91
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <4 x i16> [[SRC]], <4 x i16> poison, <2 x i32> <i32 2, i32 3>
92
+ ; CHECK-NEXT: [[SHUFFLE:%.*]] = call <2 x i16> @llvm.amdgcn.readfirstlane.v2i16(<2 x i16> [[TMP1]])
93
93
; CHECK-NEXT: ret <2 x i16> [[SHUFFLE]]
94
94
;
95
95
%vec = call <4 x i16 > @llvm.amdgcn.readfirstlane.v4i16 (<4 x i16 > %src )
@@ -100,8 +100,9 @@ define <2 x i16> @extract_elt23_v4i16_readfirstlane(<4 x i16> %src) {
100
100
define <2 x i16 > @extract_elt10_v4i16_readfirstlane (<4 x i16 > %src ) {
101
101
; CHECK-LABEL: define <2 x i16> @extract_elt10_v4i16_readfirstlane(
102
102
; CHECK-SAME: <4 x i16> [[SRC:%.*]]) #[[ATTR0]] {
103
- ; CHECK-NEXT: [[VEC:%.*]] = call <4 x i16> @llvm.amdgcn.readfirstlane.v4i16(<4 x i16> [[SRC]])
104
- ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i16> [[VEC]], <4 x i16> poison, <2 x i32> <i32 1, i32 0>
103
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i16> [[SRC]], <4 x i16> poison, <2 x i32> <i32 0, i32 1>
104
+ ; CHECK-NEXT: [[TMP2:%.*]] = call <2 x i16> @llvm.amdgcn.readfirstlane.v2i16(<2 x i16> [[TMP1]])
105
+ ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <2 x i16> [[TMP2]], <2 x i16> poison, <2 x i32> <i32 1, i32 0>
105
106
; CHECK-NEXT: ret <2 x i16> [[SHUFFLE]]
106
107
;
107
108
%vec = call <4 x i16 > @llvm.amdgcn.readfirstlane.v4i16 (<4 x i16 > %src )
@@ -112,7 +113,9 @@ define <2 x i16> @extract_elt10_v4i16_readfirstlane(<4 x i16> %src) {
112
113
define <2 x i16 > @extract_elt32_v4i16_readfirstlane (<4 x i16 > %src ) {
113
114
; CHECK-LABEL: define <2 x i16> @extract_elt32_v4i16_readfirstlane(
114
115
; CHECK-SAME: <4 x i16> [[SRC:%.*]]) #[[ATTR0]] {
115
- ; CHECK-NEXT: [[VEC:%.*]] = call <4 x i16> @llvm.amdgcn.readfirstlane.v4i16(<4 x i16> [[SRC]])
116
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i16> [[SRC]], <4 x i16> poison, <2 x i32> <i32 2, i32 3>
117
+ ; CHECK-NEXT: [[TMP2:%.*]] = call <2 x i16> @llvm.amdgcn.readfirstlane.v2i16(<2 x i16> [[TMP1]])
118
+ ; CHECK-NEXT: [[VEC:%.*]] = shufflevector <2 x i16> [[TMP2]], <2 x i16> poison, <4 x i32> <i32 poison, i32 poison, i32 0, i32 1>
116
119
; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i16> [[VEC]], <4 x i16> poison, <2 x i32> <i32 3, i32 2>
117
120
; CHECK-NEXT: ret <2 x i16> [[SHUFFLE]]
118
121
;
@@ -258,8 +261,8 @@ define <3 x i16> @extract_elt123_v4i16_readfirstlane(<4 x i16> %src) {
258
261
define <3 x i32 > @extract_elt012_v4i32_readfirstlane (<4 x i32 > %src ) {
259
262
; CHECK-LABEL: define <3 x i32> @extract_elt012_v4i32_readfirstlane(
260
263
; CHECK-SAME: <4 x i32> [[SRC:%.*]]) #[[ATTR0]] {
261
- ; CHECK-NEXT: [[VEC :%.*]] = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32( <4 x i32> [[SRC]])
262
- ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[VEC]], <4 x i32> poison, < 3 x i32> <i32 0, i32 1, i32 2>
264
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <4 x i32> [[SRC]], <4 x i32> poison, <3 x i32> <i32 0, i32 1, i32 2>
265
+ ; CHECK-NEXT: [[SHUFFLE:%.*]] = call <3 x i32> @llvm.amdgcn.readfirstlane.v3i32(< 3 x i32> [[TMP1]])
263
266
; CHECK-NEXT: ret <3 x i32> [[SHUFFLE]]
264
267
;
265
268
%vec = call <4 x i32 > @llvm.amdgcn.readfirstlane.v4i32 (<4 x i32 > %src )
@@ -270,8 +273,8 @@ define <3 x i32> @extract_elt012_v4i32_readfirstlane(<4 x i32> %src) {
270
273
define <3 x i32 > @extract_elt123_v4i32_readfirstlane (<4 x i32 > %src ) {
271
274
; CHECK-LABEL: define <3 x i32> @extract_elt123_v4i32_readfirstlane(
272
275
; CHECK-SAME: <4 x i32> [[SRC:%.*]]) #[[ATTR0]] {
273
- ; CHECK-NEXT: [[VEC :%.*]] = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32( <4 x i32> [[SRC]])
274
- ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[VEC]], <4 x i32> poison, < 3 x i32> <i32 1, i32 2, i32 3>
276
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <4 x i32> [[SRC]], <4 x i32> poison, <3 x i32> <i32 1, i32 2, i32 3>
277
+ ; CHECK-NEXT: [[SHUFFLE:%.*]] = call <3 x i32> @llvm.amdgcn.readfirstlane.v3i32(< 3 x i32> [[TMP1]])
275
278
; CHECK-NEXT: ret <3 x i32> [[SHUFFLE]]
276
279
;
277
280
%vec = call <4 x i32 > @llvm.amdgcn.readfirstlane.v4i32 (<4 x i32 > %src )
@@ -282,7 +285,9 @@ define <3 x i32> @extract_elt123_v4i32_readfirstlane(<4 x i32> %src) {
282
285
define <2 x i32 > @extract_elt13_v4i32_readfirstlane (<4 x i32 > %src ) {
283
286
; CHECK-LABEL: define <2 x i32> @extract_elt13_v4i32_readfirstlane(
284
287
; CHECK-SAME: <4 x i32> [[SRC:%.*]]) #[[ATTR0]] {
285
- ; CHECK-NEXT: [[VEC:%.*]] = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32(<4 x i32> [[SRC]])
288
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i32> [[SRC]], <4 x i32> poison, <3 x i32> <i32 1, i32 poison, i32 3>
289
+ ; CHECK-NEXT: [[TMP2:%.*]] = call <3 x i32> @llvm.amdgcn.readfirstlane.v3i32(<3 x i32> [[TMP1]])
290
+ ; CHECK-NEXT: [[VEC:%.*]] = shufflevector <3 x i32> [[TMP2]], <3 x i32> poison, <4 x i32> <i32 poison, i32 0, i32 poison, i32 2>
286
291
; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[VEC]], <4 x i32> poison, <2 x i32> <i32 1, i32 3>
287
292
; CHECK-NEXT: ret <2 x i32> [[SHUFFLE]]
288
293
;
@@ -321,8 +326,9 @@ define < 2 x i32> @extract_elt13_v4i32_readfirstlane_source_simplify1(i32 %src0,
321
326
; CHECK-LABEL: define <2 x i32> @extract_elt13_v4i32_readfirstlane_source_simplify1(
322
327
; CHECK-SAME: i32 [[SRC0:%.*]], i32 [[SRC2:%.*]]) #[[ATTR0]] {
323
328
; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i32> poison, i32 [[SRC0]], i64 0
324
- ; CHECK-NEXT: [[INS_1:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <4 x i32> <i32 poison, i32 0, i32 poison, i32 0>
325
- ; CHECK-NEXT: [[VEC:%.*]] = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32(<4 x i32> [[INS_1]])
329
+ ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <3 x i32> <i32 0, i32 poison, i32 0>
330
+ ; CHECK-NEXT: [[TMP3:%.*]] = call <3 x i32> @llvm.amdgcn.readfirstlane.v3i32(<3 x i32> [[TMP2]])
331
+ ; CHECK-NEXT: [[VEC:%.*]] = shufflevector <3 x i32> [[TMP3]], <3 x i32> poison, <4 x i32> <i32 poison, i32 0, i32 poison, i32 2>
326
332
; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[VEC]], <4 x i32> poison, <2 x i32> <i32 1, i32 3>
327
333
; CHECK-NEXT: ret <2 x i32> [[SHUFFLE]]
328
334
;
@@ -365,7 +371,10 @@ define < 2 x i32> @extract_elt13_v4i32_readfirstlane_source_simplify1_convergenc
365
371
; CHECK-NEXT: [[T:%.*]] = call token @llvm.experimental.convergence.entry()
366
372
; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i32> poison, i32 [[SRC0]], i64 0
367
373
; CHECK-NEXT: [[INS_1:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <4 x i32> <i32 poison, i32 0, i32 poison, i32 0>
368
- ; CHECK-NEXT: [[VEC:%.*]] = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32(<4 x i32> [[INS_1]]) [ "convergencectrl"(token [[T]]) ]
374
+ ; CHECK-NEXT: [[VEC1:%.*]] = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32(<4 x i32> [[INS_1]]) [ "convergencectrl"(token [[T]]) ]
375
+ ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <3 x i32> <i32 0, i32 poison, i32 0>
376
+ ; CHECK-NEXT: [[TMP3:%.*]] = call <3 x i32> @llvm.amdgcn.readfirstlane.v3i32(<3 x i32> [[TMP2]]) [ "convergencectrl"(token [[T]]) ]
377
+ ; CHECK-NEXT: [[VEC:%.*]] = shufflevector <3 x i32> [[TMP3]], <3 x i32> poison, <4 x i32> <i32 poison, i32 0, i32 poison, i32 2>
369
378
; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[VEC]], <4 x i32> poison, <2 x i32> <i32 1, i32 3>
370
379
; CHECK-NEXT: ret <2 x i32> [[SHUFFLE]]
371
380
;
@@ -404,7 +413,9 @@ define <2 x i1> @extract_elt01_v4i1_readfirstlane(<4 x i1> %src) {
404
413
define <2 x i32 > @extract_elt13_v8i32_readfirstlane (<8 x i32 > %src ) {
405
414
; CHECK-LABEL: define <2 x i32> @extract_elt13_v8i32_readfirstlane(
406
415
; CHECK-SAME: <8 x i32> [[SRC:%.*]]) #[[ATTR0]] {
407
- ; CHECK-NEXT: [[VEC:%.*]] = call <8 x i32> @llvm.amdgcn.readfirstlane.v8i32(<8 x i32> [[SRC]])
416
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i32> [[SRC]], <8 x i32> poison, <3 x i32> <i32 1, i32 poison, i32 3>
417
+ ; CHECK-NEXT: [[TMP2:%.*]] = call <3 x i32> @llvm.amdgcn.readfirstlane.v3i32(<3 x i32> [[TMP1]])
418
+ ; CHECK-NEXT: [[VEC:%.*]] = shufflevector <3 x i32> [[TMP2]], <3 x i32> poison, <8 x i32> <i32 poison, i32 0, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 poison>
408
419
; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <8 x i32> [[VEC]], <8 x i32> poison, <2 x i32> <i32 1, i32 3>
409
420
; CHECK-NEXT: ret <2 x i32> [[SHUFFLE]]
410
421
;
@@ -428,7 +439,9 @@ define <2 x i32> @extract_elt03_v4i32_readfirstlane(<4 x i32> %src) {
428
439
define <3 x i32 > @extract_elt124_v8i32_readfirstlane (<8 x i32 > %src ) {
429
440
; CHECK-LABEL: define <3 x i32> @extract_elt124_v8i32_readfirstlane(
430
441
; CHECK-SAME: <8 x i32> [[SRC:%.*]]) #[[ATTR0]] {
431
- ; CHECK-NEXT: [[VEC:%.*]] = call <8 x i32> @llvm.amdgcn.readfirstlane.v8i32(<8 x i32> [[SRC]])
442
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i32> [[SRC]], <8 x i32> poison, <4 x i32> <i32 1, i32 2, i32 poison, i32 4>
443
+ ; CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32(<4 x i32> [[TMP1]])
444
+ ; CHECK-NEXT: [[VEC:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <8 x i32> <i32 poison, i32 0, i32 1, i32 poison, i32 3, i32 poison, i32 poison, i32 poison>
432
445
; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <8 x i32> [[VEC]], <8 x i32> poison, <3 x i32> <i32 1, i32 2, i32 4>
433
446
; CHECK-NEXT: ret <3 x i32> [[SHUFFLE]]
434
447
;
0 commit comments