You are applying PATTERN to an INSN_LIST.
diff --git a/gcc/ext-dce.cc b/gcc/ext-dce.cc
index 52032b50951..4523654538c 100644
--- a/gcc/ext-dce.cc
+++ b/gcc/ext-dce.cc
@@ -122,10 +122,9 @@ safe_for_live_propagation (rtx_code code)
    optimziation phase during use handling will be.  */
 
 static void
-ext_dce_process_sets (rtx insn, bitmap livenow, bitmap live_tmp)
+ext_dce_process_sets (rtx insn, rtx pat, bitmap livenow, bitmap live_tmp)
 {
   subrtx_iterator::array_type array;
-  rtx pat = PATTERN (insn);
   FOR_EACH_SUBRTX (iter, array, pat, NONCONST)
     {
       const_rtx x = *iter;
@@ -377,7 +376,7 @@ binop_implies_op2_fully_live (rtx_code code)
    eliminated in CHANGED_PSEUDOS.  */
 
 static void
-ext_dce_process_uses (rtx insn, bitmap livenow, bitmap live_tmp,
+ext_dce_process_uses (rtx insn, rtx pat, bitmap livenow, bitmap live_tmp,
                      bool modify, bitmap changed_pseudos)
 {
   /* A nonlocal goto implicitly uses the frame pointer.  */
@@ -389,7 +388,6 @@ ext_dce_process_uses (rtx insn, bitmap livenow, bitmap 
live_tmp,
     }
 
   subrtx_var_iterator::array_type array_var;
-  rtx pat = PATTERN (insn);
   FOR_EACH_SUBRTX_VAR (iter, array_var, pat, NONCONST)
     {
       /* An EXPR_LIST (from call fusage) ends in NULL_RTX.  */
@@ -640,15 +638,16 @@ ext_dce_process_bb (basic_block bb, bitmap livenow,
       bitmap live_tmp = BITMAP_ALLOC (NULL);
 
       /* First process any sets/clobbers in INSN.  */
-      ext_dce_process_sets (insn, livenow, live_tmp);
+      ext_dce_process_sets (insn, PATTERN (insn), livenow, live_tmp);
 
       /* CALL_INSNs need processing their fusage data.  */
       if (GET_CODE (insn) == CALL_INSN)
-       ext_dce_process_sets (CALL_INSN_FUNCTION_USAGE (insn),
+       ext_dce_process_sets (insn, CALL_INSN_FUNCTION_USAGE (insn),
                              livenow, live_tmp);
 
       /* And now uses, optimizing away SIGN/ZERO extensions as we go.  */
-      ext_dce_process_uses (insn, livenow, live_tmp, modify, changed_pseudos);
+      ext_dce_process_uses (insn, PATTERN (insn), livenow, live_tmp, modify,
+                           changed_pseudos);
 
       /* And process fusage data for the use as well.  */
       if (GET_CODE (insn) == CALL_INSN)
@@ -663,7 +662,7 @@ ext_dce_process_bb (basic_block bb, bitmap livenow,
              if (global_regs[i])
                bitmap_set_range (livenow, i * 4, 4);
 
-         ext_dce_process_uses (CALL_INSN_FUNCTION_USAGE (insn),
+         ext_dce_process_uses (insn, CALL_INSN_FUNCTION_USAGE (insn),
                                livenow, live_tmp, modify, changed_pseudos);
        }
 

Reply via email to