diff options
Diffstat (limited to 'test/CodeGen/X86')
-rw-r--r-- | test/CodeGen/X86/avx-sext.ll | 11 | ||||
-rw-r--r-- | test/CodeGen/X86/avx-trunc.ll | 7 | ||||
-rw-r--r-- | test/CodeGen/X86/avx2-conversions.ll | 19 | ||||
-rw-r--r-- | test/CodeGen/X86/pmovsx-inreg.ll | 3 |
4 files changed, 37 insertions, 3 deletions
diff --git a/test/CodeGen/X86/avx-sext.ll b/test/CodeGen/X86/avx-sext.ll index b9c7000..fb2287f 100644 --- a/test/CodeGen/X86/avx-sext.ll +++ b/test/CodeGen/X86/avx-sext.ll @@ -154,6 +154,17 @@ define <4 x i64> @sext_4i1_to_4i64(<4 x i1> %mask) { ret <4 x i64> %extmask } +; AVX-LABEL: sext_16i8_to_16i16 +; AVX: vpmovsxbw +; AVX: vmovhlps +; AVX: vpmovsxbw +; AVX: ret +define <16 x i16> @sext_16i8_to_16i16(<16 x i8> *%ptr) { + %X = load <16 x i8>* %ptr + %Y = sext <16 x i8> %X to <16 x i16> + ret <16 x i16> %Y +} + ; AVX: sext_4i8_to_4i64 ; AVX: vpslld $24 ; AVX: vpsrad $24 diff --git a/test/CodeGen/X86/avx-trunc.ll b/test/CodeGen/X86/avx-trunc.ll index d007736..58d0a35 100644 --- a/test/CodeGen/X86/avx-trunc.ll +++ b/test/CodeGen/X86/avx-trunc.ll @@ -12,4 +12,9 @@ define <8 x i16> @trunc_32_16(<8 x i32> %A) nounwind uwtable readnone ssp{ %B = trunc <8 x i32> %A to <8 x i16> ret <8 x i16>%B } - +define <16 x i8> @trunc_16_8(<16 x i16> %A) nounwind uwtable readnone ssp{ +; CHECK-LABEL: trunc_16_8 +; CHECK: pshufb + %B = trunc <16 x i16> %A to <16 x i8> + ret <16 x i8> %B +} diff --git a/test/CodeGen/X86/avx2-conversions.ll b/test/CodeGen/X86/avx2-conversions.ll index 0143f18..f49718e 100644 --- a/test/CodeGen/X86/avx2-conversions.ll +++ b/test/CodeGen/X86/avx2-conversions.ll @@ -72,6 +72,25 @@ define <16 x i16> @zext_16i8_16i16(<16 x i8> %z) { ret <16 x i16> %t } +; CHECK-LABEL: sext_16i8_16i16: +; CHECK: vpmovsxbw +; CHECK-NOT: vinsert +; CHECK: ret +define <16 x i16> @sext_16i8_16i16(<16 x i8> %z) { + %t = sext <16 x i8> %z to <16 x i16> + ret <16 x i16> %t +} + +; CHECK-LABEL: trunc_16i16_16i8: +; CHECK: vpshufb +; CHECK: vpshufb +; CHECK: vpor +; CHECK: ret +define <16 x i8> @trunc_16i16_16i8(<16 x i16> %z) { + %t = trunc <16 x i16> %z to <16 x i8> + ret <16 x i8> %t +} + ; CHECK: load_sext_test1 ; CHECK: vpmovsxdq (%r{{[^,]*}}), %ymm{{.*}} ; CHECK: ret diff --git a/test/CodeGen/X86/pmovsx-inreg.ll b/test/CodeGen/X86/pmovsx-inreg.ll index d30d7d0..07979f6 100644 --- a/test/CodeGen/X86/pmovsx-inreg.ll +++ b/test/CodeGen/X86/pmovsx-inreg.ll @@ -86,8 +86,7 @@ define void @test6(<16 x i8>* %in, <16 x i16>* %out) nounwind { ret void ; AVX2-LABEL: test6: -; FIXME: v16i8 -> v16i16 is scalarized. -; AVX2-NOT: pmovsx +; AVX2: vpmovsxbw } define void @test7(<2 x i16>* %in, <2 x i64>* %out) nounwind { |