phiopt: Fix VCE moving by rewriting it into cast [PR116098]
Phiopt match_and_simplify might move a well defined VCE assign statement from being conditional to being uncondtitional; that VCE might no longer being defined. It will need a rewrite into a cast instead. This adds the rewriting code to move_stmt for the VCE case. This is enough to fix the issue at hand. It should also be using rewrite_to_defined_overflow but first I need to move the check to see a rewrite is needed into its own function and that is causing issues (see https://gcc.gnu.org/pipermail/gcc-patches/2024-September/663938.html ). Plus this version is easiest to backport. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/116098 gcc/ChangeLog: * tree-ssa-phiopt.cc (move_stmt): Rewrite VCEs from integer to integer types to case. gcc/testsuite/ChangeLog: * c-c++-common/torture/pr116098-2.c: New test. * g++.dg/torture/pr116098-1.C: New test. Signed-off-by:Andrew Pinski <quic_apinski@quicinc.com>
Showing
- gcc/testsuite/c-c++-common/torture/pr116098-2.c 46 additions, 0 deletionsgcc/testsuite/c-c++-common/torture/pr116098-2.c
- gcc/testsuite/g++.dg/torture/pr116098-1.C 33 additions, 0 deletionsgcc/testsuite/g++.dg/torture/pr116098-1.C
- gcc/tree-ssa-phiopt.cc 27 additions, 1 deletiongcc/tree-ssa-phiopt.cc
Loading
Please register or sign in to comment