From 6a036316b3ca3ce9c4c6e38d00a113a4f0f146e3 Mon Sep 17 00:00:00 2001 From: David Sherwood Date: Fri, 14 Jul 2023 08:39:13 +0000 Subject: [PATCH] [SVE][CodeGen] Add more test cases for zero-extends of masked loads This patch adds test cases for extending masked loads of illegal unpacked types into illegal wider types. Pre-commits tests for D155281 --- .../AArch64/sve-intrinsics-mask-ldst-ext.ll | 79 +++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/llvm/test/CodeGen/AArch64/sve-intrinsics-mask-ldst-ext.ll b/llvm/test/CodeGen/AArch64/sve-intrinsics-mask-ldst-ext.ll index 46675f8..55bd383 100644 --- a/llvm/test/CodeGen/AArch64/sve-intrinsics-mask-ldst-ext.ll +++ b/llvm/test/CodeGen/AArch64/sve-intrinsics-mask-ldst-ext.ll @@ -21,6 +21,18 @@ define @masked_ld1b_i8_sext_i32( *%base, < ret %res } +define @masked_ld1b_nxv8i8_sext_i32( *%a, %mask) { +; CHECK-LABEL: masked_ld1b_nxv8i8_sext_i32: +; CHECK: // %bb.0: +; CHECK-NEXT: ld1sb { z1.h }, p0/z, [x0] +; CHECK-NEXT: sunpklo z0.s, z1.h +; CHECK-NEXT: sunpkhi z1.s, z1.h +; CHECK-NEXT: ret + %wide.masked.load = call @llvm.masked.load.nxv8i8.p0(ptr %a, i32 1, %mask, poison) + %res = sext %wide.masked.load to + ret %res +} + define @masked_ld1b_i8_zext_i32( *%base, %mask) { ; CHECK-LABEL: masked_ld1b_i8_zext_i32: ; CHECK: // %bb.0: @@ -37,6 +49,19 @@ define @masked_ld1b_i8_zext_i32( *%base, < ret %res } +define @masked_ld1b_nxv8i8_zext_i32( *%a, %mask) { +; CHECK-LABEL: masked_ld1b_nxv8i8_zext_i32: +; CHECK: // %bb.0: +; CHECK-NEXT: ld1b { z0.h }, p0/z, [x0] +; CHECK-NEXT: uunpkhi z1.s, z0.h +; CHECK-NEXT: and z0.h, z0.h, #0xff +; CHECK-NEXT: uunpklo z0.s, z0.h +; CHECK-NEXT: ret + %wide.masked.load = call @llvm.masked.load.nxv8i8.p0(ptr %a, i32 1, %mask, poison) + %res = zext %wide.masked.load to + ret %res +} + define @masked_ld1b_i8_sext( *%base, %mask) { ; CHECK-LABEL: masked_ld1b_i8_sext: ; CHECK: // %bb.0: @@ -61,6 +86,18 @@ define @masked_ld1b_i8_sext( *%base, %res } +define @masked_ld1b_nxv4i8_sext_i64( *%a, %mask) { +; CHECK-LABEL: masked_ld1b_nxv4i8_sext_i64: +; CHECK: // %bb.0: +; CHECK-NEXT: ld1sb { z1.s }, p0/z, [x0] +; CHECK-NEXT: sunpklo z0.d, z1.s +; CHECK-NEXT: sunpkhi z1.d, z1.s +; CHECK-NEXT: ret + %wide.masked.load = call @llvm.masked.load.nxv4i8.p0(ptr %a, i32 1, %mask, poison) + %res = sext %wide.masked.load to + ret %res +} + define @masked_ld1b_i8_zext( *%base, %mask) { ; CHECK-LABEL: masked_ld1b_i8_zext: ; CHECK: // %bb.0: @@ -85,6 +122,19 @@ define @masked_ld1b_i8_zext( *%base, %res } +define @masked_ld1b_nxv4i8_zext_i64( *%a, %mask) { +; CHECK-LABEL: masked_ld1b_nxv4i8_zext_i64: +; CHECK: // %bb.0: +; CHECK-NEXT: ld1b { z0.s }, p0/z, [x0] +; CHECK-NEXT: uunpkhi z1.d, z0.s +; CHECK-NEXT: and z0.s, z0.s, #0xff +; CHECK-NEXT: uunpklo z0.d, z0.s +; CHECK-NEXT: ret + %wide.masked.load = call @llvm.masked.load.nxv4i8.p0(ptr %a, i32 1, %mask, poison) + %res = zext %wide.masked.load to + ret %res +} + ; ; LD1H ; @@ -105,6 +155,18 @@ define @masked_ld1h_i16_sext( *%base, %res } +define @masked_ld1h_nxv4i16_sext( *%a, %mask) { +; CHECK-LABEL: masked_ld1h_nxv4i16_sext: +; CHECK: // %bb.0: +; CHECK-NEXT: ld1sh { z1.s }, p0/z, [x0] +; CHECK-NEXT: sunpklo z0.d, z1.s +; CHECK-NEXT: sunpkhi z1.d, z1.s +; CHECK-NEXT: ret + %wide.masked.load = call @llvm.masked.load.nxv4i16.p0(ptr %a, i32 1, %mask, poison) + %res = sext %wide.masked.load to + ret %res +} + define @masked_ld1h_i16_zext( *%base, %mask) { ; CHECK-LABEL: masked_ld1h_i16_zext: ; CHECK: // %bb.0: @@ -121,6 +183,19 @@ define @masked_ld1h_i16_zext( *%base, %res } +define @masked_ld1h_nxv4i16_zext( *%a, %mask) { +; CHECK-LABEL: masked_ld1h_nxv4i16_zext: +; CHECK: // %bb.0: +; CHECK-NEXT: ld1h { z0.s }, p0/z, [x0] +; CHECK-NEXT: uunpkhi z1.d, z0.s +; CHECK-NEXT: and z0.s, z0.s, #0xffff +; CHECK-NEXT: uunpklo z0.d, z0.s +; CHECK-NEXT: ret + %wide.masked.load = call @llvm.masked.load.nxv4i16.p0(ptr %a, i32 1, %mask, poison) + %res = zext %wide.masked.load to + ret %res +} + ; ; LD1W ; @@ -150,6 +225,8 @@ define @masked_ld1w_i32_zext( *%base, @llvm.masked.load.nxv16i8.p0(*, i32 immarg, , ) +declare @llvm.masked.load.nxv8i8.p0(*, i32 immarg, , ) +declare @llvm.masked.load.nxv4i8.p0(*, i32 immarg, , ) declare @llvm.masked.load.nxv8i16.p0(*, i32 immarg, , ) +declare @llvm.masked.load.nxv4i16.p0(*, i32 immarg, , ) declare @llvm.masked.load.nxv4i32.p0(*, i32 immarg, , ) - -- 2.7.4