Commit 40f0b3ee by Paul Brook Committed by Paul Brook

* dwarf2out.c (mem_loc_descriptor): Handle shifts.

From-SVN: r81252
parent f0e6f845
2004-04-28 Paul Brook <paul@codesourcery.com>
* dwarf2out.c (mem_loc_descriptor): Handle shifts.
2004-04-28 Ulrich Weigand <uweigand@de.ibm.com> 2004-04-28 Ulrich Weigand <uweigand@de.ibm.com>
* gcse.c (find_moveable_store): Do not accept store insns with * gcse.c (find_moveable_store): Do not accept store insns with
......
...@@ -8435,6 +8435,7 @@ static dw_loc_descr_ref ...@@ -8435,6 +8435,7 @@ static dw_loc_descr_ref
mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg) mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
{ {
dw_loc_descr_ref mem_loc_result = NULL; dw_loc_descr_ref mem_loc_result = NULL;
enum dwarf_location_atom op;
/* Note that for a dynamically sized array, the location we will generate a /* Note that for a dynamically sized array, the location we will generate a
description of here will be the lowest numbered location which is description of here will be the lowest numbered location which is
...@@ -8576,10 +8577,26 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg) ...@@ -8576,10 +8577,26 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
} }
break; break;
/* If a pseudo-reg is optimized away, it is possible for it to
be replaced with a MEM containing a multiply or shift. */
case MULT: case MULT:
op = DW_OP_mul;
goto do_binop;
case ASHIFT:
op = DW_OP_shl;
goto do_binop;
case ASHIFTRT:
op = DW_OP_shra;
goto do_binop;
case LSHIFTRT:
op = DW_OP_shr;
goto do_binop;
do_binop:
{ {
/* If a pseudo-reg is optimized away, it is possible for it to
be replaced with a MEM containing a multiply. */
dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
can_use_fbreg); can_use_fbreg);
dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
...@@ -8590,7 +8607,7 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg) ...@@ -8590,7 +8607,7 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
mem_loc_result = op0; mem_loc_result = op0;
add_loc_descr (&mem_loc_result, op1); add_loc_descr (&mem_loc_result, op1);
add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0)); add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment