[llvm] bece0d7 - [GlobalIsel] Update MIR gallery (#107903)

via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 10 00:04:58 PDT 2024


Author: Thorsten Schütt
Date: 2024-09-10T09:04:54+02:00
New Revision: bece0d7517bd0a036dc8a319514e4a8a5c497dee

URL: https://github.com/llvm/llvm-project/commit/bece0d7517bd0a036dc8a319514e4a8a5c497dee
DIFF: https://github.com/llvm/llvm-project/commit/bece0d7517bd0a036dc8a319514e4a8a5c497dee.diff

LOG: [GlobalIsel] Update MIR gallery (#107903)

add more patterns
clarify wip_match_opcode usage

Added: 
    

Modified: 
    llvm/docs/GlobalISel/MIRPatterns.rst

Removed: 
    


################################################################################
diff  --git a/llvm/docs/GlobalISel/MIRPatterns.rst b/llvm/docs/GlobalISel/MIRPatterns.rst
index 654a60730bb9c5..42ceb1883f7de3 100644
--- a/llvm/docs/GlobalISel/MIRPatterns.rst
+++ b/llvm/docs/GlobalISel/MIRPatterns.rst
@@ -601,7 +601,7 @@ Gallery
 =======
 
 We should use precise patterns that state our intentions. Please avoid
-using wip_match_opcode in patterns.
+using wip_match_opcode in patterns. It can lead to imprecise patterns.
 
 .. code-block:: text
   :caption: Example fold zext(trunc:nuw)
@@ -630,3 +630,20 @@ using wip_match_opcode in patterns.
            (G_ZEXT $root, $src),
     [{ return Helper.matchZextOfTrunc(${root}, ${matchinfo}); }]),
     (apply [{ Helper.applyBuildFnMO(${root}, ${matchinfo}); }])>;
+
+
+  // Precise: lists all combine combinations
+  class ext_of_ext_opcodes<Instruction ext1Opcode, Instruction ext2Opcode> : GICombineRule <
+    (defs root:$root, build_fn_matchinfo:$matchinfo),
+    (match (ext2Opcode $second, $src):$Second,
+           (ext1Opcode $root, $second):$First,
+           [{ return Helper.matchExtOfExt(*${First}, *${Second}, ${matchinfo}); }]),
+    (apply [{ Helper.applyBuildFn(*${First}, ${matchinfo}); }])>;
+
+  def zext_of_zext : ext_of_ext_opcodes<G_ZEXT, G_ZEXT>;
+  def zext_of_anyext : ext_of_ext_opcodes<G_ZEXT, G_ANYEXT>;
+  def sext_of_sext : ext_of_ext_opcodes<G_SEXT, G_SEXT>;
+  def sext_of_anyext : ext_of_ext_opcodes<G_SEXT, G_ANYEXT>;
+  def anyext_of_anyext : ext_of_ext_opcodes<G_ANYEXT, G_ANYEXT>;
+  def anyext_of_zext : ext_of_ext_opcodes<G_ANYEXT, G_ZEXT>;
+  def anyext_of_sext : ext_of_ext_opcodes<G_ANYEXT, G_SEXT>;


        


More information about the llvm-commits mailing list