On Thu, Nov 26, 2020 at 2:55 PM Martin Liška <mli...@suse.cz> wrote: > > On 11/25/20 2:48 PM, Richard Biener wrote: > > On Mon, Nov 23, 2020 at 2:02 PM Martin Liška <mli...@suse.cz> wrote: > >> > >> On 11/23/20 12:00 PM, Richard Biener wrote: > >>> Can you split out the unifying of -[gf]record-gcc-switches processing > >>> and the target hook adjustment from the change introducing > >>> -frecord-gcc-switches-format? > >> > >> Sure. > >> > >>> > >>> dwarf2out.c seems to retain its gen_producer_string () even though > >>> you duplicate it elsewhere and it is now unused? Please retain > >>> the gen_producer_string name since the function does actual > >>> processing and not just fetch a precomputed string from somewhere. > >> > >> Yep, please take a look at the attached patch. > >> > >>> > >>> I'd like somebody else chime in on the -frecord-gcc-switches-format > >>> driver handling but will happily work with getting the unification part > >>> merged. > >> > >> May I apply the patch after it finishes regression tests and bootstrap? > > > > @@ -1523,8 +1378,9 @@ process_options (void) > > if (version_flag) > > { > > print_version (stderr, "", true); > > - if (! quiet_flag) > > - print_switch_values (print_to_stderr); > > + if (!quiet_flag) > > + fputs (gen_producer_string (lang_hooks.name, save_decoded_options, > > + save_decoded_options_count), stderr); > > } > > > > > > so I wonder whether this regresses (no newlines anymore, no separate > > printing of options passed/enabled). Previously with -Q -v you'll get sth > > like > > > > options passed: -v > > -iprefix > > /home/rguenther/obj-gcc2-g/gcc/../lib64/gcc/x86_64-pc-linux-gnu/11.0.0/ > > -isystem ./include -isystem ./include-fixed t.c -mtune=generic > > -march=x86-64 -O2 > > options enabled: -faggressive-loop-optimizations -falign-functions > > -falign-jumps -falign-labels -falign-loops -fallocation-dce > > -fasynchronous-unwind-tables -fauto-inc-dec -fbranch-count-reg > > -fcaller-saves -fcode-hoisting -fcombine-stack-adjustments -fcompare-elim > > -fcprop-registers -fcrossjumping -fcse-follow-jumps -fdefer-pop > > -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively > > -fdwarf2-cfi-asm -fearly-inlining -feliminate-unused-debug-symbols > > ... > > Oh, you are right that there's a significant change (I fixed the newline): > > BEFORE: > GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 > options passed: -v a.c -mtune=generic -march=x86-64 > options enabled: -faggressive-loop-optimizations -fallocation-dce > -fasynchronous-unwind-tables -fauto-inc-dec -fdelete-null-pointer-checks > -fdwarf2-cfi-asm -fearly-inlining -feliminate-unused-debug-symbols > -feliminate-unused-debug-types -ffp-int-builtin-inexact -ffunction-cse > -fgcse-lm -fgnu-unique -fident -finline-atomics -fipa-stack-alignment > -fira-hoist-pressure -fira-share-save-slots -fira-share-spill-slots > -fivopts -fkeep-static-consts -fleading-underscore -flifetime-dse > -fmath-errno -fmerge-debug-strings -fpeephole -fplt -fprefetch-loop-arrays > -freg-struct-return -fsched-critical-path-heuristic > -fsched-dep-count-heuristic -fsched-group-heuristic -fsched-interblock > -fsched-last-insn-heuristic -fsched-rank-heuristic -fsched-spec > -fsched-spec-insn-heuristic -fsched-stalled-insns-dep -fschedule-fusion > -fsemantic-interposition -fshow-column -fshrink-wrap-separate > -fsigned-zeros -fsplit-ivs-in-unroller -fssa-backprop -fstdarg-opt > -fstrict-volatile-bitfields -fsync-libcalls -ftrapping-math -ftree-cselim > -ftree-forwprop -ftree-loop-if-convert -ftree-loop-im -ftree-loop-ivcanon > -ftree-loop-optimize -ftree-parallelize-loops= -ftree-phiprop > -ftree-reassoc -ftree-scev-cprop -funit-at-a-time -funwind-tables > -fvar-tracking -fvar-tracking-assignments -fzero-initialized-in-bss > -m128bit-long-double -m64 -m80387 -malign-stringops > -mavx256-split-unaligned-load -mavx256-split-unaligned-store > -mfancy-math-387 -mfp-ret-in-387 -mfxsr -mglibc -mieee-fp -mlong-double-80 > -mmmx -mno-sse4 -mpush-args -mred-zone -msse -msse2 -mstv > -mtls-direct-seg-refs -mvzeroupper > Compiler executable checksum: 00000000000000000000000000000000 > > AFTER: > GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 > GNU C17 11.0.0 20201123 (experimental) -dumpbase-ext .c -mtune=generic > -march=x86-64 > Compiler executable checksum: 36558a9ca3607b6821d78562377c56da > > For -fverbose-asm we get something similar: > > BEFORE: > # GNU C17 (SUSE Linux) version 10.2.1 20201117 [revision > 98ba03ffe0b9f37b4916ce6238fad754e00d720b] (x86_64-suse-linux) > # compiled by GNU C version 10.2.1 20201117 [revision > 98ba03ffe0b9f37b4916ce6238fad754e00d720b], GMP version 6.2.0, MPFR version > 4.1.0, MPC version 1.2.1, isl version isl-0.22.1-GMP > > # GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 > # options passed: a.c -mtune=generic -march=x86-64 -auxbase-strip before.s > # -fverbose-asm > # options enabled: -faggressive-loop-optimizations -fallocation-dce > # -fasynchronous-unwind-tables -fauto-inc-dec -fdelete-null-pointer-checks > # -fdwarf2-cfi-asm -fearly-inlining -feliminate-unused-debug-symbols > # -feliminate-unused-debug-types -ffp-int-builtin-inexact -ffunction-cse > > AFTER: > # GNU C17 (GCC) version 11.0.0 20201123 (experimental) (x86_64-pc-linux-gnu) > # compiled by GNU C version 10.2.1 20201117 [revision > 98ba03ffe0b9f37b4916ce6238fad754e00d720b], GMP version 6.2.0, MPFR version > 4.1.0, MPC version 1.2.1, isl version none > # GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 > # GNU C17 11.0.0 20201123 (experimental) -dumpbase-ext .c -mtune=generic > -march=x86-64
I don't think it's important to preserve the 'options enabled' part since the actual options printed should allow to reproduce it. But what's clearly inferior is that the options are no longer separated from the version string and the 'options passed:' is missing. Can we somehow preserve this by making the helper produce separate strings for the 'GNU C17 11.0 ...' part and the options passed part? So the -fverbose-asm and -Q consumer can continue to nicely print the option part? > > > > but after the change it will most definitely _not_ include all the -f > > options > > implied by -O2? So how does a standard -O2 -fverbose-asm compare? > > How does -Q -v compare? How does the producer string in dwarf > > compare (I guess that's actually equal since we now use that reporting > > style). > > Yes, dwarf output is the same: > > BEFORE: > <c> DW_AT_producer : (indirect string, offset: 0x0): GNU C17 11.0.0 > 20201123 (experimental) -dumpbase-ext .c -mtune=generic -march=x86-64 -g > > AFTER: > <c> DW_AT_producer : (indirect string, offset: 0x0): GNU C17 10.2.1 > 20201117 [revision 98ba03ffe0b9f37b4916ce6238fad754e00d720b] -mtune=generic > -march=x86-64 -g > > So the question is: do we really need to preserve the "options enabled" > report? It's far from being complete > as it e.g. ignores enum options like: > > -fsched-stalled-insns-dep=<number> > -fsched-stalled-insns=<number> > -fsimd-cost-model=[unlimited|dynamic|cheap|very-cheap] unlimited > -fstack-check=[no|generic|specific] > -fstack-reuse=[all|named_vars|none] all > ... > > Well, gcc -Q -help=optimize <options_used> seems a better hint for me. > > Thoughts? > Thanks, > Martin > > > > > Thanks, > > Richard. > > > >> Thanks, > >> Martin > >> > >>> > >>> Richard. > >> >