Added patterns in associate_pointerplus and associate_pointerplus_diff.

* genmatch.c (capture_max): Change value to 6.
      (match-plusminus.pd): Add new patterns.

[gcc/testsuite/gcc.dg/tree-ssa]
  * match-plusminus.c (plusminus_9): New test-case.


Thanks,
Prathamesh
Index: gcc/genmatch.c
===================================================================
--- gcc/genmatch.c	(revision 213574)
+++ gcc/genmatch.c	(working copy)
@@ -412,7 +412,7 @@ struct dt_operand: public dt_node
 struct dt_simplify: public dt_node
 {
   static const unsigned level_max = UINT_MAX;
-  static const unsigned capture_max = 4;
+  static const unsigned capture_max = 6;
   simplify *s; 
   unsigned pattern_no;
   dt_operand *indexes[capture_max]; 
Index: gcc/match-plusminus.pd
===================================================================
--- gcc/match-plusminus.pd	(revision 213574)
+++ gcc/match-plusminus.pd	(working copy)
@@ -106,3 +106,15 @@ along with GCC; see the file COPYING3.
 	 (convert @0))
   (convert @1)) 
 
+/* associate_pointerplus: (ptr p+ off1) p+ off2 -> ptr p+ (off1 + off2) */
+(match_and_simplify
+  (pointer_plus (pointer_plus @0 (convert@1 @2))
+                (convert@3 @4))
+  (pointer_plus @0 (plus @1 @3)))
+
+/* associate_pointerplus_diff: ptr1 p+ (ptr2 - ptr1) -> ptr2 */
+(match_and_simplify
+  (pointer_plus @0
+		(convert (minus (convert @1)
+				(convert @2))))
+  @1)
Index: gcc/testsuite/gcc.dg/tree-ssa/match-plusminus.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/match-plusminus.c	(revision 213574)
+++ gcc/testsuite/gcc.dg/tree-ssa/match-plusminus.c	(working copy)
@@ -73,4 +73,14 @@ int plusminus_8(int x)
 }
 /* { dg-final { scan-tree-dump "gimple_match_and_simplified to plusminus_8_val_\\d\+ = 7 - x_\\d\+\\(D\\)" "forwprop1" } } */
 
+/* ptr1 p+ (ptr2 - ptr1) -> ptr2 */
+unsigned char *
+plusminus_9(unsigned char *ptr1, unsigned char *ptr2)
+{
+  long t1 = ptr2 - ptr1;
+  unsigned char *plusminus_9_val = ptr1 + t1;
+  return plusminus_9_val;
+}
+/* { dg-final { scan-tree-dump "gimple_match_and_simplified to plusminus_9_val_\\d\+ = ptr2" "forwprop1" } } */
+
 /* { dg-final { cleanup-tree-dump "forwprop2" } } */

Reply via email to