diff options
Diffstat (limited to 'test/CodeGen/X86/avx512-trunc-ext.ll')
-rw-r--r-- | test/CodeGen/X86/avx512-trunc-ext.ll | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/test/CodeGen/X86/avx512-trunc-ext.ll b/test/CodeGen/X86/avx512-trunc-ext.ll index 31db68c..5e097be 100644 --- a/test/CodeGen/X86/avx512-trunc-ext.ll +++ b/test/CodeGen/X86/avx512-trunc-ext.ll @@ -18,7 +18,7 @@ define <8 x i16> @trunc_8x64_to_8x16(<8 x i64> %i) nounwind readnone { ; CHECK-LABEL: zext_16x8_to_16x32 -; CHECK; vpmovzxbd {{.*}}%zmm +; CHECK: vpmovzxbd {{.*}}%zmm ; CHECK: ret define <16 x i32> @zext_16x8_to_16x32(<16 x i8> %i) nounwind readnone { %x = zext <16 x i8> %i to <16 x i32> @@ -26,7 +26,7 @@ define <16 x i32> @zext_16x8_to_16x32(<16 x i8> %i) nounwind readnone { } ; CHECK-LABEL: sext_16x8_to_16x32 -; CHECK; vpmovsxbd {{.*}}%zmm +; CHECK: vpmovsxbd {{.*}}%zmm ; CHECK: ret define <16 x i32> @sext_16x8_to_16x32(<16 x i8> %i) nounwind readnone { %x = sext <16 x i8> %i to <16 x i32> @@ -35,7 +35,7 @@ define <16 x i32> @sext_16x8_to_16x32(<16 x i8> %i) nounwind readnone { ; CHECK-LABEL: zext_16x16_to_16x32 -; CHECK; vpmovzxwd {{.*}}%zmm +; CHECK: vpmovzxwd {{.*}}%zmm ; CHECK: ret define <16 x i32> @zext_16x16_to_16x32(<16 x i16> %i) nounwind readnone { %x = zext <16 x i16> %i to <16 x i32> @@ -43,7 +43,7 @@ define <16 x i32> @zext_16x16_to_16x32(<16 x i16> %i) nounwind readnone { } ; CHECK-LABEL: zext_8x16_to_8x64 -; CHECK; vpmovzxwq +; CHECK: vpmovzxwq ; CHECK: ret define <8 x i64> @zext_8x16_to_8x64(<8 x i16> %i) nounwind readnone { %x = zext <8 x i16> %i to <8 x i64> @@ -116,7 +116,7 @@ define i8 @trunc_8i16_to_8i1(<8 x i16> %a) { ret i8 %mask } -; CHECK: sext_8i1_8i32 +; CHECK-LABEL: sext_8i1_8i32 ; CHECK: vpbroadcastq LCP{{.*}}(%rip), %zmm0 {%k1} {z} ; CHECK: ret define <8 x i32> @sext_8i1_8i32(<8 x i32> %a1, <8 x i32> %a2) nounwind { @@ -125,3 +125,24 @@ define <8 x i32> @sext_8i1_8i32(<8 x i32> %a1, <8 x i32> %a2) nounwind { %y = sext <8 x i1> %x1 to <8 x i32> ret <8 x i32> %y } + +; CHECK-LABEL: trunc_v16i32_to_v16i16 +; CHECK: vpmovdw +; CHECK: ret +define <16 x i16> @trunc_v16i32_to_v16i16(<16 x i32> %x) { + %1 = trunc <16 x i32> %x to <16 x i16> + ret <16 x i16> %1 +} + +; CHECK-LABEL: trunc_i32_to_i1 +; CHECK: andl +; CHECK: kmov +; CHECK: kortest +; CKECK: orl +; CHECK: ret +define i16 @trunc_i32_to_i1(i32 %a) { + %a_i = trunc i32 %a to i1 + %maskv = insertelement <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i1 %a_i, i32 0 + %res = bitcast <16 x i1> %maskv to i16 + ret i16 %res +} |