This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 1/2] Remove i386 cmpstrnsi peephole


From: Andi Kleen <ak@linux.intel.com>

The peephole that removes the code to compute a tristate for cmpstrnsi
when only a boolean jump is needed never triggers in my tests. Just
remove it.

gcc/:

2014-07-02  Andi Kleen	<ak@linux.intel.com>

	* config/i386/i386.md: Remove peepholes for cmpstrn*.
---
 gcc/config/i386/i386.md | 77 -------------------------------------------------
 1 file changed, 77 deletions(-)

diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 695b981..5f32a24 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -16078,83 +16078,6 @@
 	  (const_string "0")
 	  (const_string "*")))
    (set_attr "prefix_rep" "1")])
-
-;; Peephole optimizations to clean up after cmpstrn*.  This should be
-;; handled in combine, but it is not currently up to the task.
-;; When used for their truth value, the cmpstrn* expanders generate
-;; code like this:
-;;
-;;   repz cmpsb
-;;   seta 	%al
-;;   setb 	%dl
-;;   cmpb 	%al, %dl
-;;   jcc	label
-;;
-;; The intermediate three instructions are unnecessary.
-
-;; This one handles cmpstrn*_nz_1...
-(define_peephole2
-  [(parallel[
-     (set (reg:CC FLAGS_REG)
-	  (compare:CC (mem:BLK (match_operand 4 "register_operand"))
-		      (mem:BLK (match_operand 5 "register_operand"))))
-     (use (match_operand 6 "register_operand"))
-     (use (match_operand:SI 3 "immediate_operand"))
-     (clobber (match_operand 0 "register_operand"))
-     (clobber (match_operand 1 "register_operand"))
-     (clobber (match_operand 2 "register_operand"))])
-   (set (match_operand:QI 7 "register_operand")
-	(gtu:QI (reg:CC FLAGS_REG) (const_int 0)))
-   (set (match_operand:QI 8 "register_operand")
-	(ltu:QI (reg:CC FLAGS_REG) (const_int 0)))
-   (set (reg FLAGS_REG)
-	(compare (match_dup 7) (match_dup 8)))
-  ]
-  "peep2_reg_dead_p (4, operands[7]) && peep2_reg_dead_p (4, operands[8])"
-  [(parallel[
-     (set (reg:CC FLAGS_REG)
-	  (compare:CC (mem:BLK (match_dup 4))
-		      (mem:BLK (match_dup 5))))
-     (use (match_dup 6))
-     (use (match_dup 3))
-     (clobber (match_dup 0))
-     (clobber (match_dup 1))
-     (clobber (match_dup 2))])])
-
-;; ...and this one handles cmpstrn*_1.
-(define_peephole2
-  [(parallel[
-     (set (reg:CC FLAGS_REG)
-	  (if_then_else:CC (ne (match_operand 6 "register_operand")
-			       (const_int 0))
-	    (compare:CC (mem:BLK (match_operand 4 "register_operand"))
-		        (mem:BLK (match_operand 5 "register_operand")))
-	    (const_int 0)))
-     (use (match_operand:SI 3 "immediate_operand"))
-     (use (reg:CC FLAGS_REG))
-     (clobber (match_operand 0 "register_operand"))
-     (clobber (match_operand 1 "register_operand"))
-     (clobber (match_operand 2 "register_operand"))])
-   (set (match_operand:QI 7 "register_operand")
-	(gtu:QI (reg:CC FLAGS_REG) (const_int 0)))
-   (set (match_operand:QI 8 "register_operand")
-	(ltu:QI (reg:CC FLAGS_REG) (const_int 0)))
-   (set (reg FLAGS_REG)
-	(compare (match_dup 7) (match_dup 8)))
-  ]
-  "peep2_reg_dead_p (4, operands[7]) && peep2_reg_dead_p (4, operands[8])"
-  [(parallel[
-     (set (reg:CC FLAGS_REG)
-	  (if_then_else:CC (ne (match_dup 6)
-			       (const_int 0))
-	    (compare:CC (mem:BLK (match_dup 4))
-			(mem:BLK (match_dup 5)))
-	    (const_int 0)))
-     (use (match_dup 3))
-     (use (reg:CC FLAGS_REG))
-     (clobber (match_dup 0))
-     (clobber (match_dup 1))
-     (clobber (match_dup 2))])])
 
 ;; Conditional move instructions.
 
-- 
2.0.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]