[llvm] s390x: pattern match saturated truncation (PR #155377)

Ulrich Weigand via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 26 02:16:31 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)>;
+
+  def : Pat<
+    (v8i16 (z_pack
+      (smin (smax (v4i32 VR128:$a), replicate_i32_min), replicate_i32_max),
+      (smin (smax (v4i32 VR128:$b), replicate_i32_min), replicate_i32_max)
----------------
uweigand wrote:

We should probably match either a (smin (smax ... or a (smax (smin( ...

https://github.com/llvm/llvm-project/pull/155377


More information about the llvm-commits mailing list