From d2751e9ed5e31a902b308114082fe4a53e808564 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 18 May 2005 23:29:45 -0700 Subject: [PATCH] re PR tree-optimization/21541 (gcc.c-torture/execute/20031215-1.c compilation fails) PR 21541 * ifcvt.c (noce_process_if_block): Avoid conversion when the memory destination is readonly. From-SVN: r99951 --- gcc/ChangeLog | 6 ++++++ gcc/ifcvt.c | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fb7cc49a018..10657a44a90 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-05-18 Richard Henderson + + PR 21541 + * ifcvt.c (noce_process_if_block): Avoid conversion when the + memory destination is readonly. + 2005-05-18 Richard Henderson PR 21541 diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 8367316847f..be02aaa7d24 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -1981,6 +1981,14 @@ noce_process_if_block (struct ce_if_block * ce_info) if (side_effects_p (x)) return FALSE; + /* If x is a read-only memory, then the program is valid only if we + avoid the store into it. If there are stores on both the THEN and + ELSE arms, then we can go ahead with the conversion; either the + program is broken, or the condition is always false such that the + other memory is selected. */ + if (!set_b && MEM_P (x) && MEM_READONLY_P (x)) + return FALSE; + b = (set_b ? SET_SRC (set_b) : x); /* Only operate on register destinations, and even then avoid extending