[gcc r16-5607] phiprop: Make sure types of the load match the inserted phi [PR122847]
Andrew Pinski
pinskia@gcc.gnu.org
Wed Nov 26 02:34:55 GMT 2025
https://gcc.gnu.org/g:e75a9e33b97cfdcc76b6bfea3e7ca6184be5d5c0
commit r16-5607-ge75a9e33b97cfdcc76b6bfea3e7ca6184be5d5c0
Author: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
Date: Tue Nov 25 14:19:18 2025 -0800
phiprop: Make sure types of the load match the inserted phi [PR122847]
This was introduced with r16-5556-ge94e91d6f3775, but the type
check for the delay was not happen because the type at the point
of delaying was set to NULL. It is only until a non-delayed load
when the phi is created, the type is set.
This adds the type check to the replacement for the delayed statements.
Pushed as obvious.
PR tree-optimization/122847
gcc/ChangeLog:
* tree-ssa-phiprop.cc (propagate_with_phi): Add type
check for reuse of the phi for the delayed statements.
gcc/testsuite/ChangeLog:
* gcc.dg/torture/pr122847-1.c: New test.
Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
Diff:
---
gcc/testsuite/gcc.dg/torture/pr122847-1.c | 17 +++++++++++++++++
gcc/tree-ssa-phiprop.cc | 3 +++
2 files changed, 20 insertions(+)
diff --git a/gcc/testsuite/gcc.dg/torture/pr122847-1.c b/gcc/testsuite/gcc.dg/torture/pr122847-1.c
new file mode 100644
index 000000000000..9ec4360e329c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr122847-1.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* PR tree-optimization/122847 */
+
+struct {
+ char x[6];
+} *a, b;
+
+int c;
+
+int d() {
+ /* `a->x` might trap. */
+ char *p = a ? a->x : b.x;
+ char e = *p;
+ if (c)
+ return *(short *)p & e;
+ return 0;
+}
diff --git a/gcc/tree-ssa-phiprop.cc b/gcc/tree-ssa-phiprop.cc
index d24613d58938..04aa138f521c 100644
--- a/gcc/tree-ssa-phiprop.cc
+++ b/gcc/tree-ssa-phiprop.cc
@@ -506,6 +506,9 @@ next:;
if (phi_inserted)
for (auto use_stmt : delayed_uses)
{
+ /* The types must match of the inserted phi. */
+ if (!types_compatible_p (type, TREE_TYPE (gimple_assign_lhs (use_stmt))))
+ continue;
gimple_assign_set_rhs1 (use_stmt, res);
update_stmt (use_stmt);
}
More information about the Gcc-cvs
mailing list