4
4
define i16 @extract_elt0_v2i16_readfirstlane (<2 x i16 > %src ) {
5
5
; CHECK-LABEL: define i16 @extract_elt0_v2i16_readfirstlane(
6
6
; CHECK-SAME: <2 x i16> [[SRC:%.*]]) #[[ATTR0:[0-9]+]] {
7
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x i16> @llvm.amdgcn.readfirstlane.v2i16(<2 x i16> [[SRC]])
8
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x i16> [[VEC]], i64 0
7
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x i16> [[SRC]], i64 0
8
+ ; CHECK-NEXT: [[ELT:%.*]] = call i16 @llvm.amdgcn.readfirstlane. i16(i16 [[TMP1]])
9
9
; CHECK-NEXT: ret i16 [[ELT]]
10
10
;
11
11
%vec = call <2 x i16 > @llvm.amdgcn.readfirstlane.v2i16 (<2 x i16 > %src )
@@ -16,8 +16,8 @@ define i16 @extract_elt0_v2i16_readfirstlane(<2 x i16> %src) {
16
16
define i16 @extract_elt0_v1i16_readfirstlane (<1 x i16 > %src ) {
17
17
; CHECK-LABEL: define i16 @extract_elt0_v1i16_readfirstlane(
18
18
; CHECK-SAME: <1 x i16> [[SRC:%.*]]) #[[ATTR0]] {
19
- ; CHECK-NEXT: [[VEC :%.*]] = call <1 x i16> @llvm.amdgcn.readfirstlane.v1i16(<1 x i16> [[SRC]])
20
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <1 x i16> [[VEC]], i64 0
19
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <1 x i16> [[SRC]], i64 0
20
+ ; CHECK-NEXT: [[ELT:%.*]] = call i16 @llvm.amdgcn.readfirstlane. i16(i16 [[TMP1]])
21
21
; CHECK-NEXT: ret i16 [[ELT]]
22
22
;
23
23
%vec = call <1 x i16 > @llvm.amdgcn.readfirstlane.v1i16 (<1 x i16 > %src )
@@ -28,8 +28,8 @@ define i16 @extract_elt0_v1i16_readfirstlane(<1 x i16> %src) {
28
28
define i16 @extract_elt1_v2i16_readfirstlane (<2 x i16 > %src ) {
29
29
; CHECK-LABEL: define i16 @extract_elt1_v2i16_readfirstlane(
30
30
; CHECK-SAME: <2 x i16> [[SRC:%.*]]) #[[ATTR0]] {
31
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x i16> @llvm.amdgcn.readfirstlane.v2i16(<2 x i16> [[SRC]])
32
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x i16> [[VEC]], i64 1
31
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x i16> [[SRC]], i64 1
32
+ ; CHECK-NEXT: [[ELT:%.*]] = call i16 @llvm.amdgcn.readfirstlane. i16(i16 [[TMP1]])
33
33
; CHECK-NEXT: ret i16 [[ELT]]
34
34
;
35
35
%vec = call <2 x i16 > @llvm.amdgcn.readfirstlane.v2i16 (<2 x i16 > %src )
@@ -40,8 +40,8 @@ define i16 @extract_elt1_v2i16_readfirstlane(<2 x i16> %src) {
40
40
define i16 @extract_elt0_v4i16_readfirstlane (<4 x i16 > %src ) {
41
41
; CHECK-LABEL: define i16 @extract_elt0_v4i16_readfirstlane(
42
42
; CHECK-SAME: <4 x i16> [[SRC:%.*]]) #[[ATTR0]] {
43
- ; CHECK-NEXT: [[VEC :%.*]] = call <4 x i16> @llvm.amdgcn.readfirstlane.v4i16(<4 x i16> [[SRC]])
44
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <4 x i16> [[VEC]], i64 0
43
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <4 x i16> [[SRC]], i64 0
44
+ ; CHECK-NEXT: [[ELT:%.*]] = call i16 @llvm.amdgcn.readfirstlane. i16(i16 [[TMP1]])
45
45
; CHECK-NEXT: ret i16 [[ELT]]
46
46
;
47
47
%vec = call <4 x i16 > @llvm.amdgcn.readfirstlane.v4i16 (<4 x i16 > %src )
@@ -52,8 +52,8 @@ define i16 @extract_elt0_v4i16_readfirstlane(<4 x i16> %src) {
52
52
define i16 @extract_elt2_v4i16_readfirstlane (<4 x i16 > %src ) {
53
53
; CHECK-LABEL: define i16 @extract_elt2_v4i16_readfirstlane(
54
54
; CHECK-SAME: <4 x i16> [[SRC:%.*]]) #[[ATTR0]] {
55
- ; CHECK-NEXT: [[VEC :%.*]] = call <4 x i16> @llvm.amdgcn.readfirstlane.v4i16(<4 x i16> [[SRC]])
56
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <4 x i16> [[VEC]], i64 2
55
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <4 x i16> [[SRC]], i64 2
56
+ ; CHECK-NEXT: [[ELT:%.*]] = call i16 @llvm.amdgcn.readfirstlane. i16(i16 [[TMP1]])
57
57
; CHECK-NEXT: ret i16 [[ELT]]
58
58
;
59
59
%vec = call <4 x i16 > @llvm.amdgcn.readfirstlane.v4i16 (<4 x i16 > %src )
@@ -136,8 +136,8 @@ define <2 x i16> @extract_elt30_v4i16_readfirstlane(<4 x i16> %src) {
136
136
define half @extract_elt0_v2f16_readfirstlane (<2 x half > %src ) {
137
137
; CHECK-LABEL: define half @extract_elt0_v2f16_readfirstlane(
138
138
; CHECK-SAME: <2 x half> [[SRC:%.*]]) #[[ATTR0]] {
139
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x half> @llvm.amdgcn.readfirstlane.v2f16(<2 x half> [[SRC]])
140
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x half> [[VEC]], i64 0
139
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x half> [[SRC]], i64 0
140
+ ; CHECK-NEXT: [[ELT:%.*]] = call half @llvm.amdgcn.readfirstlane.f16( half [[TMP1]])
141
141
; CHECK-NEXT: ret half [[ELT]]
142
142
;
143
143
%vec = call <2 x half > @llvm.amdgcn.readfirstlane.v2i16 (<2 x half > %src )
@@ -148,8 +148,8 @@ define half @extract_elt0_v2f16_readfirstlane(<2 x half> %src) {
148
148
define half @extract_elt1_v2f16_readfirstlane (<2 x half > %src ) {
149
149
; CHECK-LABEL: define half @extract_elt1_v2f16_readfirstlane(
150
150
; CHECK-SAME: <2 x half> [[SRC:%.*]]) #[[ATTR0]] {
151
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x half> @llvm.amdgcn.readfirstlane.v2f16(<2 x half> [[SRC]])
152
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x half> [[VEC]], i64 1
151
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x half> [[SRC]], i64 1
152
+ ; CHECK-NEXT: [[ELT:%.*]] = call half @llvm.amdgcn.readfirstlane.f16( half [[TMP1]])
153
153
; CHECK-NEXT: ret half [[ELT]]
154
154
;
155
155
%vec = call <2 x half > @llvm.amdgcn.readfirstlane.v2i16 (<2 x half > %src )
@@ -186,8 +186,8 @@ define i32 @extract_elt0_nxv4i32_readfirstlane(<vscale x 2 x i32> %src) {
186
186
define i32 @extract_elt0_v2i32_readfirstlane (<2 x i32 > %src ) {
187
187
; CHECK-LABEL: define i32 @extract_elt0_v2i32_readfirstlane(
188
188
; CHECK-SAME: <2 x i32> [[SRC:%.*]]) #[[ATTR0]] {
189
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x i32> @llvm.amdgcn.readfirstlane.v2i32(<2 x i32> [[SRC]])
190
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x i32> [[VEC]], i64 0
189
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x i32> [[SRC]], i64 0
190
+ ; CHECK-NEXT: [[ELT:%.*]] = call i32 @llvm.amdgcn.readfirstlane. i32(i32 [[TMP1]])
191
191
; CHECK-NEXT: ret i32 [[ELT]]
192
192
;
193
193
%vec = call <2 x i32 > @llvm.amdgcn.readfirstlane.v2i32 (<2 x i32 > %src )
@@ -198,8 +198,8 @@ define i32 @extract_elt0_v2i32_readfirstlane(<2 x i32> %src) {
198
198
define ptr addrspace (3 ) @extract_elt0_v2p3_readfirstlane (<2 x ptr addrspace (3 )> %src ) {
199
199
; CHECK-LABEL: define ptr addrspace(3) @extract_elt0_v2p3_readfirstlane(
200
200
; CHECK-SAME: <2 x ptr addrspace(3)> [[SRC:%.*]]) #[[ATTR0]] {
201
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x ptr addrspace(3)> @llvm.amdgcn.readfirstlane.v2p3(<2 x ptr addrspace(3)> [[SRC]])
202
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x ptr addrspace(3)> [[VEC]], i64 0
201
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x ptr addrspace(3)> [[SRC]], i64 0
202
+ ; CHECK-NEXT: [[ELT:%.*]] = call ptr addrspace(3) @llvm.amdgcn.readfirstlane.p3( ptr addrspace(3) [[TMP1]])
203
203
; CHECK-NEXT: ret ptr addrspace(3) [[ELT]]
204
204
;
205
205
%vec = call <2 x ptr addrspace (3 )> @llvm.amdgcn.readfirstlane.v2p3 (<2 x ptr addrspace (3 )> %src )
@@ -210,8 +210,8 @@ define ptr addrspace(3) @extract_elt0_v2p3_readfirstlane(<2 x ptr addrspace(3)>
210
210
define i64 @extract_elt0_v2i64_readfirstlane (<2 x i64 > %src ) {
211
211
; CHECK-LABEL: define i64 @extract_elt0_v2i64_readfirstlane(
212
212
; CHECK-SAME: <2 x i64> [[SRC:%.*]]) #[[ATTR0]] {
213
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x i64> @llvm.amdgcn.readfirstlane.v2i64(<2 x i64> [[SRC]])
214
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x i64> [[VEC]], i64 0
213
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x i64> [[SRC]], i64 0
214
+ ; CHECK-NEXT: [[ELT:%.*]] = call i64 @llvm.amdgcn.readfirstlane. i64(i64 [[TMP1]])
215
215
; CHECK-NEXT: ret i64 [[ELT]]
216
216
;
217
217
%vec = call <2 x i64 > @llvm.amdgcn.readfirstlane.v2i64 (<2 x i64 > %src )
@@ -222,8 +222,8 @@ define i64 @extract_elt0_v2i64_readfirstlane(<2 x i64> %src) {
222
222
define i64 @extract_elt1_v2i64_readfirstlane (<2 x i64 > %src ) {
223
223
; CHECK-LABEL: define i64 @extract_elt1_v2i64_readfirstlane(
224
224
; CHECK-SAME: <2 x i64> [[SRC:%.*]]) #[[ATTR0]] {
225
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x i64> @llvm.amdgcn.readfirstlane.v2i64(<2 x i64> [[SRC]])
226
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x i64> [[VEC]], i64 1
225
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x i64> [[SRC]], i64 1
226
+ ; CHECK-NEXT: [[ELT:%.*]] = call i64 @llvm.amdgcn.readfirstlane. i64(i64 [[TMP1]])
227
227
; CHECK-NEXT: ret i64 [[ELT]]
228
228
;
229
229
%vec = call <2 x i64 > @llvm.amdgcn.readfirstlane.v2i64 (<2 x i64 > %src )
@@ -306,9 +306,8 @@ define <2 x i16> @extract_elt13_v4i16readfirstlane(<4 x i16> %src) {
306
306
define <2 x i32 > @extract_elt13_v4i32_readfirstlane_source_simplify0 (i32 %src0 , i32 %src2 ) {
307
307
; CHECK-LABEL: define <2 x i32> @extract_elt13_v4i32_readfirstlane_source_simplify0(
308
308
; CHECK-SAME: i32 [[SRC0:%.*]], i32 [[SRC2:%.*]]) #[[ATTR0]] {
309
- ; CHECK-NEXT: [[INS_1:%.*]] = insertelement <4 x i32> poison, i32 [[SRC0]], i64 1
310
- ; CHECK-NEXT: [[VEC:%.*]] = call <4 x i32> @llvm.amdgcn.readfirstlane.v4i32(<4 x i32> [[INS_1]])
311
- ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[VEC]], <4 x i32> poison, <2 x i32> <i32 1, i32 poison>
309
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.amdgcn.readfirstlane.i32(i32 [[SRC0]])
310
+ ; CHECK-NEXT: [[SHUFFLE:%.*]] = insertelement <2 x i32> poison, i32 [[TMP1]], i64 0
312
311
; CHECK-NEXT: ret <2 x i32> [[SHUFFLE]]
313
312
;
314
313
%ins.0 = insertelement <4 x i32 > poison, i32 %src0 , i32 0
@@ -350,8 +349,8 @@ define i32 @extract_elt0_v2i32_readfirstlane_convergencetoken(<2 x i32> %src) co
350
349
; CHECK-LABEL: define i32 @extract_elt0_v2i32_readfirstlane_convergencetoken(
351
350
; CHECK-SAME: <2 x i32> [[SRC:%.*]]) #[[ATTR1:[0-9]+]] {
352
351
; CHECK-NEXT: [[T:%.*]] = call token @llvm.experimental.convergence.entry()
353
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x i32> @llvm.amdgcn.readfirstlane.v2i32(<2 x i32> [[SRC]]) [ "convergencectrl"(token [[T]]) ]
354
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x i32> [[VEC]], i64 0
352
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x i32> [[SRC]], i64 0
353
+ ; CHECK-NEXT: [[ELT:%.*]] = call i32 @llvm.amdgcn.readfirstlane. i32(i32 [[TMP1]]) [ "convergencectrl"(token [[T]]) ]
355
354
; CHECK-NEXT: ret i32 [[ELT]]
356
355
;
357
356
%t = call token @llvm.experimental.convergence.entry ()
@@ -381,8 +380,8 @@ define < 2 x i32> @extract_elt13_v4i32_readfirstlane_source_simplify1_convergenc
381
380
define i1 @extract_elt0_v2i1_readfirstlane (<2 x i1 > %src ) {
382
381
; CHECK-LABEL: define i1 @extract_elt0_v2i1_readfirstlane(
383
382
; CHECK-SAME: <2 x i1> [[SRC:%.*]]) #[[ATTR0]] {
384
- ; CHECK-NEXT: [[VEC :%.*]] = call <2 x i1> @llvm.amdgcn.readfirstlane.v2i1(<2 x i1> [[SRC]])
385
- ; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x i1> [[VEC]], i64 0
383
+ ; CHECK-NEXT: [[TMP1 :%.*]] = extractelement <2 x i1> [[SRC]], i64 0
384
+ ; CHECK-NEXT: [[ELT:%.*]] = call i1 @llvm.amdgcn.readfirstlane.i1(i1 [[TMP1]])
386
385
; CHECK-NEXT: ret i1 [[ELT]]
387
386
;
388
387
%vec = call <2 x i1 > @llvm.amdgcn.readfirstlane.v2i1 (<2 x i1 > %src )
0 commit comments