Random sampling profiling (Was: [LLVMdev] Cloning BasicBlock)

Andrew Lenharth andrewl at lenharth.org
Sun Nov 27 19:36:23 PST 2005


On Tue, 2005-11-22 at 23:19 -0800, Sandra Johnson wrote:
> Hello Andrew ,
> Yes , I have missed the phi node since my paths merge together. I'll
> try this out.
> I am implementing a timer based profiling scheme and hope your code
> will be useful 
> for me. Please send me a copy of your code. 

I have commited an Arnold and Ryder style random sampling framework
(check out lib/Transforms/Instrumentation/RSProfiling.cpp).  Two of the
methods use a global counter to choose when to profiler.  It is quite
possible that this framework does exactly what you want.

I will be cleaning up the code and adding some docs in the next few
days.

Andrew Lenharth


> Andrew Lenharth <andrewl at lenharth.org> wrote: 
>         On Tue, 2005-11-22 at 09:12 -0800, Sandra Johnson wrote:
>         > Hi ,
>         > I am trying to clone a BasicBlock. I want both to co-exist
>         and I have
>         > introduced
>         > a conditional branch to the original or the cloned BB. 
>         
>         I have a pass I haven't commited that does just this. Well, it
>         does so
>         to implement Arnold and Ryder style profiling. I can send you
>         a copy of
>         that if you want (I hope to commit it soon once it is c!
>         leaned up some).
>         Your best bet is to run reg2mem, which removes most live
>         values by
>         placing them in memory. the only live values that remain after
>         that
>         pass are the allocas for the old registers and values from
>         loads in the
>         predecessors of phi nodes to those phi nodes. This makes it
>         much easier
>         to maintain SSA form (as there is only one type of simple live
>         value you
>         have to worry about). It is also possible to remove the phi
>         nodes
>         completely with a bit more transform, but that wasn't
>         desirable in my
>         case, so I didn't, but you could easily extend the pass to do
>         so.
>         
>         (just for reference, my code clones all BB in a function and
>         the CFG,
>         then takes backedges and interconnects the backedges of the
>         original and
>         cloned versions, adding conditional branches at those join
>         points.)
>         
>         Andrew Lenharth
>         
>         > I tried mapping the original instruction and the clone as
>         below :
>         > Instruction *NewInst = II->clone();
>         > if (II->hasName())> NewInst->setName(II->getName());
>         > NewBB->getInstList().push_back(NewInst);
>         > ValueMap[II] = NewInst; 
>         > what I got from this is ,
>         > --> eventhough I have set the same name , a new name is set
>         > for the clone.
>         > original :
>         > %CS1 = call fastcc int %add( int %tmp.5, int %
>         > tmp.6 ) ; [#uses=1]
>         > clone :
>         > %CS11 = call fastcc int %add( int %tmp.5, int %
>         > tmp.6 ) ; [#uses=1]
>         > --> the verifier gives the following error
>         > Instruction does not dominate all uses!
>         > &n! bsp; for the original instruction.
>         > Is it possible to have the instructions in the clone to have
>         the same
>         > name 
>         > as the original BB ?
>         > Is it possible to make the uses of the original instruction
>         to be the 
>         > uses of the cloned instruction at the same time ? 
>         > What makes the above error ?
>         > Is it because of SSA ? 
>         > 
>         > 
>         > Thanks in advance! for any help,
>         > Sandra
>         > 
>         > 
>         > 
>         >
>         ______________________________________________________________________
>         > Yahoo! FareChase - Search multiple travel sites in one
>         click. 
>         > _______________________________________________
>         > LLVM Developers mailing list
>         > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>         > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>         
>         _______________________________________________
>         LLVM Developers mailing list
>         LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>         http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 
> 
> 
> ______________________________________________________________________
> Yahoo! FareChase - Search multiple travel sites in one click. 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list