s390.c (s390_chunkify_pool): Do not confuse insn UIDs with insn addresses.
authorUlrich Weigand <uweigand@de.ibm.com>
Wed, 27 Feb 2002 20:20:54 +0000 (20:20 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Wed, 27 Feb 2002 20:20:54 +0000 (20:20 +0000)
* config/s390/s390.c (s390_chunkify_pool): Do not confuse
insn UIDs with insn addresses.

From-SVN: r50112

gcc/ChangeLog
gcc/config/s390/s390.c

index e7abb1659a3bca771642822c3ddf8519f460c352..7722a6d333240ff214c91578439c18fc5ae7262c 100644 (file)
@@ -1,3 +1,8 @@
+2002-02-27  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * config/s390/s390.c (s390_chunkify_pool): Do not confuse
+       insn UIDs with insn addresses.
+
 2002-02-27  Zack Weinberg  <zack@codesourcery.com>
 
        * c-common.c, c-common.h, c-decl.c, c-lex.c, c-parse.in,
index dcccb00b92006def1e47120dcd36eeff95b5d73e..38c6f59b11f70841c89d01e07e8c47f0bdaf872d 100644 (file)
@@ -2459,7 +2459,7 @@ s390_split_branches (void)
 static void 
 s390_chunkify_pool (void)
 {
-  int *ltorg_uids, max_ltorg, chunk, last_addr;
+  int *ltorg_uids, max_ltorg, chunk, last_addr, next_addr;
   rtx insn;
 
   /* Do we need to chunkify the literal pool?  */
@@ -2498,12 +2498,15 @@ s390_chunkify_pool (void)
        }
     }
 
-  ltorg_uids[max_ltorg] = insn_current_address + 1;
+  ltorg_uids[max_ltorg] = -1;
 
   /* Find and mark all labels that are branched into 
      from an insn belonging to a different chunk.  */
 
   chunk = last_addr = 0;
+  next_addr = ltorg_uids[chunk] == -1 ? insn_current_address + 1
+             : INSN_ADDRESSES (ltorg_uids[chunk]);
+
   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
     {
       if (GET_CODE (insn) == JUMP_INSN) 
@@ -2528,8 +2531,8 @@ s390_chunkify_pool (void)
              if (label)
                {
                  if (INSN_ADDRESSES (INSN_UID (label)) <= last_addr
-                     || INSN_ADDRESSES (INSN_UID (label)) > ltorg_uids[chunk])
-                   SYMBOL_REF_USED (label) = 1;
+                     || INSN_ADDRESSES (INSN_UID (label)) > next_addr)
+                   SYMBOL_REF_USED (label) = 1;
                }
             } 
           else if (GET_CODE (pat) == ADDR_VEC
@@ -2542,7 +2545,7 @@ s390_chunkify_pool (void)
                  rtx label = XEXP (XVECEXP (pat, diff_p, i), 0);
 
                  if (INSN_ADDRESSES (INSN_UID (label)) <= last_addr
-                     || INSN_ADDRESSES (INSN_UID (label)) > ltorg_uids[chunk])
+                     || INSN_ADDRESSES (INSN_UID (label)) > next_addr)
                    SYMBOL_REF_USED (label) = 1;
                }
             }
@@ -2550,7 +2553,9 @@ s390_chunkify_pool (void)
 
       if (INSN_UID (insn) == ltorg_uids[chunk]) 
         {
-         last_addr = ltorg_uids[chunk++];
+         last_addr = INSN_ADDRESSES (ltorg_uids[chunk++]);
+         next_addr = ltorg_uids[chunk] == -1 ? insn_current_address + 1
+                     : INSN_ADDRESSES (ltorg_uids[chunk]);
         }
     }