This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
The attached patch reworks discriminator assignment so that it
attaches the discriminator to the source location of each instruction
instead of to the basic block itself. I had hoped not to have to do it
this way, but we've found that we're losing too much discriminator
information when basic blocks get combined and resplit in later
optimization passes, and the loss of accuracy in the sample profiling
is hurting the performance. This approach turned out not to be as hard
as I originally thought it would be: When I need to assign a
discrimator, I allocate a new location_t value larger than any
assigned by libcpp, and keep two vectors that map each new location_t
value to its original libcpp-assigned value and to the discriminator
value itself.
I'm not looking to put this into mainline during Stage 3, since the
problem it solves is only for sample-based profiling, but I would like
to get this reviewed anyway. If it looks generally OK, I'll hold it in
the dwarf4 branch until the next Stage 1.
-cary
* basic-block.h (struct basic_block_def): Remove discriminator field.
* cfghooks.c (split_block): Remove discriminator field.
* cfglayout.c (insn_discriminator): New function.
* final.c (discriminator): Remove.
(override_discriminator): New file-scope variable.
(final_start_function): Remove tracking of discriminator by basic
block.
(final_scan_insn): Track discriminator by instruction.
(notice_source_line): Check for discriminator override. Get
discriminator from instruction.
* gimple-pretty-print.c (dump_gimple_stmt): Print discriminator.
(dump_bb_header): Don't print discriminator.
* print-rtl.c (print_rtx): Print discriminator.
* rtl.h (insn_discriminator): New function.
* tree.h (min_discriminator_location): New global.
(map_discriminator_location): New function.
(get_discriminator_from_locus): New function.
* tree.c (expand_location): Use map_discriminator_location.
* tree-cfg.c: Include vecprim.h.
(discriminator_location_locations): New variable.
(discriminator_location_discriminators): New variable.
(min_discriminator_location): New variable.
(location_with_discriminator): New function.
(has_discriminator): New function.
(map_discriminator_location): New function.
(get_discriminator_from_locus): New function.
(assign_discriminator): Assign discriminators to instructions rather
than to the basic block.
* tree-pretty-print.c (dump_location): Print discriminator.
Attachment:
gcc-discrim-patch-8.txt
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |