aboutsummaryrefslogtreecommitdiff
path: root/gcc/df-problems.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/df-problems.cc')
-rw-r--r--gcc/df-problems.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/df-problems.cc b/gcc/df-problems.cc
index f32185b..9075379 100644
--- a/gcc/df-problems.cc
+++ b/gcc/df-problems.cc
@@ -3893,9 +3893,11 @@ df_simulate_defs (rtx_insn *insn, bitmap live)
{
unsigned int dregno = DF_REF_REGNO (def);
- /* If the def is to only part of the reg, it does
- not kill the other defs that reach here. */
- if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
+ /* If the def is to only part of the reg, model it as a RMW operation
+ by marking it live. It only kills the reg if it is a complete def. */
+ if (DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL))
+ bitmap_set_bit (live, dregno);
+ else
bitmap_clear_bit (live, dregno);
}
}