OSDN Git Service

* function.c (purge_addressof_1): Postpone insn in fewer cases.
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Apr 2003 10:03:35 +0000 (10:03 +0000)
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Apr 2003 10:03:35 +0000 (10:03 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66286 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/function.c

index a5604c1..c453b20 100644 (file)
@@ -1,3 +1,7 @@
+2003-04-30  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+
+       * function.c (purge_addressof_1): Postpone insn in fewer cases.
+
 2003-04-29  Geoffrey Keating  <geoffk@apple.com>
 
        * config/rs6000/host-darwin.c (segv_handler): When -dH is used,
index c5c0d03..6e52d7e 100644 (file)
@@ -3075,13 +3075,6 @@ purge_addressof_1 (loc, insn, force, store, may_postpone, ht)
     {
       rtx sub = XEXP (XEXP (x, 0), 0);
 
-      if (may_postpone)
-       {
-         if (!postponed_insns || XEXP (postponed_insns, 0) != insn)
-           postponed_insns = alloc_INSN_LIST (insn, postponed_insns);
-         return true;
-       }
-
       if (GET_CODE (sub) == MEM)
        sub = adjust_address_nv (sub, GET_MODE (x), 0);
       else if (GET_CODE (sub) == REG
@@ -3091,6 +3084,15 @@ purge_addressof_1 (loc, insn, force, store, may_postpone, ht)
        {
          int size_x, size_sub;
 
+         if (may_postpone)
+           {
+             /* Postpone for now, so that we do not emit bitfield arithmetics
+                unless there is some benefit from it.  */
+             if (!postponed_insns || XEXP (postponed_insns, 0) != insn)
+               postponed_insns = alloc_INSN_LIST (insn, postponed_insns);
+             return true;
+           }
+
          if (!insn)
            {
              /* When processing REG_NOTES look at the list of