diff options
-rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 12 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/avx2-vbroadcast.ll | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/splat-for-size.ll | 16 |
3 files changed, 18 insertions, 13 deletions
diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index 98d5dac9e8e..bad2d4ea415 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -5162,12 +5162,12 @@ let Predicates = [HasAVX] in { (VMOVDDUPrm addr:$src)>, Requires<[HasAVX]>; } -let Predicates = [UseAVX, OptForSize] in { - def : Pat<(v2f64 (X86VBroadcast (loadf64 addr:$src))), - (VMOVDDUPrm addr:$src)>; - def : Pat<(v2i64 (X86VBroadcast (loadi64 addr:$src))), - (VMOVDDUPrm addr:$src)>; -} +let Predicates = [HasAVX, NoVLX] in +def : Pat<(v2f64 (X86VBroadcast (loadf64 addr:$src))), + (VMOVDDUPrm addr:$src)>; +let Predicates = [HasAVX1Only] in +def : Pat<(v2i64 (X86VBroadcast (loadi64 addr:$src))), + (VMOVDDUPrm addr:$src)>; let Predicates = [UseSSE3] in { def : Pat<(X86Movddup (memopv2f64 addr:$src)), diff --git a/llvm/test/CodeGen/X86/avx2-vbroadcast.ll b/llvm/test/CodeGen/X86/avx2-vbroadcast.ll index 4e004d2583b..029c21ae046 100644 --- a/llvm/test/CodeGen/X86/avx2-vbroadcast.ll +++ b/llvm/test/CodeGen/X86/avx2-vbroadcast.ll @@ -250,8 +250,7 @@ define <8 x i16> @broadcast_mem_v4i16_v8i16(<4 x i16>* %ptr) { ; X32-AVX2-LABEL: broadcast_mem_v4i16_v8i16: ; X32-AVX2: ## BB#0: ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX2-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero -; X32-AVX2-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; X32-AVX2-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0] ; X32-AVX2-NEXT: retl ; ; X64-AVX2-LABEL: broadcast_mem_v4i16_v8i16: diff --git a/llvm/test/CodeGen/X86/splat-for-size.ll b/llvm/test/CodeGen/X86/splat-for-size.ll index 277472f49b3..0d1c1bcf76b 100644 --- a/llvm/test/CodeGen/X86/splat-for-size.ll +++ b/llvm/test/CodeGen/X86/splat-for-size.ll @@ -49,11 +49,17 @@ define <8 x float> @splat_v8f32(<8 x float> %x) #1 { ; AVX can't do integer splats, so fake it: use vmovddup to splat 64-bit value. ; We also generate vmovddup for AVX2 because it's one byte smaller than vpbroadcastq. define <2 x i64> @splat_v2i64(<2 x i64> %x) #1 { -; CHECK-LABEL: splat_v2i64: -; CHECK: # BB#0: -; CHECK-NEXT: vmovddup {{.*#+}} xmm1 = mem[0,0] -; CHECK-NEXT: vpaddq %xmm1, %xmm0, %xmm0 -; CHECK-NEXT: retq +; AVX-LABEL: splat_v2i64: +; AVX: # BB#0: +; AVX-NEXT: vmovddup {{.*#+}} xmm1 = mem[0,0] +; AVX-NEXT: vpaddq %xmm1, %xmm0, %xmm0 +; AVX-NEXT: retq +; +; AVX2-LABEL: splat_v2i64: +; AVX2: # BB#0: +; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %xmm1 +; AVX2-NEXT: vpaddq %xmm1, %xmm0, %xmm0 +; AVX2-NEXT: retq %add = add <2 x i64> %x, <i64 1, i64 1> ret <2 x i64> %add } |