diff options
author | Richard Biener <rguenther@suse.de> | 2023-04-27 11:20:49 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-04-27 13:16:48 +0200 |
commit | 0403d2957929fa12bbd379e3839a8d0c2160576f (patch) | |
tree | 292cd7569bd557e4fd42de2e157a4e1ffadd5284 /gcc/tree-ssa-phiopt.cc | |
parent | d89e23f27215fcd822994fb2fad17fcd31eef5e1 (diff) | |
download | gcc-0403d2957929fa12bbd379e3839a8d0c2160576f.zip gcc-0403d2957929fa12bbd379e3839a8d0c2160576f.tar.gz gcc-0403d2957929fa12bbd379e3839a8d0c2160576f.tar.bz2 |
Properly gimplify handled component chains on registers
When for example complex lowering wants to extract the imaginary
part of a complex variable for lowering a complex move we can
end up with it generating __imag <VIEW_CONVERT_EXPR <_22> > which
is valid GENERIC. It then feeds that to the gimplifier via
force_gimple_operand but that fails to split up this chain
of handled components, generating invalid GIMPLE catched by
verification when PR109644 is fixed.
The following rectifies this by noting in gimplify_compound_lval
when the base object which we gimplify first ends up being a
register.
* gimplify.cc (gimplify_compound_lval): When the base
gimplified to a register make sure to split up chains
of operations.
Diffstat (limited to 'gcc/tree-ssa-phiopt.cc')
0 files changed, 0 insertions, 0 deletions