diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Analysis/CostModel/X86/cast.ll | 8 | ||||
-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 |
5 files changed, 44 insertions, 4 deletions
diff --git a/test/Analysis/CostModel/X86/cast.ll b/test/Analysis/CostModel/X86/cast.ll index b69b3bf..f3c1283 100644 --- a/test/Analysis/CostModel/X86/cast.ll +++ b/test/Analysis/CostModel/X86/cast.ll @@ -38,6 +38,10 @@ define i32 @zext_sext(<8 x i1> %in) { ;CHECK: cost of 9 {{.*}} sext %S = sext <8 x i1> %in to <8 x i32> + ;CHECK: cost of 1 {{.*}} zext + %A1 = zext <16 x i8> undef to <16 x i16> + ;CHECK: cost of 1 {{.*}} sext + %A2 = sext <16 x i8> undef to <16 x i16> ;CHECK: cost of 1 {{.*}} sext %A = sext <8 x i16> undef to <8 x i32> ;CHECK: cost of 1 {{.*}} zext @@ -51,11 +55,13 @@ define i32 @zext_sext(<8 x i1> %in) { ;CHECK: cost of 1 {{.*}} zext %D = zext <4 x i32> undef to <4 x i64> - ;CHECK: cost of 1 {{.*}} trunc + ;CHECK: cost of 1 {{.*}} trunc %E = trunc <4 x i64> undef to <4 x i32> ;CHECK: cost of 1 {{.*}} trunc %F = trunc <8 x i32> undef to <8 x i16> + ;CHECK: cost of 2 {{.*}} trunc + %F1 = trunc <16 x i16> undef to <16 x i8> ;CHECK: cost of 3 {{.*}} trunc %G = trunc <8 x i64> undef to <8 x i32> 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 { |