re PR debug/49676 (inefficiency: DW_AT_GNU_call_site_value calculates everything...
authorJakub Jelinek <jakub@redhat.com>
Mon, 11 Jul 2011 16:57:25 +0000 (18:57 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 11 Jul 2011 16:57:25 +0000 (18:57 +0200)
commit96ae7458c01e0a23c71b7809a850493a89f3ebe3
tree755f987ded70868d77d0a6f6d647ab846363e287
parent932ebb945fca9b847e2a8db42eb868191a1a56a9
re PR debug/49676 (inefficiency: DW_AT_GNU_call_site_value calculates everything << 32)

PR debug/49676
* dwarf2out.c (int_shift_loc_descriptor): New function.
(int_loc_descriptor): If shorter, emit i as
(i >> shift), shift, DW_OP_shl for suitable shift value.
Similarly, try to optimize large negative values using
DW_OP_neg of a positive value if shorter.
(size_of_int_shift_loc_descriptor): New function.
(size_of_int_loc_descriptor): Adjust to match int_loc_descriptor
changes.
(mem_loc_descriptor) <case CONST_INT>: Emit zero-extended constants
that fit into DWARF2_ADDR_SIZE bytes as int_loc_descriptor +
DW_OP_GNU_convert instead of DW_OP_GNU_const_type if the former
is shorter.
(resolve_addr_in_expr): Optimize DW_OP_plus_uconst with a large
addend as added DW_OP_plus if it is shorter.

* gcc.dg/guality/csttest.c: New test.

From-SVN: r176167
gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/guality/csttest.c [new file with mode: 0644]