start_sequence_for_rtl_expr, not start_sequence.
* expr.c (expand_expr, case RTL_EXPR): Don't call
preserve_rtl_expr_result or free_temps_for_rtl_expr.
- (assign_stack_temp_for_type): Don't set rtl_expr.
+ * function.c (assign_stack_temp_for_type): Don't set rtl_expr.
(preserve_rtl_expr_result): Remove.
(free_temps_for_rtl_expr): Likewise.
(pop_temp_slots): Likewise.
rounded_size));
p->align = best_p->align;
p->address = 0;
- p->rtl_expr = 0;
p->next = temp_slots;
temp_slots = p;
p->in_use = 1;
p->addr_taken = 0;
- p->rtl_expr = seq_rtl_expr;
if (keep == 2)
{
p->level--;
}
-/* X is the result of an RTL_EXPR. If it is a temporary slot associated
- with that RTL_EXPR, promote it into a temporary slot at the present
- level so it will not be freed when we free slots made in the
- RTL_EXPR. */
-
-void
-preserve_rtl_expr_result (x)
- rtx x;
-{
- struct temp_slot *p;
-
- /* If X is not in memory or is at a constant address, it cannot be in
- a temporary slot. */
- if (x == 0 || GET_CODE (x) != MEM || CONSTANT_P (XEXP (x, 0)))
- return;
-
- /* If we can find a match, move it to our level unless it is already at
- an upper level. */
- p = find_temp_slot_from_address (XEXP (x, 0));
- if (p != 0)
- {
- p->level = MIN (p->level, temp_slot_level);
- p->rtl_expr = 0;
- }
-
- return;
-}
-
/* Free all temporaries used so far. This is normally called at the end
of generating code for a statement. Don't free any temporaries
currently in use for an RTL_EXPR that hasn't yet been emitted.
struct temp_slot *p;
for (p = temp_slots; p; p = p->next)
- if (p->in_use && p->level == temp_slot_level && ! p->keep
- && p->rtl_expr == 0)
- p->in_use = 0;
-
- combine_temp_slots ();
-}
-
-/* Free all temporary slots used in T, an RTL_EXPR node. */
-
-void
-free_temps_for_rtl_expr (t)
- tree t;
-{
- struct temp_slot *p;
-
- for (p = temp_slots; p; p = p->next)
- if (p->rtl_expr == t)
+ if (p->in_use && p->level == temp_slot_level && ! p->keep)
p->in_use = 0;
combine_temp_slots ();
struct temp_slot *p;
for (p = temp_slots; p; p = p->next)
- if (p->in_use && p->level == temp_slot_level && p->rtl_expr == 0)
+ if (p->in_use && p->level == temp_slot_level)
p->in_use = 0;
combine_temp_slots ();
{
ggc_mark_rtx (t->slot);
ggc_mark_rtx (t->address);
- ggc_mark_tree (t->rtl_expr);
-
t = t->next;
}
}