|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| 2 | +; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512vl | FileCheck %s |
| 3 | + |
| 4 | +declare <16 x i32> @llvm.experimental.vector.compress.v16i32(<16 x i32>, <16 x i1>, <16 x i32>) |
| 5 | + |
| 6 | +define <16 x i32> @test_compress_freeze_elimination(<16 x i32> %a0, <16 x i32> %a1, <16 x i8> %a3) { |
| 7 | +; CHECK-LABEL: test_compress_freeze_elimination: |
| 8 | +; CHECK: # %bb.0: |
| 9 | +; CHECK-NEXT: vpcmpgtd %zmm1, %zmm0, %k1 |
| 10 | +; CHECK-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero |
| 11 | +; CHECK-NEXT: vpbroadcastd {{.*#+}} zmm0 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] |
| 12 | +; CHECK-NEXT: vpcompressd %zmm1, %zmm0 {%k1} |
| 13 | +; CHECK-NEXT: retq |
| 14 | + %cmp = icmp sgt <16 x i32> %a0, %a1 |
| 15 | + %ext = zext <16 x i8> %a3 to <16 x i32> |
| 16 | + %cpr = call <16 x i32> @llvm.experimental.vector.compress.v16i32(<16 x i32> %ext, <16 x i1> %cmp, <16 x i32> splat(i32 15)) |
| 17 | + %fr = freeze <16 x i32> %cpr |
| 18 | + %and = and <16 x i32> %fr, splat(i32 255) |
| 19 | + ret <16 x i32> %and |
| 20 | +} |
| 21 | + |
| 22 | +define <16 x i32> @test_compress_freeze(<16 x i32> %a0, <16 x i32> %a1, <16 x i8> %a3) { |
| 23 | +; CHECK-LABEL: test_compress_freeze: |
| 24 | +; CHECK: # %bb.0: |
| 25 | +; CHECK-NEXT: vpcmpgtd %zmm1, %zmm0, %k1 |
| 26 | +; CHECK-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero |
| 27 | +; CHECK-NEXT: vpcompressd %zmm0, %zmm0 {%k1} |
| 28 | +; CHECK-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0 |
| 29 | +; CHECK-NEXT: retq |
| 30 | + %cmp = icmp sgt <16 x i32> %a0, %a1 |
| 31 | + %ext = zext <16 x i8> %a3 to <16 x i32> |
| 32 | + %cpr = call <16 x i32> @llvm.experimental.vector.compress.v16i32(<16 x i32> %ext, <16 x i1> %cmp, <16 x i32> poison) |
| 33 | + %fr = freeze <16 x i32> %cpr |
| 34 | + %and = and <16 x i32> %fr, splat(i32 255) |
| 35 | + ret <16 x i32> %and |
| 36 | +} |
0 commit comments