[LLVMdev] Extending AsmPrinter
    Chris Lattner 
    sabre at nondot.org
       
    Wed Aug 15 10:33:21 PDT 2007
    
    
  
On Wed, 15 Aug 2007, David Greene wrote:
>> It really depends on what you mean.  I've found that iostreams are
>> extremely slow, much slower than C stdio streams.  Eventually I'd like to
>> move them to stdio, not to more complex streambufs :)
>
> Basically, what I've done is augment basic_streambuf to keep track of
> columns and provide manipulators that use this ability to set the output
> at a specific column (by padding with spaces if necessary).  This makes
> it easy to line up comments, for example.
Nifty.
> This would be quite a bit uglier with C stdio.  For example:
The syntax used doesn't depend on the underlying implementation 
methodology.  It would be straight-forward to define a new 
"formated_ostream" (or whatever) that uses operator<< etc, but that isn't 
actually implemented in terms of ostreams :)
> This means that every ::print/::dump/etc API that's used to print asm has to
> track columns by parsing output strings and looking for newlines and tabs.
> With a custom streambuf it's automatic.
Yep.
> There's value to this whole newfangled encapsulation thing.  :)
Hey, I've heard of that... do people really use it?  ;-)
> As for performance, I guess I haven't seen a huge issue.  The compilation
> time is spent in the optimization, not in the asm output.
The time this matters is during -O0 compilation, when you do no 
optimization.  Compile time is incredibly important because -O0 compiles 
directly impact the edit/compile/debug turn-around cycle.
> Right now the custom streambuf is only used to print asm.  I don't see a
> reason to use it elsewhere.
It sounds very handy to me for a number of things.  :)  Even tablegen and 
the CBE could use it to produce nicer generated code.  We could use is in 
the .ll printer to line up the #uses comments in the .ll file, etc.  For 
it to really be widely usable though, it would have to be very efficient.
-Chris
-- 
http://nondot.org/sabre/
http://llvm.org/
    
    
More information about the llvm-dev
mailing list