Skip to content

Commit a8949b1

Browse files
committed
[X86] Add test coverage showing failure to concatenate matching rotate nodes
1 parent 2ee7ba4 commit a8949b1

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

llvm/test/CodeGen/X86/vector-shuffle-combining-avx512bwvl.ll

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,36 @@ define <16 x i8> @combine_shuffle_vrotli_v4i32(<4 x i32> %a0) {
9898
}
9999
declare <4 x i32> @llvm.fshl.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)
100100

101+
102+
define <8 x i32> @concat_vrotli_v4i32(<4 x i32> %a0, <4 x i32> %a1) {
103+
; CHECK-LABEL: concat_vrotli_v4i32:
104+
; CHECK: # %bb.0:
105+
; CHECK-NEXT: vprold $3, %xmm0, %xmm0
106+
; CHECK-NEXT: vprold $3, %xmm1, %xmm1
107+
; CHECK-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
108+
; CHECK-NEXT: ret{{[l|q]}}
109+
%r0 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %a0, <4 x i32> %a0, <4 x i32> splat (i32 3))
110+
%r1 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %a1, <4 x i32> %a1, <4 x i32> splat (i32 3))
111+
%shuffle = shufflevector <4 x i32> %r0, <4 x i32> %r1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
112+
ret <8 x i32> %shuffle
113+
}
114+
115+
define <8 x i32> @concat_vrotlv_v4i32(<4 x i32> %a0, <4 x i32> %a1, <8 x i32> %a2) {
116+
; CHECK-LABEL: concat_vrotlv_v4i32:
117+
; CHECK: # %bb.0:
118+
; CHECK-NEXT: vextracti128 $1, %ymm2, %xmm3
119+
; CHECK-NEXT: vprolvd %xmm2, %xmm0, %xmm0
120+
; CHECK-NEXT: vprolvd %xmm3, %xmm1, %xmm1
121+
; CHECK-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
122+
; CHECK-NEXT: ret{{[l|q]}}
123+
%lo = shufflevector <8 x i32> %a2, <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
124+
%hi = shufflevector <8 x i32> %a2, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
125+
%r0 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %a0, <4 x i32> %a0, <4 x i32> %lo)
126+
%r1 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %a1, <4 x i32> %a1, <4 x i32> %hi)
127+
%shuffle = shufflevector <4 x i32> %r0, <4 x i32> %r1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
128+
ret <8 x i32> %shuffle
129+
}
130+
101131
define void @PR46178(ptr %0) {
102132
; X86-LABEL: PR46178:
103133
; X86: # %bb.0:
@@ -174,11 +204,11 @@ define i64 @PR55050() {
174204
; X86-NEXT: xorl %edx, %edx
175205
; X86-NEXT: xorl %eax, %eax
176206
; X86-NEXT: testb %dl, %dl
177-
; X86-NEXT: jne .LBB10_2
207+
; X86-NEXT: jne .LBB12_2
178208
; X86-NEXT: # %bb.1: # %if
179209
; X86-NEXT: xorl %eax, %eax
180210
; X86-NEXT: xorl %edx, %edx
181-
; X86-NEXT: .LBB10_2: # %exit
211+
; X86-NEXT: .LBB12_2: # %exit
182212
; X86-NEXT: retl
183213
;
184214
; X64-LABEL: PR55050:

0 commit comments

Comments
 (0)