On 11/02/2017 08:06 PM, Jan Hubicka wrote:
Sorry, I must have used older diff file, because it is one of unfinished chnages I made today. I am attaching correct diff.
Thank you. This one works for me, however I see various errors for postgres PGO: cd src/backend/replication/ marxin@marxinbox:~/Programming/postgres/src/backend/replication> gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fprofile-use -I. -I. -I../../../src/include -D_GNU_SOURCE -c -o walsender.o walsender.c In file included from walsender.c:56:0: walsender.c: In function ‘XLogRead’: ../../../src/include/access/xlog_internal.h:188:26: error: corrupted value profile: interval profile counter (0 out of 0) inconsistent with basic-block count (7531) (uint32) ((logSegNo) % XLogSegmentsPerXLogId(wal_segsz_bytes))) ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ walsender.c:2367:4: note: in expansion of macro ‘XLogFilePath’ XLogFilePath(path, curFileTimeLine, sendSegNo, wal_segment_size); ^~~~~~~~~~~~ Problem is following: Here we estimate count: Old value = -1 New value = 7531 0x0000000000aecb52 in estimate_bb_frequencies (force=force@entry=false) at ../../gcc/predict.c:3590 3590 bb->count = count.guessed_local (); (gdb) bt #0 0x0000000000aecb52 in estimate_bb_frequencies (force=force@entry=false) at ../../gcc/predict.c:3590 #1 0x0000000000af05a4 in tree_estimate_probability (dry_run=dry_run@entry=false) at ../../gcc/predict.c:2828 #2 0x0000000000af0b9c in (anonymous namespace)::pass_profile::execute (this=<optimized out>, fun=0x7ffff5b9e790) at ../../gcc/predict.c:3722 #3 0x0000000000ad23f1 in execute_one_pass (pass=pass@entry=0x210faf0) at ../../gcc/passes.c:2497 #4 0x0000000000ad2cb1 in execute_pass_list_1 (pass=0x210faf0) at ../../gcc/passes.c:2586 #5 0x0000000000ad2cc3 in execute_pass_list_1 (pass=0x210f470) at ../../gcc/passes.c:2587 #6 0x0000000000ad2d05 in execute_pass_list (fn=<optimized out>, pass=<optimized out>) at ../../gcc/passes.c:2597 #7 0x0000000000ad1631 in do_per_function_toporder (callback=callback@entry=0xad2cf0 <execute_pass_list(function*, opt_pass*)>, data=0x210f2f0) at ../../gcc/passes.c:1739 #8 0x0000000000ad3387 in execute_ipa_pass_list (pass=0x210f290) at ../../gcc/passes.c:2937 #9 0x000000000078fb42 in ipa_passes () at ../../gcc/cgraphunit.c:2423 #10 symbol_table::compile (this=this@entry=0x7ffff6817100) at ../../gcc/cgraphunit.c:2558 #11 0x00000000007923c7 in symbol_table::compile (this=0x7ffff6817100) at ../../gcc/cgraphunit.c:2719 #12 symbol_table::finalize_compilation_unit (this=0x7ffff6817100) at ../../gcc/cgraphunit.c:2716 #13 0x0000000000bb20d3 in compile_file () at ../../gcc/toplev.c:479 #14 0x00000000005d7fc5 in do_compile () at ../../gcc/toplev.c:2059 #15 toplev::main (this=this@entry=0x7fffffffd85e, argc=<optimized out>, argc@entry=38, argv=<optimized out>, argv@entry=0x7fffffffd958) at ../../gcc/toplev.c:2194 #16 0x00000000005da46b in main (argc=38, argv=0x7fffffffd958) at ../../gcc/main.c:39 And later on we check it with real value of an interval counter: Breakpoint 1, error_at (loc=2147497451, gmsgid=0x1605208 "corrupted value profile: %s profile counter (%d out of %d) inconsistent with basic-block count (%d)") at ../../gcc/diagnostic.c:1354 1354 { (gdb) bt #0 error_at (loc=2147497451, gmsgid=0x1605208 "corrupted value profile: %s profile counter (%d out of %d) inconsistent with basic-block count (%d)") at ../../gcc/diagnostic.c:1354 #1 0x0000000000eae5b9 in check_counter (stmt=0x7ffff58359f8, name=0x16052fc "interval", count=0x7fffffffd5a8, all=0x7fffffffd5c0, bb_count_d=...) at ../../gcc/value-prof.c:607 #2 0x0000000000eafe95 in gimple_mod_subtract_transform (si=0x7fffffffd640) at ../../gcc/value-prof.c:1133 #3 0x0000000000eae709 in gimple_value_profile_transformations () at ../../gcc/value-prof.c:658 #4 0x0000000000ca712c in tree_profiling () at ../../gcc/tree-profile.c:687 #5 (anonymous namespace)::pass_ipa_tree_profile::execute (this=<optimized out>) at ../../gcc/tree-profile.c:780 #6 0x0000000000ad23f1 in execute_one_pass (pass=pass@entry=0x2110350) at ../../gcc/passes.c:2497 #7 0x0000000000ad33f2 in execute_ipa_pass_list (pass=0x2110350) at ../../gcc/passes.c:2932 #8 0x000000000078fb42 in ipa_passes () at ../../gcc/cgraphunit.c:2423 #9 symbol_table::compile (this=this@entry=0x7ffff6817100) at ../../gcc/cgraphunit.c:2558 #10 0x00000000007923c7 in symbol_table::compile (this=0x7ffff6817100) at ../../gcc/cgraphunit.c:2719 #11 symbol_table::finalize_compilation_unit (this=0x7ffff6817100) at ../../gcc/cgraphunit.c:2716 #12 0x0000000000bb20d3 in compile_file () at ../../gcc/toplev.c:479 #13 0x00000000005d7fc5 in do_compile () at ../../gcc/toplev.c:2059 #14 toplev::main (this=this@entry=0x7fffffffd85e, argc=<optimized out>, argc@entry=38, argv=<optimized out>, argv@entry=0x7fffffffd958) at ../../gcc/toplev.c:2194 #15 0x00000000005da46b in main (argc=38, argv=0x7fffffffd958) at ../../gcc/main.c:39 Can you please take a look? Or will you need a reproducer? Thank you, Martin