diff options
Diffstat (limited to 'gcc/df-problems.cc')
-rw-r--r-- | gcc/df-problems.cc | 8 |
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); } } |