diff options
author | Craig Topper <craig.topper@intel.com> | 2019-10-11 04:02:04 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2019-10-11 04:02:04 +0000 |
commit | 4b9947e2e76e1e7b1ec0b2fdb9609b2850a20812 (patch) | |
tree | ac006ba8a39738a4036f61159d2e36321d83f7ff | |
parent | 2d5820cd72255e04aaef2da3c21d62396fdd7fb9 (diff) | |
download | bcm5719-llvm-4b9947e2e76e1e7b1ec0b2fdb9609b2850a20812.tar.gz bcm5719-llvm-4b9947e2e76e1e7b1ec0b2fdb9609b2850a20812.zip |
[X86] Add test case for trunc_packus_v16i32_v16i8_store to min-legal-vector-width.ll
We aren't folding the vpmovuswb into the store.
llvm-svn: 374507
-rw-r--r-- | llvm/test/CodeGen/X86/min-legal-vector-width.ll | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/X86/min-legal-vector-width.ll b/llvm/test/CodeGen/X86/min-legal-vector-width.ll index 91ece95e0a0..95e6d3e7ae7 100644 --- a/llvm/test/CodeGen/X86/min-legal-vector-width.ll +++ b/llvm/test/CodeGen/X86/min-legal-vector-width.ll @@ -1080,7 +1080,7 @@ define void @vselect_split_v16i16_setcc(<16 x i16> %s, <16 x i16> %t, <16 x i32> ret void } -define <16 x i8> @trunc_packus_v16i32_v16i8(<16 x i32>* %p, <16 x i8>* %q) "min-legal-vector-width"="256" { +define <16 x i8> @trunc_packus_v16i32_v16i8(<16 x i32>* %p) "min-legal-vector-width"="256" { ; CHECK-LABEL: trunc_packus_v16i32_v16i8: ; CHECK: # %bb.0: ; CHECK-NEXT: vmovdqa (%rdi), %ymm0 @@ -1098,6 +1098,26 @@ define <16 x i8> @trunc_packus_v16i32_v16i8(<16 x i32>* %p, <16 x i8>* %q) "min- ret <16 x i8> %f } +define void @trunc_packus_v16i32_v16i8_store(<16 x i32>* %p, <16 x i8>* %q) "min-legal-vector-width"="256" { +; CHECK-LABEL: trunc_packus_v16i32_v16i8_store: +; CHECK: # %bb.0: +; CHECK-NEXT: vmovdqa (%rdi), %ymm0 +; CHECK-NEXT: vpackusdw 32(%rdi), %ymm0, %ymm0 +; CHECK-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] +; CHECK-NEXT: vpmovuswb %ymm0, %xmm0 +; CHECK-NEXT: vmovdqa %xmm0, (%rsi) +; CHECK-NEXT: vzeroupper +; CHECK-NEXT: retq + %a = load <16 x i32>, <16 x i32>* %p + %b = icmp slt <16 x i32> %a, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255> + %c = select <16 x i1> %b, <16 x i32> %a, <16 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255> + %d = icmp sgt <16 x i32> %c, zeroinitializer + %e = select <16 x i1> %d, <16 x i32> %c, <16 x i32> zeroinitializer + %f = trunc <16 x i32> %e to <16 x i8> + store <16 x i8> %f, <16 x i8>* %q + ret void +} + define <32 x i8> @trunc_packus_v32i32_v32i8(<32 x i32>* %p) "min-legal-vector-width"="256" { ; CHECK-LABEL: trunc_packus_v32i32_v32i8: ; CHECK: # %bb.0: |