Currently gcc will promote from QI/HI mode to SI mode various
operators but not minus. It will however promote a neg followed by an
add (add is in the current list of promotable operators and neg is
promoted around config/i386/i386.md:16904). This omission can cause
RAT stalls in tight loops.

Successfully bootstrapped and checked with x86_64-unknown-linux-gnu.
Could someone please review the change?

Thanks,
Teresa

2011-11-02  Teresa Johnson  <tejohn...@google.com>

        * config/i386/predicates.md (promotable_binary_operator): Add minus
        to the list of promotable operators.


Index: config/i386/predicates.md
===================================================================
--- config/i386/predicates.md   (revision 180696)
+++ config/i386/predicates.md   (working copy)
@@ -1162,7 +1162,7 @@

 ;; Return true if OP is a binary operator that can be promoted to wider mode.
 (define_predicate "promotable_binary_operator"
-  (ior (match_code "plus,and,ior,xor,ashift")
+  (ior (match_code "plus,minus,and,ior,xor,ashift")
        (and (match_code "mult")
            (match_test "TARGET_TUNE_PROMOTE_HIMODE_IMUL"))))



-- 
Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413

Reply via email to