How to migrate struct rtl_opt_pass to class for GCC v6.x?
Leslie Zhai
lesliezhai@llvm.org.cn
Fri Aug 4 02:29:00 GMT 2017
Hi David,
Thanks for your kind response!
å¨ 2017å¹´08æ03æ¥ 21:54, David Malcolm åé:
> On Thu, 2017-08-03 at 17:21 +0800, Leslie Zhai wrote:
>> /opt/gcc-6.3/bin/gcc -fplugin=./dragonegg.so test/hello.c -wrapper
>> gdb,--args
>> GNU gdb (GDB) Fedora 7.12.1-48.fc25
>> ...
>> Reading symbols from
>> /opt/gcc-6.3/libexec/gcc/x86_64-redhat-linux-gnu/6.3.0/cc1...done.
>> (gdb) b /data/project/xiangzhai/gcc-6.3.0/gcc/passes.c:2288
>> Breakpoint 1 at 0x91b8d4: file ../../gcc/passes.c, line 2288.
>> (gdb) r
>> Starting program:
>> /opt/gcc-6.3/libexec/gcc/x86_64-redhat-linux-gnu/6.3.0/cc1 -quiet
>> -iplugindir=/opt/gcc-6.3/lib/gcc/x86_64-redhat-linux-
>> gnu/6.3.0/plugin
>> test/hello.c
>> -iplugindir=/opt/gcc-6.3/lib/gcc/x86_64-redhat-linux-
>> gnu/6.3.0/plugin
>> -quiet -dumpbase hello.c -mtune=generic -march=x86-64 -auxbase hello
>> -fplugin=./dragonegg.so -o /tmp/cco7mKtB.s
>> ...
>>
>> Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c7b730) at
>> ../../gcc/passes.c:2288
>> warning: Source file is more recent than executable.
> This warning is somewhat unnerving; have you updated the source code
> for the compiler since you last recompiled it?
The warning disappeared after recompiled GCC v6.3
>
>> 2288 current_pass = pass;
>>
>> (gdb) p pass
>> $1 = (opt_pass *) 0x1c7b730
>> (gdb) p current_pass
>> $2 = (opt_pass *) 0x0
>> (gdb) n
>> 2292 gate_status = pass->gate (cfun);
>> (gdb) p current_pass
>> $3 = (opt_pass *) 0x1c7b730
>> (gdb) p gate_status
>> $4 = false
>> (gdb) n
>> 2293 gate_status = override_gate_status (pass,
>> current_function_decl, gate_status);
>> (gdb) p gate_status
>> $5 = false
>> (gdb) n
>> 2292 gate_status = pass->gate (cfun);
>> (gdb) p gate_status
>> $6 = false
>> (gdb) n
>> 2293 gate_status = override_gate_status (pass,
>> current_function_decl, gate_status);
>> (gdb) n
>> 2296 invoke_plugin_callbacks (PLUGIN_OVERRIDE_GATE,
>> &gate_status);
>> (gdb) p gate_status
>> $7 = true
>> (gdb) n
>> 2293 gate_status = override_gate_status (pass,
>> current_function_decl, gate_status);
>> (gdb) n
>> 2296 invoke_plugin_callbacks (PLUGIN_OVERRIDE_GATE,
>> &gate_status);
>> (gdb) n
>> 2298 if (!gate_status)
>> (gdb) p gate_status
>> $8 = true
>> (gdb) n
>> ...
>> (gdb) n
>> 2336 todo_after = pass->execute (cfun); <--- gcc called execute
>> hook?
> Try "step" here rather than "n" for "next"; that way you can see
> exactly what is being called.
>
> I had a hunch that you might be running into the default implementation
> of opt_pass::execute, which is a no-op.
>
> opt_pass::execute used to take "void", but was changed to take a
> "function *" in r209482 (aka 65b0537f9e9741318f7c8e738b6dd3b8f82f58b5)
> on 2014-04-17. If you're using a >= C++11 compiler, you might want to
> try adding "final override" to the execute method of your pass to
> ensure that it's an override of the execute virtual function. We have
> macros "FINAL" and "OVERRIDE" for this in recent versions of gcc.
Add as your suggestion.
https://github.com/xiangzhai/dragonegg/blob/gcc-6_3-branch/src/Backend.cpp#L2110
>
> Is this definitely the correct pass? What does
>
> (gdb) p *pass
>
> print?
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c7b730) at
../../gcc/passes.c:2288
2288 current_pass = pass;
...
(gdb) p pass->name
$1 = 0x11a2369 "*warn_unused_result"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86270) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$2 = 0x1181b98 "*diagnose_omp_blocks"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c862d0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$3 = 0x119d740 "*diagnose_tm_blocks"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86330) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$4 = 0x1181bad "omplower"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86390) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$5 = 0x11be968 "lower"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c863f0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$6 = 0x119d738 "tmlower"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86450) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$7 = 0x11a711e "ehopt"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c864b0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$8 = 0x119b9cf "eh"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86510) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$9 = 0x11972bb "cfg"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86570) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$10 = 0x11a237d "*warn_function_return"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c865d0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$11 = 0x1181bc0 "ompexp"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86630) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$12 = 0x114b9f2 "*build_cgraph_edges"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c7b730) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$13 = 0x11a2369 "*warn_unused_result"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86270) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$14 = 0x1181b98 "*diagnose_omp_blocks"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c862d0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$15 = 0x119d740 "*diagnose_tm_blocks"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86330) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$16 = 0x1181bad "omplower"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86390) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$17 = 0x11be968 "lower"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c863f0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$18 = 0x119d738 "tmlower"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86450) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$19 = 0x11a711e "ehopt"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c864b0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$20 = 0x119b9cf "eh"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86510) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$21 = 0x11972bb "cfg"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86570) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$22 = 0x11a237d "*warn_function_return"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c865d0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$23 = 0x1181bc0 "ompexp"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86630) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$24 = 0x114b9f2 "*build_cgraph_edges"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86690) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$25 = 0x11c48af "*free_lang_data"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c866f0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$26 = 0x1733a04 "visibility"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86750) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$27 = 0x1174ac2 "chkp_versioning"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c867b0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$28 = 0x1174ab4 "chkp_ecleanup"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86810) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$29 = 0x11875e7 "build_ssa_passes"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86870) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$30 = 0x11a235f "fixup_cfg"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c868d0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$31 = 0x11bd439 "*init_datastructures"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86930) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$32 = 0x119be9c "ssa"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86990) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$33 = 0x16bc156 "*nonnullcmp"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c869f0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$34 = 0x119c247 "ubsan"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86a50) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$35 = 0x11bcf84 "*early_warn_uninitialized"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86ab0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$36 = 0x16c2588 "nothrow"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86870) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$37 = 0x11a235f "fixup_cfg"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c868d0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$38 = 0x11bd439 "*init_datastructures"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86930) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$39 = 0x119be9c "ssa"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86990) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$40 = 0x16bc156 "*nonnullcmp"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c869f0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$41 = 0x119c247 "ubsan"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86a50) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$42 = 0x11bcf84 "*early_warn_uninitialized"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86ab0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$43 = 0x16c2588 "nothrow"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86b10) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$44 = 0x11875db "chkp_passes"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86c90) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$45 = 0x11875ca "opt_local_passes"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86cf0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$46 = 0x11a235f "fixup_cfg"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86d50) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$47 = 0x114b9dc "*rebuild_cgraph_edges"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86db0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$48 = 0x11777bd "inline_param"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86e10) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$49 = 0x16c1baa "einline"
...
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86e70) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$51 = 0x11875b6 "early_optimizations"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87550) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$52 = 0x11bda8d "release_ssa"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c875b0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$53 = 0x114b9dc "*rebuild_cgraph_edges"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87610) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$54 = 0x11777bd "inline_param"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86cf0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$55 = 0x11a235f "fixup_cfg"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86d50) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$56 = 0x114b9dc "*rebuild_cgraph_edges"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86db0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$57 = 0x11777bd "inline_param"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86e10) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$58 = 0x16c1baa "einline"
...
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c86e70) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$60 = 0x11875b6 "early_optimizations"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87550) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$61 = 0x11bda8d "release_ssa"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c875b0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$62 = 0x114b9dc "*rebuild_cgraph_edges"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87610) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$63 = 0x11777bd "inline_param"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87670) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$64 = 0x11b67d5 "ipa_oacc"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87b10) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$65 = 0x1174aa7 "chkp_cleanup"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87b70) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$66 = 0x16b5c18 "afdo"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87bd0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$67 = 0x11790ca "free-inline-summary"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87c30) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$68 = 0x119b6d4 "profile"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87cf0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$69 = 0x11c35d3 "increase_alignment"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87d50) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$70 = 0x119d713 "tmipa"
(gdb) c
Continuing.
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c87db0) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
$71 = 0x11a8196 "emutls"
(gdb) c
Continuing.
DEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 2187:
llvm_emit_globals
DEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 791:
InitializeBackend: x86_64-redhat-linux-gnu
DEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 554:
CreateTargetMachine: test/hello.c
^[[ADEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 719:
CreateModule: e-m:e-i64:64-f80:128-n8:16:32:64-S128
DEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 2122:
emit_file_scope_asms
DEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 2147:
emit_cgraph_weakrefs
DEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 2162:
emit_varpool_weakrefs
DEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 687:
output_ident: .ident "GCC: (GNU) 6.3.0 LLVM: 3.9.1"
DEBUG: /data/project/xiangzhai/dragonegg/src/Backend.cpp, line 2280:
llvm_finish_unit
Pass Arguments: -targetlibinfo
Pass Arguments: -assumption-cache-tracker -profile-summary-info
-targetlibinfo -forceattrs -basiccg -always-inline
Execution times (seconds)
phase setup : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (
0%) wall 1071 kB (66%) ggc
phase parsing : 0.01 (50%) usr 0.00 ( 0%) sys 0.01 (
0%) wall 527 kB (33%) ggc
phase opt and generate : 0.01 (50%) usr 0.01 (100%) sys 588.89
(100%) wall 15 kB ( 1%) ggc
phase last asm : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.03 (
0%) wall 0 kB ( 0%) ggc
callgraph construction : 0.00 ( 0%) usr 0.00 ( 0%) sys 84.67
(14%) wall 1 kB ( 0%) ggc
callgraph optimization : 0.00 ( 0%) usr 0.00 ( 0%) sys 503.77
(86%) wall 2 kB ( 0%) ggc
ipa lto gimple out : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (
0%) wall 0 kB ( 0%) ggc
lexical analysis : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (
0%) wall 0 kB ( 0%) ggc
parser (global) : 0.01 (50%) usr 0.00 ( 0%) sys 0.00 (
0%) wall 283 kB (17%) ggc
tree gimplify : 0.00 ( 0%) usr 0.01 (100%) sys 0.00 (
0%) wall 1 kB ( 0%) ggc
plugin execution : 0.01 (50%) usr 0.00 ( 0%) sys 0.47 (
0%) wall 0 kB ( 0%) ggc
TOTAL : 0.02 0.01 588.94
1622 kB
[Inferior 1 (process 26374) exited normally]
(gdb)
so strange: *NO* rtl_emit_function PASS at all!
but gcc plugin testcase has it:
/opt/gcc-6.3/bin/gcc -fplugin=./plugin.so 1.c -wrapper gdb,--args
GNU gdb (GDB) Fedora 7.12.1-48.fc25
...
Reading symbols from
/opt/gcc-6.3/libexec/gcc/x86_64-redhat-linux-gnu/6.3.0/cc1...done.
(gdb) b /data/project/xiangzhai/gcc-6.3.0/gcc/passes.c:2288
Breakpoint 1 at 0x91b8d4: file ../../gcc/passes.c, line 2288.
(gdb) r
Starting program:
/opt/gcc-6.3/libexec/gcc/x86_64-redhat-linux-gnu/6.3.0/cc1 -quiet
-iplugindir=/opt/gcc-6.3/lib/gcc/x86_64-redhat-linux-gnu/6.3.0/plugin
1.c
-iplugindir=/opt/gcc-6.3/lib/gcc/x86_64-redhat-linux-gnu/6.3.0/plugin
-quiet -dumpbase 1.c -mtune=generic -march=x86-64 -auxbase 1
-fplugin=./plugin.so -o /tmp/ccnGZ571.s
...
DEBUG: plugin.cpp, line 64: llvm_start_unit
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c7b730) at
../../gcc/passes.c:2288
2288 current_pass = pass;
Missing separate debuginfos, use: dnf debuginfo-install
gmp-6.1.1-1.fc25.x86_64 libgcc-6.4.1-1.fc25.x86_64
libmpc-1.0.2-5.fc24.x86_64 mpfr-3.1.5-1.fc25.x86_64
(gdb) p pass->name
$1 = 0x11a2369 "*warn_unused_result"
(gdb) c
Continuing.
...
Breakpoint 1, execute_one_pass (pass=pass@entry=0x1c66370) at
../../gcc/passes.c:2288
2288 current_pass = pass;
(gdb) p pass->name
warning: RTTI symbol not found for class 'pass_rtl_emit_function'
$81 = 0x7fffefe5561c "rtl_emit_function"
(gdb) s
2292 gate_status = pass->gate (cfun);
(gdb) s
opt_pass::gate (this=0x1c66370) at ../../gcc/passes.c:95
95 }
(gdb)
I need to deepin to it :)
>
>
> Dave
>
>> (gdb) p todo_after
>> $9 = 0
>> (gdb) n
>> 2338 if (todo_after & TODO_discard_function)
>> (gdb) p todo_after
>> $10 = 0
>> (gdb)
>>
>>
>> 2336 todo_after = pass->execute (cfun); <--- gcc called execute
>> hook? but why not dragonegg
>> https://github.com/xiangzhai/dragonegg/blob/gcc-6_3-branch/src/Backen
>> d.cpp#L2103
>>
>>
>>
>> å¨ 2017å¹´08æ03æ¥ 11:24, Leslie Zhai åé:
>>> Hi GCC developers,
>>>
>>> As ChangeLog-2013 mentioned:
>>>
>>> 2013-08-05 David Malcolm <dmalcolm@redhat.com>
>>>
>>> This is the automated part of the conversion of passes from C
>>> structs to C++ classes.
>>>
>>> ...
>>>
>>> * auto-inc-dec.c (pass_inc_dec): Convert from a global struct
>>> to a
>>> subclass of rtl_opt_pass along with...
>>>
>>>
>>> so I migrate struct rtl_opt_pass:
>>> https://github.com/llvm-mirror/dragonegg/blob/master/src/Backend.cp
>>> p#L1731
>>>
>>>
>>> static struct rtl_opt_pass pass_rtl_emit_function = { {
>>> RTL_PASS, "rtl_emit_function", /* name */
>>> #if (GCC_MINOR > 7)
>>> OPTGROUP_NONE, /* optinfo_flags */
>>> #endif
>>> NULL, /* gate */
>>> rtl_emit_function, /* execute */
>>> NULL, /* sub */
>>> NULL, /* next */
>>> 0, /* static_pass_number */
>>> TV_NONE, /* tv_id */
>>> PROP_ssa | PROP_gimple_leh | PROP_cfg, /* properties_required */
>>> 0, /* properties_provided */
>>> PROP_ssa | PROP_trees, /* properties_destroyed */
>>> TODO_verify_ssa | TODO_verify_flow | TODO_verify_stmts, /*
>>> todo_flags_start */
>>> TODO_ggc_collect /* todo_flags_finish */
>>> } };
>>>
>>>
>>> to GCC v6.x C++ classes' style:
>>> https://github.com/xiangzhai/dragonegg/blob/gcc-6_3-branch/src/Back
>>> end.cpp#L2072
>>>
>>>
>>> const pass_data pass_data_rtl_emit_function = {
>>> RTL_PASS, /* type */
>>> "rtl_emit_function", /* name */
>>> OPTGROUP_NONE, /* optinfo_flags */
>>> TV_NONE, /* tv_id */
>>> PROP_ssa | PROP_gimple_leh | PROP_cfg, /* properties_required */
>>> 0, /* properties_provided */
>>> PROP_ssa | PROP_trees, /* properties_destroyed */
>>> 0, /* todo_flags_start */
>>> 0, /* todo_flags_finish */
>>> };
>>>
>>> class pass_rtl_emit_function : public rtl_opt_pass {
>>> public:
>>> pass_rtl_emit_function(gcc::context *ctxt)
>>> : rtl_opt_pass(pass_data_rtl_emit_function, ctxt) {}
>>>
>>> unsigned int execute(function *) { return rtl_emit_function(); }
>>>
>>> opt_pass *clone() { return this; }
>>> };
>>>
>>>
>>> GCC v4.6 will call the callback `rtl_emit_function`, but GCC v6.x
>>> will
>>> not, did I forget something? is there some options need to be set?
>>> please give me some hint, thanks a lot!
>>>
>>> PS: GCC v6.x *call* the callback `rtl_emit_function`
>>> https://github.com/xiangzhai/dragonball/blob/master/tests/plugin.cp
>>> p#L67
>>> in this testcase, I will check the source code about
>>> register_callback, rtl_opt_pass, and opt_pass.
>>>
>>
--
Regards,
Leslie Zhai - a LLVM developer https://reviews.llvm.org/p/xiangzhai/
More information about the Gcc
mailing list