]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm.md (movsi): Don't split symbol refs here.
authorJulian Brown <julian@codesourcery.com>
Tue, 10 Jul 2012 13:15:26 +0000 (13:15 +0000)
committerAlexander Monakov <amonakov@gcc.gnu.org>
Tue, 10 Jul 2012 13:15:26 +0000 (17:15 +0400)
2012-07-10  Julian Brown  <julian@codesourcery.com>

* config/arm/arm.md (movsi): Don't split symbol refs here.
(define_split): New.

From-SVN: r189411

gcc/ChangeLog
gcc/config/arm/arm.md

index c5ebfd5222f1e894c61f437d0f6b45e5294602bd..ddf70e1be30329118f003d719ea6beb876d2cccc 100644 (file)
@@ -1,3 +1,8 @@
+2012-07-10  Julian Brown  <julian@codesourcery.com>
+
+       * config/arm/arm.md (movsi): Don't split symbol refs here.
+       (define_split): New.
+
 2012-07-10  Andreas Schwab  <schwab@linux-m68k.org>
 
        PR bootstrap/53913
index db404e79453707519ef28448a03afb152b1234cf..888838261b65b5378899d9f954113cb62ca68766 100644 (file)
                               optimize && can_create_pseudo_p ());
           DONE;
         }
-
-      if (TARGET_USE_MOVT && !target_word_relocations
-         && GET_CODE (operands[1]) == SYMBOL_REF
-         && !flag_pic && !arm_tls_referenced_p (operands[1]))
-       {
-         arm_emit_movpair (operands[0], operands[1]);
-         DONE;
-       }
     }
   else /* TARGET_THUMB1...  */
     {
   "
 )
 
+;; Split symbol_refs at the later stage (after cprop), instead of generating
+;; movt/movw pair directly at expand.  Otherwise corresponding high_sum
+;; and lo_sum would be merged back into memory load at cprop.  However,
+;; if the default is to prefer movt/movw rather than a load from the constant
+;; pool, the performance is better.
+(define_split
+  [(set (match_operand:SI 0 "arm_general_register_operand" "")
+       (match_operand:SI 1 "general_operand" ""))]
+  "TARGET_32BIT
+   && TARGET_USE_MOVT && GET_CODE (operands[1]) == SYMBOL_REF
+   && !flag_pic && !target_word_relocations
+   && !arm_tls_referenced_p (operands[1])"
+  [(clobber (const_int 0))]
+{
+  arm_emit_movpair (operands[0], operands[1]);
+  DONE;
+})
+
 (define_insn "*thumb1_movsi_insn"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=l,l,l,l,l,>,l, m,*l*h*k")
        (match_operand:SI 1 "general_operand"      "l, I,J,K,>,l,mi,l,*l*h*k"))]