On Fri, Jul 11, 2008 at 5:23 PM, Fern Moon <[EMAIL PROTECTED]> wrote:
> Dear sir,
>
> I write a pass to instrument loops to count runtime number of iterations.
> I insert a variable in each loop by create_tmp_var() and output
> the results by inserting a printf function at the exit edge of loop.
> The code is the attachment.
>
> The problem is that for the loops without switch statement inside, my
> pass works well,
> but for loops with switch statement inside, my final printf can not
> catch the correct
> runtime value of my instrumented variable. In some later pass, the pass will
> remove my variable increasing statement in loops as a dead code. My
> final instrumentation will
> output the initial value only. I attached a simple "hello" world program and
> dump output tree for it after my pass.
>
>
> Thank you for your help.
>
> Fern
>
>
> ====== hello world test program======
> ===============================
> int main(int argc, char * argv[] )
> {
> int i;
>
> for (i=0; i<10; i++) {
>
> printf("Hello World\n");
> switch(i) {
> case 1:
> printf("Hello World 1\n");
> break;
> }
>
>
> }
>
> =========dump tree file of my pass===============
>
> ;; Function main (main)
>
>
> SSA replacement table
> N_i -> { O_1 ... O_j } means that N_i replaces O_1, ..., O_j
>
> looptest1.25_1 -> { looptest1.25_6 }
>
> Number of virtual NEW -> OLD mappings: 0
> Number of real NEW -> OLD mappings: 1
> Number of total NEW -> OLD mappings: 1
>
> Number of virtual symbols: 0
>
>
> Incremental SSA update started at block: 6
>
> Number of blocks in CFG: 9
> Number of blocks to update: 3 ( 33%)
>
>
>
> ssa loop profile
> main (argc, argv)
> {
> int looptest1.25;
> int prephitmp.20;
> int pretmp.19;
> int i;
>
> <bb 2>:
> __builtin_puts (&"Hello World"[0]);
> goto <bb 6>;
>
> <bb 3>:
> __builtin_puts (&"Hello World"[0]);
> switch (i_3)
> {
> case 1: goto <L1>;
> default : goto <L7>;
> }
>
> <L7>:;
> goto <bb 5> (<L6>);
>
> <L1>:;
> __builtin_puts (&"Hello World 1"[0]);
>
> # i_5 = PHI <1(4), i_3(8)>
> <L6>:;
> looptest1.25_6 = looptest1.25_4 + 1;
>
> <bb 6>:
> # looptest1.25_4 = PHI <looptest1.25_6(5), 0(2)>
> # i_7 = PHI <i_5(5), 0(2)>
> i_3 = i_7 + 1;
> if (i_3 <= 9)
> goto <bb 3>;
> else
> goto <bb 7>;
>
> <bb 7>:
> # looptest1.25_1 = PHI <looptest1.25_8(D)(6)>
> printf (&"main loopid: 1 counter: %d\n"[0], looptest1.25_1);
This uses the uninitialized default-definition of looptest1.25, looptest25_4 is
unused and DCEd.
Richard.