Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/test/CodeGen/X86/subvector-broadcast.ll
Show First 20 Lines • Show All 829 Lines • ▼ Show 20 Lines | |||||
; | ; | ||||
@ga4 = global <4 x i64> zeroinitializer, align 8 | @ga4 = global <4 x i64> zeroinitializer, align 8 | ||||
@gb4 = global <8 x i64> zeroinitializer, align 8 | @gb4 = global <8 x i64> zeroinitializer, align 8 | ||||
define void @fallback_broadcast_v4i64_to_v8i64(<4 x i64> %a, <8 x i64> %b) { | define void @fallback_broadcast_v4i64_to_v8i64(<4 x i64> %a, <8 x i64> %b) { | ||||
; X32-AVX1-LABEL: fallback_broadcast_v4i64_to_v8i64: | ; X32-AVX1-LABEL: fallback_broadcast_v4i64_to_v8i64: | ||||
; X32-AVX1: # %bb.0: # %entry | ; X32-AVX1: # %bb.0: # %entry | ||||
; X32-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 | ; X32-AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [1,0,2,0] | ||||
; X32-AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [3,0,4,0] | ; X32-AVX1-NEXT: vpaddq %xmm3, %xmm0, %xmm4 | ||||
; X32-AVX1-NEXT: vpaddq %xmm4, %xmm3, %xmm3 | ; X32-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 | ||||
; X32-AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [1,0,2,0] | ; X32-AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [3,0,4,0] | ||||
; X32-AVX1-NEXT: vpaddq %xmm5, %xmm0, %xmm0 | ; X32-AVX1-NEXT: vpaddq %xmm5, %xmm0, %xmm0 | ||||
; X32-AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm0 | ; X32-AVX1-NEXT: vmovaps {{.*#+}} ymm6 = [1,0,2,0,3,0,4,0] | ||||
; X32-AVX1-NEXT: vmovaps {{.*#+}} ymm3 = [1,0,2,0,3,0,4,0] | ; X32-AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 | ||||
; X32-AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 | ; X32-AVX1-NEXT: vpaddq %xmm5, %xmm7, %xmm7 | ||||
; X32-AVX1-NEXT: vpaddq %xmm4, %xmm6, %xmm6 | ; X32-AVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2 | ||||
; X32-AVX1-NEXT: vpaddq %xmm5, %xmm2, %xmm2 | ; X32-AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm2, %ymm2 | ||||
; X32-AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm2, %ymm2 | ; X32-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7 | ||||
; X32-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 | ; X32-AVX1-NEXT: vpaddq %xmm5, %xmm7, %xmm5 | ||||
; X32-AVX1-NEXT: vpaddq %xmm4, %xmm6, %xmm4 | ; X32-AVX1-NEXT: vpaddq %xmm3, %xmm1, %xmm1 | ||||
; X32-AVX1-NEXT: vpaddq %xmm5, %xmm1, %xmm1 | ; X32-AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm1, %ymm1 | ||||
; X32-AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1 | ; X32-AVX1-NEXT: vandps %ymm6, %ymm1, %ymm1 | ||||
; X32-AVX1-NEXT: vandps %ymm3, %ymm1, %ymm1 | ; X32-AVX1-NEXT: vandps %ymm6, %ymm2, %ymm2 | ||||
; X32-AVX1-NEXT: vandps %ymm3, %ymm2, %ymm2 | ; X32-AVX1-NEXT: vmovdqu %xmm0, ga4+16 | ||||
; X32-AVX1-NEXT: vmovups %ymm0, ga4 | ; X32-AVX1-NEXT: vmovdqu %xmm4, ga4 | ||||
; X32-AVX1-NEXT: vmovups %ymm2, gb4+32 | ; X32-AVX1-NEXT: vmovups %ymm2, gb4+32 | ||||
; X32-AVX1-NEXT: vmovups %ymm1, gb4 | ; X32-AVX1-NEXT: vmovups %ymm1, gb4 | ||||
; X32-AVX1-NEXT: vzeroupper | ; X32-AVX1-NEXT: vzeroupper | ||||
; X32-AVX1-NEXT: retl | ; X32-AVX1-NEXT: retl | ||||
; | ; | ||||
; X32-AVX2-LABEL: fallback_broadcast_v4i64_to_v8i64: | ; X32-AVX2-LABEL: fallback_broadcast_v4i64_to_v8i64: | ||||
; X32-AVX2: # %bb.0: # %entry | ; X32-AVX2: # %bb.0: # %entry | ||||
; X32-AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [1,0,2,0,3,0,4,0] | ; X32-AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [1,0,2,0,3,0,4,0] | ||||
Show All 17 Lines | |||||
; X32-AVX512-NEXT: vpandq %zmm2, %zmm1, %zmm1 | ; X32-AVX512-NEXT: vpandq %zmm2, %zmm1, %zmm1 | ||||
; X32-AVX512-NEXT: vmovdqu %ymm0, ga4 | ; X32-AVX512-NEXT: vmovdqu %ymm0, ga4 | ||||
; X32-AVX512-NEXT: vmovdqu64 %zmm1, gb4 | ; X32-AVX512-NEXT: vmovdqu64 %zmm1, gb4 | ||||
; X32-AVX512-NEXT: vzeroupper | ; X32-AVX512-NEXT: vzeroupper | ||||
; X32-AVX512-NEXT: retl | ; X32-AVX512-NEXT: retl | ||||
; | ; | ||||
; X64-AVX1-LABEL: fallback_broadcast_v4i64_to_v8i64: | ; X64-AVX1-LABEL: fallback_broadcast_v4i64_to_v8i64: | ||||
; X64-AVX1: # %bb.0: # %entry | ; X64-AVX1: # %bb.0: # %entry | ||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 | ; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [1,2] | ||||
; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [3,4] | ; X64-AVX1-NEXT: vpaddq %xmm3, %xmm0, %xmm4 | ||||
; X64-AVX1-NEXT: vpaddq %xmm4, %xmm3, %xmm3 | ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 | ||||
; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [1,2] | ; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [3,4] | ||||
; X64-AVX1-NEXT: vpaddq %xmm5, %xmm0, %xmm0 | ; X64-AVX1-NEXT: vpaddq %xmm5, %xmm0, %xmm0 | ||||
; X64-AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm0 | ; X64-AVX1-NEXT: vmovaps {{.*#+}} ymm6 = [1,2,3,4] | ||||
; X64-AVX1-NEXT: vmovaps {{.*#+}} ymm3 = [1,2,3,4] | ; X64-AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7 | ||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6 | ; X64-AVX1-NEXT: vpaddq %xmm5, %xmm7, %xmm7 | ||||
; X64-AVX1-NEXT: vpaddq %xmm4, %xmm6, %xmm6 | ; X64-AVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2 | ||||
; X64-AVX1-NEXT: vpaddq %xmm5, %xmm2, %xmm2 | ; X64-AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm2, %ymm2 | ||||
; X64-AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm2, %ymm2 | ; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7 | ||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6 | ; X64-AVX1-NEXT: vpaddq %xmm5, %xmm7, %xmm5 | ||||
; X64-AVX1-NEXT: vpaddq %xmm4, %xmm6, %xmm4 | ; X64-AVX1-NEXT: vpaddq %xmm3, %xmm1, %xmm1 | ||||
; X64-AVX1-NEXT: vpaddq %xmm5, %xmm1, %xmm1 | ; X64-AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm1, %ymm1 | ||||
; X64-AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1 | ; X64-AVX1-NEXT: vandps %ymm6, %ymm1, %ymm1 | ||||
; X64-AVX1-NEXT: vandps %ymm3, %ymm1, %ymm1 | ; X64-AVX1-NEXT: vandps %ymm6, %ymm2, %ymm2 | ||||
; X64-AVX1-NEXT: vandps %ymm3, %ymm2, %ymm2 | ; X64-AVX1-NEXT: vmovdqu %xmm0, ga4+{{.*}}(%rip) | ||||
; X64-AVX1-NEXT: vmovups %ymm0, {{.*}}(%rip) | ; X64-AVX1-NEXT: vmovdqu %xmm4, {{.*}}(%rip) | ||||
; X64-AVX1-NEXT: vmovups %ymm2, gb4+{{.*}}(%rip) | ; X64-AVX1-NEXT: vmovups %ymm2, gb4+{{.*}}(%rip) | ||||
; X64-AVX1-NEXT: vmovups %ymm1, {{.*}}(%rip) | ; X64-AVX1-NEXT: vmovups %ymm1, {{.*}}(%rip) | ||||
; X64-AVX1-NEXT: vzeroupper | ; X64-AVX1-NEXT: vzeroupper | ||||
; X64-AVX1-NEXT: retq | ; X64-AVX1-NEXT: retq | ||||
; | ; | ||||
; X64-AVX2-LABEL: fallback_broadcast_v4i64_to_v8i64: | ; X64-AVX2-LABEL: fallback_broadcast_v4i64_to_v8i64: | ||||
; X64-AVX2: # %bb.0: # %entry | ; X64-AVX2: # %bb.0: # %entry | ||||
; X64-AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [1,2,3,4] | ; X64-AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [1,2,3,4] | ||||
▲ Show 20 Lines • Show All 821 Lines • Show Last 20 Lines |