forked from OSchip/llvm-project
[X86] Combine inserting a vector of zeros into a vector of zeros just the larger vector.
llvm-svn: 312458
This commit is contained in:
parent
d8f067539b
commit
788fbe08db
|
@ -35656,6 +35656,11 @@ static SDValue combineInsertSubvector(SDNode *N, SelectionDAG &DAG,
|
|||
unsigned IdxVal = cast<ConstantSDNode>(Idx)->getZExtValue();
|
||||
MVT SubVecVT = SubVec.getSimpleValueType();
|
||||
|
||||
// Inserting zeros into zeros is a nop.
|
||||
if (ISD::isBuildVectorAllZeros(Vec.getNode()) &&
|
||||
ISD::isBuildVectorAllZeros(SubVec.getNode()))
|
||||
return Vec;
|
||||
|
||||
// If this is an insert of an extract, combine to a shuffle. Don't do this
|
||||
// if the insert or extract can be represented with a subregister operation.
|
||||
if (SubVec.getOpcode() == ISD::EXTRACT_SUBVECTOR &&
|
||||
|
|
|
@ -1134,17 +1134,13 @@ define <8 x double> @test_mm512_zextpd128_pd512(<2 x double> %a0) nounwind {
|
|||
; X32-LABEL: test_mm512_zextpd128_pd512:
|
||||
; X32: # BB#0:
|
||||
; X32-NEXT: vmovaps %xmm0, %xmm0
|
||||
; X32-NEXT: vxorps %xmm1, %xmm1, %xmm1
|
||||
; X32-NEXT: vmovaps %xmm1, %xmm1
|
||||
; X32-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
|
||||
; X32-NEXT: vmovaps %ymm0, %ymm0
|
||||
; X32-NEXT: retl
|
||||
;
|
||||
; X64-LABEL: test_mm512_zextpd128_pd512:
|
||||
; X64: # BB#0:
|
||||
; X64-NEXT: vmovaps %xmm0, %xmm0
|
||||
; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1
|
||||
; X64-NEXT: vmovaps %xmm1, %xmm1
|
||||
; X64-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
|
||||
; X64-NEXT: vmovaps %ymm0, %ymm0
|
||||
; X64-NEXT: retq
|
||||
%res = shufflevector <2 x double> %a0, <2 x double> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>
|
||||
ret <8 x double> %res
|
||||
|
@ -1169,7 +1165,6 @@ define <16 x float> @test_mm512_zextps128_ps512(<4 x float> %a0) nounwind {
|
|||
; X32: # BB#0:
|
||||
; X32-NEXT: vmovaps %xmm0, %xmm0
|
||||
; X32-NEXT: vxorps %xmm1, %xmm1, %xmm1
|
||||
; X32-NEXT: vmovaps %xmm1, %xmm1
|
||||
; X32-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
|
||||
; X32-NEXT: retl
|
||||
;
|
||||
|
@ -1177,7 +1172,6 @@ define <16 x float> @test_mm512_zextps128_ps512(<4 x float> %a0) nounwind {
|
|||
; X64: # BB#0:
|
||||
; X64-NEXT: vmovaps %xmm0, %xmm0
|
||||
; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1
|
||||
; X64-NEXT: vmovaps %xmm1, %xmm1
|
||||
; X64-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
|
||||
; X64-NEXT: retq
|
||||
%res = shufflevector <4 x float> %a0, <4 x float> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>
|
||||
|
@ -1202,17 +1196,13 @@ define <8 x i64> @test_mm512_zextsi128_si512(<2 x i64> %a0) nounwind {
|
|||
; X32-LABEL: test_mm512_zextsi128_si512:
|
||||
; X32: # BB#0:
|
||||
; X32-NEXT: vmovaps %xmm0, %xmm0
|
||||
; X32-NEXT: vxorps %xmm1, %xmm1, %xmm1
|
||||
; X32-NEXT: vmovaps %xmm1, %xmm1
|
||||
; X32-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
|
||||
; X32-NEXT: vmovaps %ymm0, %ymm0
|
||||
; X32-NEXT: retl
|
||||
;
|
||||
; X64-LABEL: test_mm512_zextsi128_si512:
|
||||
; X64: # BB#0:
|
||||
; X64-NEXT: vmovaps %xmm0, %xmm0
|
||||
; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1
|
||||
; X64-NEXT: vmovaps %xmm1, %xmm1
|
||||
; X64-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
|
||||
; X64-NEXT: vmovaps %ymm0, %ymm0
|
||||
; X64-NEXT: retq
|
||||
%res = shufflevector <2 x i64> %a0, <2 x i64> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>
|
||||
ret <8 x i64> %res
|
||||
|
|
Loading…
Reference in New Issue