[llvm] s390x: pattern match saturated truncation (PR #155377)
Ulrich Weigand via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 26 02:16:30 PDT 2025
================
@@ -399,21 +399,28 @@ let Predicates = [FeatureVector] in {
// Widening and narrowing
//===----------------------------------------------------------------------===//
-let Predicates = [FeatureVector] in {
- // Pack
- def VPK : BinaryVRRcGeneric<"vpk", 0xE794>;
- def VPKH : BinaryVRRc<"vpkh", 0xE794, z_pack, v128b, v128h, 1>;
- def VPKF : BinaryVRRc<"vpkf", 0xE794, z_pack, v128h, v128f, 2>;
- def VPKG : BinaryVRRc<"vpkg", 0xE794, z_pack, v128f, v128g, 3>;
+def replicate_i32_min : PatFrag<(ops), (v4i32 (build_vector (i32 -32768), (i32 -32768), (i32 -32768), (i32 -32768)))>;
+def replicate_i32_max : PatFrag<(ops), (v4i32 (build_vector (i32 32768), (i32 32768), (i32 32768), (i32 32768)))>;
+let Predicates = [FeatureVector] in {
// Pack saturate.
def VPKS : BinaryVRRbSPairGeneric<"vpks", 0xE797>;
- defm VPKSH : BinaryVRRbSPair<"vpksh", 0xE797, int_s390_vpksh, z_packs_cc,
- v128b, v128h, 1>;
- defm VPKSF : BinaryVRRbSPair<"vpksf", 0xE797, int_s390_vpksf, z_packs_cc,
- v128h, v128f, 2>;
- defm VPKSG : BinaryVRRbSPair<"vpksg", 0xE797, int_s390_vpksg, z_packs_cc,
- v128f, v128g, 3>;
+
+ def VPKSH : BinaryVRRb<"vpksh", 0xE797, int_s390_vpksh, v128b, v128h, 1, !and (0, 14)>;
+ def VPKSF : BinaryVRRb<"vpksf", 0xE797, int_s390_vpksf, v128h, v128f, 2, !and (0, 14)>;
+ def VPKSG : BinaryVRRb<"vpksg", 0xE797, int_s390_vpksg, v128f, v128g, 3, !and (0, 14)>;
----------------
uweigand wrote:
I don't see why we need to pull the `BinaryVRRbSPair` apart?
https://github.com/llvm/llvm-project/pull/155377
More information about the llvm-commits
mailing list