[llvm-dev] Why is printing an Instruction so slow?

Stephen Thomas via llvm-dev llvm-dev at lists.llvm.org
Mon Oct 5 11:00:12 PDT 2015


On Mon, Oct 5, 2015 at 12:05 PM, don hinton <hintonda at gmail.com> wrote:

> Hi Steve:
>
> llvm::errs() is unbuffered, so that might explain it.  Could you try
> llvm::outs() instead and see if that helps.
>

Don,

Nice tip. Switching to llvm::outs() saved about 15% for me. Not a golden
bullet, but still nothing to sneeze at. Printing instructions still remains
the bottleneck for my pass.

I'm curious how llvm-dis is able to write out so much IR text is so little
time.

Thanks,
Steve


>
> hth...
> don
>
> On Mon, Oct 5, 2015 at 11:17 AM, Stephen Thomas via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Hi all,
>>
>> When writing my custom passes, I often emit log messages to llvm::errs()
>> like so:
>>
>> llvm::errs() << "Could not handle instruction: " << *Inst << std::endl;
>>
>> where Inst is a pointer to an Instruction.
>>
>> I've profiled my code and found that this way of printing an Instruction
>> takes a very long time: indeed, it is the bottleneck of my pass.
>>
>> Of course, I could always switch these log messages off for production
>> runs, but during development and debugging, I'd like to have them on to
>> make debugging much easier.
>>
>> Is there a faster way to print an Instruction?
>>
>> Thanks,
>> Steve
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151005/18799b42/attachment.html>


More information about the llvm-dev mailing list