Hi,
Enclosed is my c program ( a inner product program).
I use -O3 to activate the PREOPT_LNO_PHASE, but the OPT_FEEDBACK
generated in the Pre_Optimizer() is a little strange. Essentially, it is
the LOOP related edges (LOOP_ZERO, LOOP_OUT, LOOP_POSITIVE,LOOPBACK). To
me, it is not a classic CFG either. Two edges from bb9 to bb13(LOOP_ZERO,
LOOP_OUT) and two edges from bb9 to bb10(LOOP_POSITIVE,LOOPBACK). and the
whole CFG has not a single EXIT block. Is this CFG valid? check the end of
this message for details.
The OPT_FEEDBACK generated in WOPT phase is a better one. but at
that time, I cannot identify the backedges in the CFG directly (i.e. using
previous analysis results, I had thought an edge should be marked as
backedge, But the OPT_FB_EDGE->edge_type only holds OUTGOING,BR_NOT_TAKEN
and BR_TAKEN). This makes the traversing of the CFG difficult for avoiding
the backedge infinite loops.
13 nodes: Node[1]: in_out_same N, update_count 0
in: unknown 0, unexact 0, freq_total 0!, edges [ ],
out: unknown 0, unexact 0, freq_total 1!, edges [ 1 ] Node[2]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1!, edges [ 1 ],
out: unknown 0, unexact 0, freq_total 1!, edges [ 2 3 ] Node[3]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 0!, edges [ 2 ],
out: unknown 0, unexact 0, freq_total 0!, edges [ 4 ] Node[4]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1!, edges [ 3 ],
out: unknown 0, unexact 0, freq_total 1!, edges [ 5 ] Node[5]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1!, edges [ 4 5 ],
out: unknown 0, unexact 0, freq_total 1!, edges [ 6 7 ] Node[6]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 0!, edges [ 6 ],
out: unknown 0, unexact 0, freq_total 0!, edges [ 8 ] Node[7]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1!, edges [ 7 ],
out: unknown 0, unexact 0, freq_total 1!, edges [ 9 ] Node[8]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1!, edges [ 8 9 ],
out: unknown 0, unexact 0, freq_total 1!, edges [ 10 ] Node[9]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1001!, edges [ 10 17 ],
out: unknown 0, unexact 0, freq_total 1001!, edges [ 11 12 13 14 ]
Node[10]: in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1000!, edges [ 13 14 ],
out: unknown 0, unexact 0, freq_total 1000!, edges [ 15 ] Node[11]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1000!, edges [ 15 ],
out: unknown 0, unexact 0, freq_total 1000!, edges [ 16 ] Node[12]:
in_out_same Y, update_count 0
in: unknown 0, unexact 0, freq_total 1000!, edges [ 16 ],
out: unknown 0, unexact 0, freq_total 1000!, edges [ 17 ] Node[13]:
in_out_same N, update_count 0
in: unknown 0, unexact 0, freq_total 1!, edges [ 11 12 ],
out: unknown 0, unexact 0, freq_total 0!, edges [ ]
17 edges:
Edge[ 1]: ( 1 --> 2) : freq = 1! : OUTGOING
Edge[ 2]: ( 2 --> 3) : freq = 0! : BRANCH_NOT_TAKEN
Edge[ 3]: ( 2 --> 4) : freq = 1! : BRANCH_TAKEN
Edge[ 4]: ( 3 --> 5) : freq = 0! : OUTGOING
Edge[ 5]: ( 4 --> 5) : freq = 1! :OUTGOING
Edge[ 6]: ( 5 --> 6) : freq = 0! : BRANCH_NOT_TAKEN
Edge[ 7]: ( 5 --> 7) : freq = 1! : BRANCH_TAKEN
Edge[ 8]: ( 6 --> 8) : freq = 0! :OUTGOING
Edge[ 9]: ( 7 --> 8) : freq = 1! : OUTGOING
Edge[ 10]: ( 8 -->9) : freq = 1! : OUTGOING
Edge[ 11]: ( 9 --> 13) : freq = 0! : LOOP_ZERO
Edge[ 12]: ( 9 --> 13) : freq = 1! : LOOP_OUT
Edge[ 13]: ( 9 --> 10) : freq = 1! : LOOP_POSITIVE
Edge[ 14]: ( 9 --> 10) : freq = 999! :LOOP_BACK
Edge[ 15]: ( 10 --> 11) : freq = 1000! : OUTGOING
Edge[ 16]: ( 11 --> 12) : freq = 1000! : OUTGOING
Edge[ 17]: ( 12 --> 9) : freq =1000! : OUTGOING
ip.c
Description: Text document
|