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