This is the mail archive of the gcc@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]

Re: How to migrate struct rtl_opt_pass to class for GCC v6.x?


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/




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]