diff options
author | Richard Biener <rguenther@suse.de> | 2023-04-26 13:05:44 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-04-27 12:29:47 +0200 |
commit | d89e23f27215fcd822994fb2fad17fcd31eef5e1 (patch) | |
tree | 9199ec4407f196f335187f222338531c8df56874 /gcc/value-range.h | |
parent | 481281ccf41aa2bc596e548edaad4e57833f3340 (diff) | |
download | gcc-d89e23f27215fcd822994fb2fad17fcd31eef5e1.zip gcc-d89e23f27215fcd822994fb2fad17fcd31eef5e1.tar.gz gcc-d89e23f27215fcd822994fb2fad17fcd31eef5e1.tar.bz2 |
ipa/109607 - properly gimplify conversions introduced by IPA param manipulation
The following addresses IPA param manipulation (through IPA SRA)
replacing
BIT_FIELD_REF <*this_8(D), 8, 56>
with
BIT_FIELD_REF <VIEW_CONVERT_EXPR<const struct profile_count>(ISRA.814), 8, 56>
which is supposed to be invalid GIMPLE (ISRA.814 is a register).
There's currently insufficient checking in place to catch this in the
IL verifier but I am working on that as part of fixing PR109594.
The solution for the particular testcase I am running into this is
to split the conversion to a separate stmt. Generally the modification
phase is set up for this but the extra_stmts sequence isn't passed
around everywhere. The following passes it to modify_expression
from modify_assignment when rewriting the RHS.
PR ipa/109607
* ipa-param-manipulation.h
(ipa_param_body_adjustments::modify_expression): Add extra_stmts
argument.
* ipa-param-manipulation.cc
(ipa_param_body_adjustments::modify_expression): Likewise.
When we need a conversion and the replacement is a register
split the conversion out.
(ipa_param_body_adjustments::modify_assignment): Pass
extra_stmts to RHS modify_expression.
* g++.dg/torture/pr109607.C: New testcase.
Diffstat (limited to 'gcc/value-range.h')
0 files changed, 0 insertions, 0 deletions