Avoid setting TREE_ADDRESSABLE on stack vars during RTL expansion
authorRichard Biener <rguenther@suse.de>
Mon, 17 May 2021 14:35:38 +0000 (16:35 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 18 May 2021 11:55:37 +0000 (13:55 +0200)
commitd3a0208e433dc5aed7ef8deab8d74b6da55e1985
tree2e65420ea3648c9aa6d0a5c0f7623792d5eb3fe4
parentb5c3145ad9ac04654d4947d34d1e9dc5c26f4c53
Avoid setting TREE_ADDRESSABLE on stack vars during RTL expansion

This avoids setting TREE_ADDRESSABLE on variables we want to force to
the stack.  Instead track those in a temporary bitmap and force
stack expansion that way, leaving TREE_ADDRESSABLE alone, not
pessimizing future alias queries.

2021-05-17  Richard Biener  <rguenther@suse.de>

* cfgexpand.c (expand_one_var): Pass in forced_stack_var
and honor it when expanding.
(expand_used_vars_for_block): Pass through forced_stack_var.
(expand_used_vars): Likewise.
(discover_nonconstant_array_refs_r): Set bits in
forced_stack_vars instead of marking vars TREE_ADDRESSABLE.
(avoid_type_punning_on_regs): Likewise.
(discover_nonconstant_array_refs): Likewise.
(pass_expand::execute): Create and pass down forced_stack_var
bitmap.  For parameters and returns temporarily set
TREE_ADDRESSABLE when expand_function_start.
gcc/cfgexpand.c