diff options
author | Craig Topper <craig.topper@intel.com> | 2018-01-04 20:56:21 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2018-01-04 20:56:21 +0000 |
commit | dffb98e03dcd6249fb8fea2985d740d9538eb2d8 (patch) | |
tree | f3a1b484be4e8ed2320593c05e7259413d0ebc10 | |
parent | fd9b2affc3b0118efad1fdf8dcbb3c0eba3c4f7d (diff) | |
download | bcm5719-llvm-dffb98e03dcd6249fb8fea2985d740d9538eb2d8.tar.gz bcm5719-llvm-dffb98e03dcd6249fb8fea2985d740d9538eb2d8.zip |
[X86] Correct the execution domain for AVX1 VBROADCASTF128 to be FP instead of integer.
llvm-svn: 321821
-rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/subvector-broadcast.ll | 148 |
2 files changed, 50 insertions, 101 deletions
diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index cb84f9aecf7..189fb46612e 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -7556,7 +7556,8 @@ def VBROADCASTI128 : AVX8I<0x5A, MRMSrcMem, (outs VR256:$dst), "vbroadcasti128\t{$src, $dst|$dst, $src}", []>, Sched<[WriteLoad]>, VEX, VEX_L; -let mayLoad = 1, hasSideEffects = 0, Predicates = [HasAVX] in +let mayLoad = 1, hasSideEffects = 0, Predicates = [HasAVX], + ExeDomain = SSEPackedSingle in def VBROADCASTF128 : AVX8I<0x1A, MRMSrcMem, (outs VR256:$dst), (ins f128mem:$src), "vbroadcastf128\t{$src, $dst|$dst, $src}", []>, diff --git a/llvm/test/CodeGen/X86/subvector-broadcast.ll b/llvm/test/CodeGen/X86/subvector-broadcast.ll index 33cf2f453ba..f44e9a98dc8 100644 --- a/llvm/test/CodeGen/X86/subvector-broadcast.ll +++ b/llvm/test/CodeGen/X86/subvector-broadcast.ll @@ -35,7 +35,7 @@ define <8 x double> @test_broadcast_2f64_8f64(<2 x double> *%p) nounwind { ; X32-AVX: # %bb.0: ; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX-NEXT: vmovdqa %ymm0, %ymm1 +; X32-AVX-NEXT: vmovaps %ymm0, %ymm1 ; X32-AVX-NEXT: retl ; ; X32-AVX512-LABEL: test_broadcast_2f64_8f64: @@ -47,7 +47,7 @@ define <8 x double> @test_broadcast_2f64_8f64(<2 x double> *%p) nounwind { ; X64-AVX-LABEL: test_broadcast_2f64_8f64: ; X64-AVX: # %bb.0: ; X64-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX-NEXT: vmovdqa %ymm0, %ymm1 +; X64-AVX-NEXT: vmovaps %ymm0, %ymm1 ; X64-AVX-NEXT: retq ; ; X64-AVX512-LABEL: test_broadcast_2f64_8f64: @@ -116,19 +116,12 @@ define <4 x i64> @test_broadcast_2i64_4i64(<2 x i64> *%p) nounwind { } define <8 x i64> @test_broadcast_2i64_8i64(<2 x i64> *%p) nounwind { -; X32-AVX1-LABEL: test_broadcast_2i64_8i64: -; X32-AVX1: # %bb.0: -; X32-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX1-NEXT: vmovdqa %ymm0, %ymm1 -; X32-AVX1-NEXT: retl -; -; X32-AVX2-LABEL: test_broadcast_2i64_8i64: -; X32-AVX2: # %bb.0: -; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX2-NEXT: vmovaps %ymm0, %ymm1 -; X32-AVX2-NEXT: retl +; X32-AVX-LABEL: test_broadcast_2i64_8i64: +; X32-AVX: # %bb.0: +; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] +; X32-AVX-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX-NEXT: retl ; ; X32-AVX512-LABEL: test_broadcast_2i64_8i64: ; X32-AVX512: # %bb.0: @@ -136,17 +129,11 @@ define <8 x i64> @test_broadcast_2i64_8i64(<2 x i64> *%p) nounwind { ; X32-AVX512-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3] ; X32-AVX512-NEXT: retl ; -; X64-AVX1-LABEL: test_broadcast_2i64_8i64: -; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX1-NEXT: vmovdqa %ymm0, %ymm1 -; X64-AVX1-NEXT: retq -; -; X64-AVX2-LABEL: test_broadcast_2i64_8i64: -; X64-AVX2: # %bb.0: -; X64-AVX2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX2-NEXT: vmovaps %ymm0, %ymm1 -; X64-AVX2-NEXT: retq +; X64-AVX-LABEL: test_broadcast_2i64_8i64: +; X64-AVX: # %bb.0: +; X64-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] +; X64-AVX-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX-NEXT: retq ; ; X64-AVX512-LABEL: test_broadcast_2i64_8i64: ; X64-AVX512: # %bb.0: @@ -207,7 +194,7 @@ define <16 x float> @test_broadcast_4f32_16f32(<4 x float> *%p) nounwind { ; X32-AVX: # %bb.0: ; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX-NEXT: vmovdqa %ymm0, %ymm1 +; X32-AVX-NEXT: vmovaps %ymm0, %ymm1 ; X32-AVX-NEXT: retl ; ; X32-AVX512-LABEL: test_broadcast_4f32_16f32: @@ -219,7 +206,7 @@ define <16 x float> @test_broadcast_4f32_16f32(<4 x float> *%p) nounwind { ; X64-AVX-LABEL: test_broadcast_4f32_16f32: ; X64-AVX: # %bb.0: ; X64-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX-NEXT: vmovdqa %ymm0, %ymm1 +; X64-AVX-NEXT: vmovaps %ymm0, %ymm1 ; X64-AVX-NEXT: retq ; ; X64-AVX512-LABEL: test_broadcast_4f32_16f32: @@ -288,19 +275,12 @@ define <8 x i32> @test_broadcast_4i32_8i32(<4 x i32> *%p) nounwind { } define <16 x i32> @test_broadcast_4i32_16i32(<4 x i32> *%p) nounwind { -; X32-AVX1-LABEL: test_broadcast_4i32_16i32: -; X32-AVX1: # %bb.0: -; X32-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX1-NEXT: vmovdqa %ymm0, %ymm1 -; X32-AVX1-NEXT: retl -; -; X32-AVX2-LABEL: test_broadcast_4i32_16i32: -; X32-AVX2: # %bb.0: -; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX2-NEXT: vmovaps %ymm0, %ymm1 -; X32-AVX2-NEXT: retl +; X32-AVX-LABEL: test_broadcast_4i32_16i32: +; X32-AVX: # %bb.0: +; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] +; X32-AVX-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX-NEXT: retl ; ; X32-AVX512-LABEL: test_broadcast_4i32_16i32: ; X32-AVX512: # %bb.0: @@ -308,17 +288,11 @@ define <16 x i32> @test_broadcast_4i32_16i32(<4 x i32> *%p) nounwind { ; X32-AVX512-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3] ; X32-AVX512-NEXT: retl ; -; X64-AVX1-LABEL: test_broadcast_4i32_16i32: -; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX1-NEXT: vmovdqa %ymm0, %ymm1 -; X64-AVX1-NEXT: retq -; -; X64-AVX2-LABEL: test_broadcast_4i32_16i32: -; X64-AVX2: # %bb.0: -; X64-AVX2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX2-NEXT: vmovaps %ymm0, %ymm1 -; X64-AVX2-NEXT: retq +; X64-AVX-LABEL: test_broadcast_4i32_16i32: +; X64-AVX: # %bb.0: +; X64-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] +; X64-AVX-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX-NEXT: retq ; ; X64-AVX512-LABEL: test_broadcast_4i32_16i32: ; X64-AVX512: # %bb.0: @@ -386,19 +360,12 @@ define <16 x i16> @test_broadcast_8i16_16i16(<8 x i16> *%p) nounwind { } define <32 x i16> @test_broadcast_8i16_32i16(<8 x i16> *%p) nounwind { -; X32-AVX1-LABEL: test_broadcast_8i16_32i16: -; X32-AVX1: # %bb.0: -; X32-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX1-NEXT: vmovdqa %ymm0, %ymm1 -; X32-AVX1-NEXT: retl -; -; X32-AVX2-LABEL: test_broadcast_8i16_32i16: -; X32-AVX2: # %bb.0: -; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX2-NEXT: vmovaps %ymm0, %ymm1 -; X32-AVX2-NEXT: retl +; X32-AVX-LABEL: test_broadcast_8i16_32i16: +; X32-AVX: # %bb.0: +; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] +; X32-AVX-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX-NEXT: retl ; ; X32-AVX512F-LABEL: test_broadcast_8i16_32i16: ; X32-AVX512F: # %bb.0: @@ -420,17 +387,11 @@ define <32 x i16> @test_broadcast_8i16_32i16(<8 x i16> *%p) nounwind { ; X32-AVX512DQ-NEXT: vmovdqa %ymm0, %ymm1 ; X32-AVX512DQ-NEXT: retl ; -; X64-AVX1-LABEL: test_broadcast_8i16_32i16: -; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX1-NEXT: vmovdqa %ymm0, %ymm1 -; X64-AVX1-NEXT: retq -; -; X64-AVX2-LABEL: test_broadcast_8i16_32i16: -; X64-AVX2: # %bb.0: -; X64-AVX2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX2-NEXT: vmovaps %ymm0, %ymm1 -; X64-AVX2-NEXT: retq +; X64-AVX-LABEL: test_broadcast_8i16_32i16: +; X64-AVX: # %bb.0: +; X64-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] +; X64-AVX-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX-NEXT: retq ; ; X64-AVX512F-LABEL: test_broadcast_8i16_32i16: ; X64-AVX512F: # %bb.0: @@ -536,19 +497,12 @@ define <32 x i8> @test_broadcast_16i8_32i8(<16 x i8> *%p) nounwind { } define <64 x i8> @test_broadcast_16i8_64i8(<16 x i8> *%p) nounwind { -; X32-AVX1-LABEL: test_broadcast_16i8_64i8: -; X32-AVX1: # %bb.0: -; X32-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX1-NEXT: vmovdqa %ymm0, %ymm1 -; X32-AVX1-NEXT: retl -; -; X32-AVX2-LABEL: test_broadcast_16i8_64i8: -; X32-AVX2: # %bb.0: -; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X32-AVX2-NEXT: vmovaps %ymm0, %ymm1 -; X32-AVX2-NEXT: retl +; X32-AVX-LABEL: test_broadcast_16i8_64i8: +; X32-AVX: # %bb.0: +; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] +; X32-AVX-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX-NEXT: retl ; ; X32-AVX512F-LABEL: test_broadcast_16i8_64i8: ; X32-AVX512F: # %bb.0: @@ -570,17 +524,11 @@ define <64 x i8> @test_broadcast_16i8_64i8(<16 x i8> *%p) nounwind { ; X32-AVX512DQ-NEXT: vmovdqa %ymm0, %ymm1 ; X32-AVX512DQ-NEXT: retl ; -; X64-AVX1-LABEL: test_broadcast_16i8_64i8: -; X64-AVX1: # %bb.0: -; X64-AVX1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX1-NEXT: vmovdqa %ymm0, %ymm1 -; X64-AVX1-NEXT: retq -; -; X64-AVX2-LABEL: test_broadcast_16i8_64i8: -; X64-AVX2: # %bb.0: -; X64-AVX2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] -; X64-AVX2-NEXT: vmovaps %ymm0, %ymm1 -; X64-AVX2-NEXT: retq +; X64-AVX-LABEL: test_broadcast_16i8_64i8: +; X64-AVX: # %bb.0: +; X64-AVX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] +; X64-AVX-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX-NEXT: retq ; ; X64-AVX512F-LABEL: test_broadcast_16i8_64i8: ; X64-AVX512F: # %bb.0: |