[llvm] af223bc - [X86] Avoid zero extend i16 when inserting fp16 (#126194)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 26 18:51:16 PDT 2025
Author: Phoebe Wang
Date: 2025-04-27T09:51:13+08:00
New Revision: af223bc696c1f5d0c3f6d21ca9dc25c9605d82b2
URL: https://github.com/llvm/llvm-project/commit/af223bc696c1f5d0c3f6d21ca9dc25c9605d82b2
DIFF: https://github.com/llvm/llvm-project/commit/af223bc696c1f5d0c3f6d21ca9dc25c9605d82b2.diff
LOG: [X86] Avoid zero extend i16 when inserting fp16 (#126194)
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/avx512-insert-extract.ll
llvm/test/CodeGen/X86/avx512-vec-cmp.ll
llvm/test/CodeGen/X86/fminimum-fmaximum.ll
llvm/test/CodeGen/X86/fminimumnum-fmaximumnum.ll
llvm/test/CodeGen/X86/fp-round.ll
llvm/test/CodeGen/X86/fpclamptosat_vec.ll
llvm/test/CodeGen/X86/half.ll
llvm/test/CodeGen/X86/pr116153.ll
llvm/test/CodeGen/X86/pr91005.ll
llvm/test/CodeGen/X86/vector-llrint-f16.ll
llvm/test/CodeGen/X86/vector-lrint-f16.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index c9c2c8ffe72c1..7ff2b06e57e7b 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -22044,15 +22044,20 @@ SDValue X86TargetLowering::LowerFP_EXTEND(SDValue Op, SelectionDAG &DAG) const {
}
In = DAG.getBitcast(MVT::i16, In);
- In = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, MVT::v8i16,
- getZeroVector(MVT::v8i16, Subtarget, DAG, DL), In,
- DAG.getVectorIdxConstant(0, DL));
SDValue Res;
if (IsStrict) {
+ In = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, MVT::v8i16,
+ getZeroVector(MVT::v8i16, Subtarget, DAG, DL), In,
+ DAG.getVectorIdxConstant(0, DL));
Res = DAG.getNode(X86ISD::STRICT_CVTPH2PS, DL, {MVT::v4f32, MVT::Other},
{Chain, In});
Chain = Res.getValue(1);
} else {
+ In = DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i32, In);
+ In = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, MVT::v4i32,
+ DAG.getUNDEF(MVT::v4f32), In,
+ DAG.getVectorIdxConstant(0, DL));
+ In = DAG.getBitcast(MVT::v8i16, In);
Res = DAG.getNode(X86ISD::CVTPH2PS, DL, MVT::v4f32, In,
DAG.getTargetConstant(4, DL, MVT::i32));
}
diff --git a/llvm/test/CodeGen/X86/avx512-insert-extract.ll b/llvm/test/CodeGen/X86/avx512-insert-extract.ll
index 31e4f7e350a05..e183da1386d5b 100644
--- a/llvm/test/CodeGen/X86/avx512-insert-extract.ll
+++ b/llvm/test/CodeGen/X86/avx512-insert-extract.ll
@@ -2164,7 +2164,7 @@ define void @test_concat_v2i1(ptr %arg, ptr %arg1, ptr %arg2) nounwind {
; KNL-NEXT: setb %al
; KNL-NEXT: andl $1, %eax
; KNL-NEXT: kmovw %eax, %k0
-; KNL-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; KNL-NEXT: vpsrld $16, %xmm0, %xmm0
; KNL-NEXT: vcvtph2ps %xmm0, %xmm0
; KNL-NEXT: vucomiss %xmm2, %xmm0
; KNL-NEXT: setb %al
diff --git a/llvm/test/CodeGen/X86/avx512-vec-cmp.ll b/llvm/test/CodeGen/X86/avx512-vec-cmp.ll
index 5ce2b56cbd43a..210513fe31783 100644
--- a/llvm/test/CodeGen/X86/avx512-vec-cmp.ll
+++ b/llvm/test/CodeGen/X86/avx512-vec-cmp.ll
@@ -1443,8 +1443,7 @@ define void @half_vec_compare(ptr %x, ptr %y) {
; KNL: ## %bb.0: ## %entry
; KNL-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
; KNL-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x6e,0x07]
-; KNL-NEXT: vpshuflw $85, %xmm0, %xmm1 ## encoding: [0xc5,0xfb,0x70,0xc8,0x55]
-; KNL-NEXT: ## xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; KNL-NEXT: vpsrld $16, %xmm0, %xmm1 ## encoding: [0xc5,0xf1,0x72,0xd0,0x10]
; KNL-NEXT: vcvtph2ps %xmm1, %xmm1 ## encoding: [0xc4,0xe2,0x79,0x13,0xc9]
; KNL-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0]
; KNL-NEXT: vxorps %xmm2, %xmm2, %xmm2 ## encoding: [0xc5,0xe8,0x57,0xd2]
@@ -1470,8 +1469,7 @@ define void @half_vec_compare(ptr %x, ptr %y) {
; AVX512BW: ## %bb.0: ## %entry
; AVX512BW-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
; AVX512BW-NEXT: ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x6e,0x07]
-; AVX512BW-NEXT: vpshuflw $85, %xmm0, %xmm1 ## encoding: [0xc5,0xfb,0x70,0xc8,0x55]
-; AVX512BW-NEXT: ## xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; AVX512BW-NEXT: vpsrld $16, %xmm0, %xmm1 ## encoding: [0xc5,0xf1,0x72,0xd0,0x10]
; AVX512BW-NEXT: vcvtph2ps %xmm1, %xmm1 ## encoding: [0xc4,0xe2,0x79,0x13,0xc9]
; AVX512BW-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0]
; AVX512BW-NEXT: vxorps %xmm2, %xmm2, %xmm2 ## encoding: [0xc5,0xe8,0x57,0xd2]
diff --git a/llvm/test/CodeGen/X86/fminimum-fmaximum.ll b/llvm/test/CodeGen/X86/fminimum-fmaximum.ll
index 0530c843acfe6..989aabc9e87bd 100644
--- a/llvm/test/CodeGen/X86/fminimum-fmaximum.ll
+++ b/llvm/test/CodeGen/X86/fminimum-fmaximum.ll
@@ -1854,9 +1854,9 @@ define <4 x half> @test_fmaximum_v4f16(<4 x half> %x, <4 x half> %y) nounwind {
; AVX512-NEXT: cmovpl %ecx, %r8d
; AVX512-NEXT: movl $0, %r11d
; AVX512-NEXT: cmoval %ecx, %r11d
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm2 = xmm1[3,3,3,3,4,5,6,7]
+; AVX512-NEXT: vpsrlq $48, %xmm1, %xmm2
; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[3,3,3,3,4,5,6,7]
+; AVX512-NEXT: vpsrlq $48, %xmm0, %xmm3
; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512-NEXT: vucomiss %xmm2, %xmm3
; AVX512-NEXT: movl $0, %r10d
@@ -1872,9 +1872,9 @@ define <4 x half> @test_fmaximum_v4f16(<4 x half> %x, <4 x half> %y) nounwind {
; AVX512-NEXT: cmovpl %ecx, %ebx
; AVX512-NEXT: movl $0, %r14d
; AVX512-NEXT: cmoval %ecx, %r14d
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm2 = xmm1[1,1,1,1,4,5,6,7]
+; AVX512-NEXT: vpsrld $16, %xmm1, %xmm2
; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[1,1,1,1,4,5,6,7]
+; AVX512-NEXT: vpsrld $16, %xmm0, %xmm3
; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512-NEXT: vucomiss %xmm2, %xmm3
; AVX512-NEXT: movl $0, %r15d
@@ -1916,7 +1916,7 @@ define <4 x half> @test_fmaximum_v4f16(<4 x half> %x, <4 x half> %y) nounwind {
; AVX512-NEXT: vpinsrw $7, %edx, %xmm3, %xmm3
; AVX512-NEXT: vpbroadcastw {{.*#+}} xmm4 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]
; AVX512-NEXT: vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm3 = xmm2[1,1,1,1,4,5,6,7]
+; AVX512-NEXT: vpsrld $16, %xmm2, %xmm3
; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512-NEXT: vpxor %xmm4, %xmm4, %xmm4
; AVX512-NEXT: vucomiss %xmm4, %xmm3
@@ -1930,21 +1930,21 @@ define <4 x half> @test_fmaximum_v4f16(<4 x half> %x, <4 x half> %y) nounwind {
; AVX512-NEXT: cmovpl %eax, %esi
; AVX512-NEXT: vmovd %esi, %xmm3
; AVX512-NEXT: vpinsrw $1, %edx, %xmm3, %xmm3
-; AVX512-NEXT: vpshufd {{.*#+}} xmm5 = xmm2[1,1,1,1]
+; AVX512-NEXT: vpshufd {{.*#+}} xmm5 = xmm2[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vucomiss %xmm4, %xmm5
; AVX512-NEXT: movl $65535, %edx # imm = 0xFFFF
; AVX512-NEXT: cmovnel %eax, %edx
; AVX512-NEXT: cmovpl %eax, %edx
; AVX512-NEXT: vpinsrw $2, %edx, %xmm3, %xmm3
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm5 = xmm2[3,3,3,3,4,5,6,7]
+; AVX512-NEXT: vpsrlq $48, %xmm2, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vucomiss %xmm4, %xmm5
; AVX512-NEXT: movl $65535, %edx # imm = 0xFFFF
; AVX512-NEXT: cmovnel %eax, %edx
; AVX512-NEXT: cmovpl %eax, %edx
; AVX512-NEXT: vpinsrw $3, %edx, %xmm3, %xmm3
-; AVX512-NEXT: vpshufd {{.*#+}} xmm5 = xmm2[2,3,2,3]
+; AVX512-NEXT: vpshufd {{.*#+}} xmm5 = xmm2[2,3,0,1]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vucomiss %xmm4, %xmm5
; AVX512-NEXT: movl $65535, %edx # imm = 0xFFFF
diff --git a/llvm/test/CodeGen/X86/fminimumnum-fmaximumnum.ll b/llvm/test/CodeGen/X86/fminimumnum-fmaximumnum.ll
index c7f5e13cb7464..5945bae94f452 100644
--- a/llvm/test/CodeGen/X86/fminimumnum-fmaximumnum.ll
+++ b/llvm/test/CodeGen/X86/fminimumnum-fmaximumnum.ll
@@ -1938,12 +1938,12 @@ define <4 x half> @test_fmaximumnum_v4f16(<4 x half> %x, <4 x half> %y) nounwind
; AVX512-NEXT: vpunpcklwd {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
; AVX512-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm0 = xmm4[3,3,3,3,4,5,6,7]
+; AVX512-NEXT: vpsrlq $48, %xmm4, %xmm0
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vucomiss %xmm0, %xmm0
; AVX512-NEXT: setp %al
; AVX512-NEXT: kmovw %eax, %k1
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm1 = xmm8[3,3,3,3,4,5,6,7]
+; AVX512-NEXT: vpsrlq $48, %xmm8, %xmm1
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX512-NEXT: vucomiss %xmm1, %xmm1
; AVX512-NEXT: setp %al
@@ -1996,12 +1996,12 @@ define <4 x half> @test_fmaximumnum_v4f16(<4 x half> %x, <4 x half> %y) nounwind
; AVX512-NEXT: seta %al
; AVX512-NEXT: kmovw %eax, %k1
; AVX512-NEXT: vmovss %xmm1, %xmm2, %xmm2 {%k1}
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm1 = xmm4[1,1,1,1,4,5,6,7]
+; AVX512-NEXT: vpsrld $16, %xmm4, %xmm1
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX512-NEXT: vucomiss %xmm1, %xmm1
; AVX512-NEXT: setp %al
; AVX512-NEXT: kmovw %eax, %k1
-; AVX512-NEXT: vpshuflw {{.*#+}} xmm4 = xmm8[1,1,1,1,4,5,6,7]
+; AVX512-NEXT: vpsrld $16, %xmm8, %xmm4
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512-NEXT: vucomiss %xmm4, %xmm4
; AVX512-NEXT: setp %al
diff --git a/llvm/test/CodeGen/X86/fp-round.ll b/llvm/test/CodeGen/X86/fp-round.ll
index 58c4f71892e90..e98fb8e374c0b 100644
--- a/llvm/test/CodeGen/X86/fp-round.ll
+++ b/llvm/test/CodeGen/X86/fp-round.ll
@@ -50,9 +50,6 @@ define half @round_f16(half %h) {
;
; AVX512F-LABEL: round_f16:
; AVX512F: # %bb.0: # %entry
-; AVX512F-NEXT: vpextrw $0, %xmm0, %eax
-; AVX512F-NEXT: movzwl %ax, %eax
-; AVX512F-NEXT: vmovd %eax, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vpbroadcastd {{.*#+}} xmm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]
; AVX512F-NEXT: vpternlogd {{.*#+}} xmm1 = xmm1 | (xmm0 & mem)
diff --git a/llvm/test/CodeGen/X86/fpclamptosat_vec.ll b/llvm/test/CodeGen/X86/fpclamptosat_vec.ll
index 2dedb10d42fb4..4ac829c0dfd53 100644
--- a/llvm/test/CodeGen/X86/fpclamptosat_vec.ll
+++ b/llvm/test/CodeGen/X86/fpclamptosat_vec.ll
@@ -698,7 +698,7 @@ define <4 x i32> @stest_f16i32(<4 x half> %x) nounwind {
;
; AVX2-LABEL: stest_f16i32:
; AVX2: # %bb.0: # %entry
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; AVX2-NEXT: vpsrlq $48, %xmm0, %xmm1
; AVX2-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX2-NEXT: vcvttss2si %xmm1, %rax
; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
@@ -709,7 +709,7 @@ define <4 x i32> @stest_f16i32(<4 x half> %x) nounwind {
; AVX2-NEXT: vcvttss2si %xmm1, %rax
; AVX2-NEXT: vmovq %rcx, %xmm1
; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; AVX2-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX2-NEXT: vmovq %rax, %xmm2
; AVX2-NEXT: vcvttss2si %xmm0, %rax
@@ -836,7 +836,7 @@ define <4 x i32> @utesth_f16i32(<4 x half> %x) nounwind {
;
; AVX2-LABEL: utesth_f16i32:
; AVX2: # %bb.0: # %entry
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; AVX2-NEXT: vpsrlq $48, %xmm0, %xmm1
; AVX2-NEXT: vcvtph2ps %xmm1, %xmm2
; AVX2-NEXT: vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]
; AVX2-NEXT: vsubss %xmm1, %xmm2, %xmm3
@@ -866,7 +866,7 @@ define <4 x i32> @utesth_f16i32(<4 x half> %x) nounwind {
; AVX2-NEXT: sarq $63, %rdx
; AVX2-NEXT: andq %rax, %rdx
; AVX2-NEXT: orq %rcx, %rdx
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; AVX2-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX2-NEXT: vsubss %xmm1, %xmm0, %xmm1
; AVX2-NEXT: vcvttss2si %xmm1, %rax
@@ -999,7 +999,7 @@ define <4 x i32> @ustest_f16i32(<4 x half> %x) nounwind {
;
; AVX2-LABEL: ustest_f16i32:
; AVX2: # %bb.0: # %entry
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; AVX2-NEXT: vpsrlq $48, %xmm0, %xmm1
; AVX2-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX2-NEXT: vcvttss2si %xmm1, %rax
; AVX2-NEXT: vmovq %rax, %xmm1
@@ -1011,7 +1011,7 @@ define <4 x i32> @ustest_f16i32(<4 x half> %x) nounwind {
; AVX2-NEXT: vcvtph2ps %xmm0, %xmm2
; AVX2-NEXT: vcvttss2si %xmm2, %rax
; AVX2-NEXT: vmovq %rax, %xmm2
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; AVX2-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX2-NEXT: vcvttss2si %xmm0, %rax
; AVX2-NEXT: vmovq %rax, %xmm0
@@ -3310,7 +3310,7 @@ define <4 x i32> @stest_f16i32_mm(<4 x half> %x) nounwind {
;
; AVX2-LABEL: stest_f16i32_mm:
; AVX2: # %bb.0: # %entry
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; AVX2-NEXT: vpsrlq $48, %xmm0, %xmm1
; AVX2-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX2-NEXT: vcvttss2si %xmm1, %rax
; AVX2-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]
@@ -3321,7 +3321,7 @@ define <4 x i32> @stest_f16i32_mm(<4 x half> %x) nounwind {
; AVX2-NEXT: vcvttss2si %xmm1, %rax
; AVX2-NEXT: vmovq %rcx, %xmm1
; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; AVX2-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX2-NEXT: vmovq %rax, %xmm2
; AVX2-NEXT: vcvttss2si %xmm0, %rax
@@ -3446,7 +3446,7 @@ define <4 x i32> @utesth_f16i32_mm(<4 x half> %x) nounwind {
;
; AVX2-LABEL: utesth_f16i32_mm:
; AVX2: # %bb.0: # %entry
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; AVX2-NEXT: vpsrlq $48, %xmm0, %xmm1
; AVX2-NEXT: vcvtph2ps %xmm1, %xmm2
; AVX2-NEXT: vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]
; AVX2-NEXT: vsubss %xmm1, %xmm2, %xmm3
@@ -3476,7 +3476,7 @@ define <4 x i32> @utesth_f16i32_mm(<4 x half> %x) nounwind {
; AVX2-NEXT: sarq $63, %rdx
; AVX2-NEXT: andq %rax, %rdx
; AVX2-NEXT: orq %rcx, %rdx
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; AVX2-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX2-NEXT: vsubss %xmm1, %xmm0, %xmm1
; AVX2-NEXT: vcvttss2si %xmm1, %rax
@@ -3608,7 +3608,7 @@ define <4 x i32> @ustest_f16i32_mm(<4 x half> %x) nounwind {
;
; AVX2-LABEL: ustest_f16i32_mm:
; AVX2: # %bb.0: # %entry
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; AVX2-NEXT: vpsrlq $48, %xmm0, %xmm1
; AVX2-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX2-NEXT: vcvttss2si %xmm1, %rax
; AVX2-NEXT: vmovq %rax, %xmm1
@@ -3620,7 +3620,7 @@ define <4 x i32> @ustest_f16i32_mm(<4 x half> %x) nounwind {
; AVX2-NEXT: vcvtph2ps %xmm0, %xmm2
; AVX2-NEXT: vcvttss2si %xmm2, %rax
; AVX2-NEXT: vmovq %rax, %xmm2
-; AVX2-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; AVX2-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX2-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX2-NEXT: vcvttss2si %xmm0, %rax
; AVX2-NEXT: vmovq %rax, %xmm0
diff --git a/llvm/test/CodeGen/X86/half.ll b/llvm/test/CodeGen/X86/half.ll
index 1b98886ba24e7..d8686b8b2950f 100644
--- a/llvm/test/CodeGen/X86/half.ll
+++ b/llvm/test/CodeGen/X86/half.ll
@@ -1593,9 +1593,9 @@ define <8 x half> @maxnum_v8f16(<8 x half> %0, <8 x half> %1) #0 {
; BWON-F16C-NEXT: # %bb.7:
; BWON-F16C-NEXT: vmovaps %xmm5, %xmm6
; BWON-F16C-NEXT: .LBB26_8:
-; BWON-F16C-NEXT: vpshuflw {{.*#+}} xmm5 = xmm1[3,3,3,3,4,5,6,7]
+; BWON-F16C-NEXT: vpsrlq $48, %xmm1, %xmm5
; BWON-F16C-NEXT: vcvtph2ps %xmm5, %xmm7
-; BWON-F16C-NEXT: vpshuflw {{.*#+}} xmm5 = xmm0[3,3,3,3,4,5,6,7]
+; BWON-F16C-NEXT: vpsrlq $48, %xmm0, %xmm5
; BWON-F16C-NEXT: vcvtph2ps %xmm5, %xmm5
; BWON-F16C-NEXT: vucomiss %xmm7, %xmm5
; BWON-F16C-NEXT: ja .LBB26_10
@@ -1629,9 +1629,9 @@ define <8 x half> @maxnum_v8f16(<8 x half> %0, <8 x half> %1) #0 {
; BWON-F16C-NEXT: vpunpckldq {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
; BWON-F16C-NEXT: vpunpcklwd {{.*#+}} xmm3 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3]
; BWON-F16C-NEXT: vcvtps2ph $4, %xmm6, %xmm4
-; BWON-F16C-NEXT: vpshuflw {{.*#+}} xmm1 = xmm1[1,1,1,1,4,5,6,7]
+; BWON-F16C-NEXT: vpsrld $16, %xmm1, %xmm1
; BWON-F16C-NEXT: vcvtph2ps %xmm1, %xmm1
-; BWON-F16C-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; BWON-F16C-NEXT: vpsrld $16, %xmm0, %xmm0
; BWON-F16C-NEXT: vcvtph2ps %xmm0, %xmm0
; BWON-F16C-NEXT: vucomiss %xmm1, %xmm0
; BWON-F16C-NEXT: ja .LBB26_16
diff --git a/llvm/test/CodeGen/X86/pr116153.ll b/llvm/test/CodeGen/X86/pr116153.ll
index 5c9c2c76131d5..b4e62a6ec20db 100644
--- a/llvm/test/CodeGen/X86/pr116153.ll
+++ b/llvm/test/CodeGen/X86/pr116153.ll
@@ -4,7 +4,7 @@
define void @_test_func(<16 x half> %0) #0 {
; CHECK-LABEL: _test_func:
; CHECK: # %bb.0:
-; CHECK-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm1
; CHECK-NEXT: vcvtph2ps %xmm1, %xmm1
; CHECK-NEXT: xorl %eax, %eax
; CHECK-NEXT: vucomiss %xmm1, %xmm1
@@ -16,7 +16,7 @@ define void @_test_func(<16 x half> %0) #0 {
; CHECK-NEXT: vucomiss %xmm1, %xmm1
; CHECK-NEXT: movl $0, %esi
; CHECK-NEXT: cmovnpl %ecx, %esi
-; CHECK-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; CHECK-NEXT: vpsrld $16, %xmm0, %xmm1
; CHECK-NEXT: vcvtph2ps %xmm1, %xmm1
; CHECK-NEXT: vucomiss %xmm1, %xmm1
; CHECK-NEXT: movl $0, %edi
diff --git a/llvm/test/CodeGen/X86/pr91005.ll b/llvm/test/CodeGen/X86/pr91005.ll
index 4f0a7fef47f7b..de3642b2bd05b 100644
--- a/llvm/test/CodeGen/X86/pr91005.ll
+++ b/llvm/test/CodeGen/X86/pr91005.ll
@@ -7,7 +7,8 @@ define void @PR91005(ptr %0) minsize {
; CHECK-NEXT: testb %al, %al
; CHECK-NEXT: je .LBB0_2
; CHECK-NEXT: # %bb.1:
-; CHECK-NEXT: vbroadcastss {{.*#+}} xmm0 = [31744,31744,31744,31744]
+; CHECK-NEXT: movl $31744, %eax # imm = 0x7C00
+; CHECK-NEXT: vmovd %eax, %xmm0
; CHECK-NEXT: vpcmpeqw %xmm0, %xmm0, %xmm0
; CHECK-NEXT: vpinsrw $0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
; CHECK-NEXT: vpand %xmm1, %xmm0, %xmm0
diff --git a/llvm/test/CodeGen/X86/vector-llrint-f16.ll b/llvm/test/CodeGen/X86/vector-llrint-f16.ll
index dc758952c3dcb..5e5c5849fc22e 100644
--- a/llvm/test/CodeGen/X86/vector-llrint-f16.ll
+++ b/llvm/test/CodeGen/X86/vector-llrint-f16.ll
@@ -31,7 +31,7 @@ define <2 x i64> @llrint_v2i64_v2f16(<2 x half> %x) {
; AVX-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX-NEXT: vcvttss2si %xmm1, %rax
; AVX-NEXT: vmovq %rax, %xmm1
-; AVX-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; AVX-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -52,7 +52,7 @@ define <2 x i64> @llrint_v2i64_v2f16(<2 x half> %x) {
define <4 x i64> @llrint_v4i64_v4f16(<4 x half> %x) {
; AVX-LABEL: llrint_v4i64_v4f16:
; AVX: # %bb.0:
-; AVX-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; AVX-NEXT: vpsrlq $48, %xmm0, %xmm1
; AVX-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; AVX-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -73,7 +73,7 @@ define <4 x i64> @llrint_v4i64_v4f16(<4 x half> %x) {
; AVX-NEXT: vcvtph2ps %xmm2, %xmm2
; AVX-NEXT: vcvttss2si %xmm2, %rax
; AVX-NEXT: vmovq %rax, %xmm2
-; AVX-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; AVX-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -95,7 +95,7 @@ define <4 x i64> @llrint_v4i64_v4f16(<4 x half> %x) {
define <8 x i64> @llrint_v8i64_v8f16(<8 x half> %x) {
; AVX-LABEL: llrint_v8i64_v8f16:
; AVX: # %bb.0:
-; AVX-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]
+; AVX-NEXT: vpsrlq $48, %xmm0, %xmm1
; AVX-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; AVX-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -116,7 +116,7 @@ define <8 x i64> @llrint_v8i64_v8f16(<8 x half> %x) {
; AVX-NEXT: vcvtph2ps %xmm2, %xmm2
; AVX-NEXT: vcvttss2si %xmm2, %rax
; AVX-NEXT: vmovq %rax, %xmm2
-; AVX-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm0, %xmm3
; AVX-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; AVX-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -171,7 +171,7 @@ define <16 x i64> @llrint_v16i64_v16f16(<16 x half> %x) {
; AVX-LABEL: llrint_v16i64_v16f16:
; AVX: # %bb.0:
; AVX-NEXT: vmovdqa %ymm0, %ymm2
-; AVX-NEXT: vpshuflw {{.*#+}} xmm0 = xmm2[3,3,3,3,4,5,6,7]
+; AVX-NEXT: vpsrlq $48, %xmm2, %xmm0
; AVX-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; AVX-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -192,7 +192,7 @@ define <16 x i64> @llrint_v16i64_v16f16(<16 x half> %x) {
; AVX-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX-NEXT: vcvttss2si %xmm1, %rax
; AVX-NEXT: vmovq %rax, %xmm1
-; AVX-NEXT: vpshuflw {{.*#+}} xmm3 = xmm2[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm2, %xmm3
; AVX-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; AVX-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -233,7 +233,7 @@ define <16 x i64> @llrint_v16i64_v16f16(<16 x half> %x) {
; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
; AVX-NEXT: vinserti128 $1, %xmm1, %ymm3, %ymm1
; AVX-NEXT: vextracti128 $1, %ymm2, %xmm3
-; AVX-NEXT: vpshuflw {{.*#+}} xmm2 = xmm3[3,3,3,3,4,5,6,7]
+; AVX-NEXT: vpsrlq $48, %xmm3, %xmm2
; AVX-NEXT: vcvtph2ps %xmm2, %xmm2
; AVX-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; AVX-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -254,7 +254,7 @@ define <16 x i64> @llrint_v16i64_v16f16(<16 x half> %x) {
; AVX-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX-NEXT: vcvttss2si %xmm4, %rax
; AVX-NEXT: vmovq %rax, %xmm4
-; AVX-NEXT: vpshuflw {{.*#+}} xmm5 = xmm3[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm3, %xmm5
; AVX-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX-NEXT: vroundss $4, %xmm5, %xmm5, %xmm5
; AVX-NEXT: vcvtps2ph $4, %xmm5, %xmm5
@@ -348,7 +348,7 @@ define <32 x i64> @llrint_v32i64_v32f16(<32 x half> %x) {
; AVX-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX-NEXT: vcvttss2si %xmm4, %rcx
; AVX-NEXT: vmovq %rcx, %xmm4
-; AVX-NEXT: vpshuflw {{.*#+}} xmm5 = xmm1[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm1, %xmm5
; AVX-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX-NEXT: vroundss $4, %xmm5, %xmm5, %xmm5
; AVX-NEXT: vcvtps2ph $4, %xmm5, %xmm5
@@ -356,7 +356,7 @@ define <32 x i64> @llrint_v32i64_v32f16(<32 x half> %x) {
; AVX-NEXT: vcvttss2si %xmm5, %rcx
; AVX-NEXT: vmovq %rcx, %xmm5
; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
-; AVX-NEXT: vpshuflw {{.*#+}} xmm5 = xmm1[3,3,3,3,4,5,6,7]
+; AVX-NEXT: vpsrlq $48, %xmm1, %xmm5
; AVX-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX-NEXT: vroundss $4, %xmm5, %xmm5, %xmm5
; AVX-NEXT: vcvtps2ph $4, %xmm5, %xmm5
@@ -408,7 +408,7 @@ define <32 x i64> @llrint_v32i64_v32f16(<32 x half> %x) {
; AVX-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX-NEXT: vcvttss2si %xmm7, %rcx
; AVX-NEXT: vmovq %rcx, %xmm7
-; AVX-NEXT: vpshuflw {{.*#+}} xmm9 = xmm8[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm8, %xmm9
; AVX-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX-NEXT: vroundss $4, %xmm9, %xmm9, %xmm9
; AVX-NEXT: vcvtps2ph $4, %xmm9, %xmm9
@@ -416,7 +416,7 @@ define <32 x i64> @llrint_v32i64_v32f16(<32 x half> %x) {
; AVX-NEXT: vcvttss2si %xmm9, %rcx
; AVX-NEXT: vmovq %rcx, %xmm9
; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm7 = xmm7[0],xmm9[0]
-; AVX-NEXT: vpshuflw {{.*#+}} xmm9 = xmm8[3,3,3,3,4,5,6,7]
+; AVX-NEXT: vpsrlq $48, %xmm8, %xmm9
; AVX-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX-NEXT: vroundss $4, %xmm9, %xmm9, %xmm9
; AVX-NEXT: vcvtps2ph $4, %xmm9, %xmm9
@@ -467,7 +467,7 @@ define <32 x i64> @llrint_v32i64_v32f16(<32 x half> %x) {
; AVX-NEXT: vcvtph2ps %xmm11, %xmm11
; AVX-NEXT: vcvttss2si %xmm11, %rcx
; AVX-NEXT: vmovq %rcx, %xmm11
-; AVX-NEXT: vpshuflw {{.*#+}} xmm12 = xmm0[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm0, %xmm12
; AVX-NEXT: vcvtph2ps %xmm12, %xmm12
; AVX-NEXT: vroundss $4, %xmm12, %xmm12, %xmm12
; AVX-NEXT: vcvtps2ph $4, %xmm12, %xmm12
@@ -475,7 +475,7 @@ define <32 x i64> @llrint_v32i64_v32f16(<32 x half> %x) {
; AVX-NEXT: vcvttss2si %xmm12, %rcx
; AVX-NEXT: vmovq %rcx, %xmm12
; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm11 = xmm11[0],xmm12[0]
-; AVX-NEXT: vpshuflw {{.*#+}} xmm12 = xmm0[3,3,3,3,4,5,6,7]
+; AVX-NEXT: vpsrlq $48, %xmm0, %xmm12
; AVX-NEXT: vcvtph2ps %xmm12, %xmm12
; AVX-NEXT: vroundss $4, %xmm12, %xmm12, %xmm12
; AVX-NEXT: vcvtps2ph $4, %xmm12, %xmm12
@@ -526,7 +526,7 @@ define <32 x i64> @llrint_v32i64_v32f16(<32 x half> %x) {
; AVX-NEXT: vcvtps2ph $4, %xmm15, %xmm15
; AVX-NEXT: vcvtph2ps %xmm15, %xmm15
; AVX-NEXT: vcvttss2si %xmm15, %rcx
-; AVX-NEXT: vpshuflw {{.*#+}} xmm15 = xmm0[1,1,1,1,4,5,6,7]
+; AVX-NEXT: vpsrld $16, %xmm0, %xmm15
; AVX-NEXT: vcvtph2ps %xmm15, %xmm15
; AVX-NEXT: vroundss $4, %xmm15, %xmm15, %xmm15
; AVX-NEXT: vcvtps2ph $4, %xmm15, %xmm15
@@ -535,7 +535,7 @@ define <32 x i64> @llrint_v32i64_v32f16(<32 x half> %x) {
; AVX-NEXT: vmovq %rcx, %xmm15
; AVX-NEXT: vmovq %rdx, %xmm2
; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm15[0],xmm2[0]
-; AVX-NEXT: vpshuflw {{.*#+}} xmm15 = xmm0[3,3,3,3,4,5,6,7]
+; AVX-NEXT: vpsrlq $48, %xmm0, %xmm15
; AVX-NEXT: vcvtph2ps %xmm15, %xmm15
; AVX-NEXT: vroundss $4, %xmm15, %xmm15, %xmm15
; AVX-NEXT: vcvtps2ph $4, %xmm15, %xmm15
diff --git a/llvm/test/CodeGen/X86/vector-lrint-f16.ll b/llvm/test/CodeGen/X86/vector-lrint-f16.ll
index 71d58652b212d..1316f808aa27e 100644
--- a/llvm/test/CodeGen/X86/vector-lrint-f16.ll
+++ b/llvm/test/CodeGen/X86/vector-lrint-f16.ll
@@ -76,7 +76,7 @@ declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f16(<1 x half>)
define <2 x iXLen> @lrint_v2f16(<2 x half> %x) {
; X86-AVX-I16-LABEL: lrint_v2f16:
; X86-AVX-I16: # %bb.0:
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1
; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1
; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -96,7 +96,7 @@ define <2 x iXLen> @lrint_v2f16(<2 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -140,7 +140,7 @@ define <2 x iXLen> @lrint_v2f16(<2 x half> %x) {
;
; X64-AVX-I16-LABEL: lrint_v2f16:
; X64-AVX-I16: # %bb.0:
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1
; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1
; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -160,7 +160,7 @@ define <2 x iXLen> @lrint_v2f16(<2 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -204,7 +204,7 @@ define <2 x iXLen> @lrint_v2f16(<2 x half> %x) {
;
; X86-AVX-I32-LABEL: lrint_v2f16:
; X86-AVX-I32: # %bb.0:
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm1
; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1
; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -226,7 +226,7 @@ define <2 x iXLen> @lrint_v2f16(<2 x half> %x) {
;
; X64-AVX-I32-LABEL: lrint_v2f16:
; X64-AVX-I32: # %bb.0:
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm1
; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1
; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -253,7 +253,7 @@ declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f16(<2 x half>)
define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {
; X86-AVX-I16-LABEL: lrint_v4f16:
; X86-AVX-I16: # %bb.0:
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1
; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1
; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -273,7 +273,7 @@ define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -317,7 +317,7 @@ define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {
;
; X64-AVX-I16-LABEL: lrint_v4f16:
; X64-AVX-I16: # %bb.0:
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1
; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1
; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -337,7 +337,7 @@ define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -381,7 +381,7 @@ define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {
;
; X86-AVX-I32-LABEL: lrint_v4f16:
; X86-AVX-I32: # %bb.0:
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm1
; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1
; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -401,7 +401,7 @@ define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax
; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0
; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0
; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -417,7 +417,7 @@ define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {
;
; X64-AVX-I32-LABEL: lrint_v4f16:
; X64-AVX-I32: # %bb.0:
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm1
; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1
; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -437,7 +437,7 @@ define <4 x iXLen> @lrint_v4f16(<4 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax
; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0
; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0
; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -458,7 +458,7 @@ declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f16(<4 x half>)
define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {
; X86-AVX-I16-LABEL: lrint_v8f16:
; X86-AVX-I16: # %bb.0:
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1
; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1
; X86-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -478,7 +478,7 @@ define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -522,7 +522,7 @@ define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {
;
; X64-AVX-I16-LABEL: lrint_v8f16:
; X64-AVX-I16: # %bb.0:
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm1 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm1
; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1
; X64-AVX-I16-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -542,7 +542,7 @@ define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm2
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -614,7 +614,7 @@ define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax
; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm2
; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -634,7 +634,7 @@ define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0
; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0
; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -679,7 +679,7 @@ define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax
; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm2
; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -699,7 +699,7 @@ define <8 x iXLen> @lrint_v8f16(<8 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0
; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0
; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -722,7 +722,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X86-AVX-I16-LABEL: lrint_v16f16:
; X86-AVX-I16: # %bb.0:
; X86-AVX-I16-NEXT: vextracti128 $1, %ymm0, %xmm1
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm1[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm1, %xmm2
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -742,7 +742,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm2, %xmm2
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm1[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm1, %xmm3
; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -777,7 +777,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1
; X86-AVX-I16-NEXT: vcvttss2si %xmm1, %eax
; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm2, %xmm1
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm2
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -797,7 +797,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I16-NEXT: vcvttss2si %xmm3, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm2, %xmm2
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm3
; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -843,7 +843,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X64-AVX-I16-LABEL: lrint_v16f16:
; X64-AVX-I16: # %bb.0:
; X64-AVX-I16-NEXT: vextracti128 $1, %ymm0, %xmm1
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm1[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm1, %xmm2
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -863,7 +863,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm2, %xmm2
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm1[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm1, %xmm3
; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -898,7 +898,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm1, %xmm1
; X64-AVX-I16-NEXT: vcvttss2si %xmm1, %eax
; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm2, %xmm1
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm2
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -918,7 +918,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I16-NEXT: vcvttss2si %xmm3, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm2, %xmm2
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm3
; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -991,7 +991,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I32-NEXT: vcvttss2si %xmm2, %eax
; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm2
; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -1011,7 +1011,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm3
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1048,7 +1048,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm3
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1068,7 +1068,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax
; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm3
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0
; X86-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0
; X86-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -1114,7 +1114,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I32-NEXT: vcvttss2si %xmm2, %eax
; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm2 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm2
; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -1134,7 +1134,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm3
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1171,7 +1171,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm0, %xmm3
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1191,7 +1191,7 @@ define <16 x iXLen> @lrint_v16f16(<16 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax
; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm3
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrlq $48, %xmm0, %xmm0
; X64-AVX-I32-NEXT: vcvtph2ps %xmm0, %xmm0
; X64-AVX-I32-NEXT: vroundss $4, %xmm0, %xmm0, %xmm0
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -1215,7 +1215,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I16-LABEL: lrint_v32f32:
; X86-AVX-I16: # %bb.0:
; X86-AVX-I16-NEXT: vextracti128 $1, %ymm0, %xmm2
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm2[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm2, %xmm3
; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1235,7 +1235,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm4 = xmm2[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm2, %xmm4
; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1270,7 +1270,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm2
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm3
; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1290,7 +1290,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm4 = xmm0[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm4
; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1327,7 +1327,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm0
; X86-AVX-I16-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
; X86-AVX-I16-NEXT: vextracti128 $1, %ymm1, %xmm2
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm2[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm2, %xmm3
; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1347,7 +1347,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm4 = xmm2[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm2, %xmm4
; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1382,7 +1382,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X86-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm2
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm1[1,1,1,1,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrld $16, %xmm1, %xmm3
; X86-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1402,7 +1402,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I16-NEXT: vcvttss2si %xmm4, %eax
; X86-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3
-; X86-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm4 = xmm1[3,3,3,3,4,5,6,7]
+; X86-AVX-I16-NEXT: vpsrlq $48, %xmm1, %xmm4
; X86-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X86-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1448,7 +1448,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I16-LABEL: lrint_v32f32:
; X64-AVX-I16: # %bb.0:
; X64-AVX-I16-NEXT: vextracti128 $1, %ymm0, %xmm2
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm2[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm2, %xmm3
; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1468,7 +1468,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm4 = xmm2[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm2, %xmm4
; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1503,7 +1503,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm2
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm0[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm0, %xmm3
; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1523,7 +1523,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm4 = xmm0[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm0, %xmm4
; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1560,7 +1560,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm0
; X64-AVX-I16-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
; X64-AVX-I16-NEXT: vextracti128 $1, %ymm1, %xmm2
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm2[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm2, %xmm3
; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1580,7 +1580,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm4 = xmm2[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm2, %xmm4
; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1615,7 +1615,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I16-NEXT: vcvttss2si %xmm2, %eax
; X64-AVX-I16-NEXT: vpinsrw $7, %eax, %xmm3, %xmm2
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm3 = xmm1[1,1,1,1,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrld $16, %xmm1, %xmm3
; X64-AVX-I16-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I16-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1635,7 +1635,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I16-NEXT: vcvttss2si %xmm4, %eax
; X64-AVX-I16-NEXT: vpinsrw $2, %eax, %xmm3, %xmm3
-; X64-AVX-I16-NEXT: vpshuflw {{.*#+}} xmm4 = xmm1[3,3,3,3,4,5,6,7]
+; X64-AVX-I16-NEXT: vpsrlq $48, %xmm1, %xmm4
; X64-AVX-I16-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I16-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X64-AVX-I16-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1709,7 +1709,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm0, %xmm0
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm3 = xmm2[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm2, %xmm3
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1729,7 +1729,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax
; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm3
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm4 = xmm2[3,3,3,3,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrlq $48, %xmm2, %xmm4
; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1766,7 +1766,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I32-NEXT: vcvttss2si %xmm4, %eax
; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm3
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm4 = xmm2[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm2, %xmm4
; X86-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X86-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -1786,7 +1786,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax
; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm4, %xmm4
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm2 = xmm2[3,3,3,3,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrlq $48, %xmm2, %xmm2
; X86-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X86-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -1822,7 +1822,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm2, %xmm2
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm3 = xmm1[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm1, %xmm3
; X86-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X86-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1842,7 +1842,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax
; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm3
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm5 = xmm1[3,3,3,3,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrlq $48, %xmm1, %xmm5
; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm5
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm5
@@ -1879,7 +1879,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X86-AVX-I32-NEXT: vcvttss2si %xmm5, %eax
; X86-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm3
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm5 = xmm1[1,1,1,1,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrld $16, %xmm1, %xmm5
; X86-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X86-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm5
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm5
@@ -1899,7 +1899,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X86-AVX-I32-NEXT: vcvtph2ps %xmm6, %xmm6
; X86-AVX-I32-NEXT: vcvttss2si %xmm6, %eax
; X86-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm5, %xmm5
-; X86-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm1 = xmm1[3,3,3,3,4,5,6,7]
+; X86-AVX-I32-NEXT: vpsrlq $48, %xmm1, %xmm1
; X86-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1
; X86-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X86-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1
@@ -1949,7 +1949,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm0, %xmm0
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm3 = xmm2[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm2, %xmm3
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -1969,7 +1969,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax
; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm3
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm4 = xmm2[3,3,3,3,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrlq $48, %xmm2, %xmm4
; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -2006,7 +2006,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I32-NEXT: vcvttss2si %xmm4, %eax
; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm3
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm4 = xmm2[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm2, %xmm4
; X64-AVX-I32-NEXT: vcvtph2ps %xmm4, %xmm4
; X64-AVX-I32-NEXT: vroundss $4, %xmm4, %xmm4, %xmm4
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm4, %xmm4
@@ -2026,7 +2026,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax
; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm4, %xmm4
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm2 = xmm2[3,3,3,3,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrlq $48, %xmm2, %xmm2
; X64-AVX-I32-NEXT: vcvtph2ps %xmm2, %xmm2
; X64-AVX-I32-NEXT: vroundss $4, %xmm2, %xmm2, %xmm2
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm2, %xmm2
@@ -2062,7 +2062,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvttss2si %xmm3, %eax
; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm2, %xmm2
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm3 = xmm1[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm1, %xmm3
; X64-AVX-I32-NEXT: vcvtph2ps %xmm3, %xmm3
; X64-AVX-I32-NEXT: vroundss $4, %xmm3, %xmm3, %xmm3
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm3, %xmm3
@@ -2082,7 +2082,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax
; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm3, %xmm3
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm5 = xmm1[3,3,3,3,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrlq $48, %xmm1, %xmm5
; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm5
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm5
@@ -2119,7 +2119,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X64-AVX-I32-NEXT: vcvttss2si %xmm5, %eax
; X64-AVX-I32-NEXT: vpinsrd $3, %eax, %xmm3, %xmm3
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm5 = xmm1[1,1,1,1,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrld $16, %xmm1, %xmm5
; X64-AVX-I32-NEXT: vcvtph2ps %xmm5, %xmm5
; X64-AVX-I32-NEXT: vroundss $4, %xmm5, %xmm5, %xmm5
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm5, %xmm5
@@ -2139,7 +2139,7 @@ define <32 x iXLen> @lrint_v32f32(<32 x half> %x) {
; X64-AVX-I32-NEXT: vcvtph2ps %xmm6, %xmm6
; X64-AVX-I32-NEXT: vcvttss2si %xmm6, %eax
; X64-AVX-I32-NEXT: vpinsrd $2, %eax, %xmm5, %xmm5
-; X64-AVX-I32-NEXT: vpshuflw {{.*#+}} xmm1 = xmm1[3,3,3,3,4,5,6,7]
+; X64-AVX-I32-NEXT: vpsrlq $48, %xmm1, %xmm1
; X64-AVX-I32-NEXT: vcvtph2ps %xmm1, %xmm1
; X64-AVX-I32-NEXT: vroundss $4, %xmm1, %xmm1, %xmm1
; X64-AVX-I32-NEXT: vcvtps2ph $4, %xmm1, %xmm1
More information about the llvm-commits
mailing list