[LLVMdev] Easiest way to collect dynamic Instruction execution counts?

Stephen Thomas stephen.warner.thomas at gmail.com
Thu May 28 10:32:11 PDT 2015


John,

Thanks for the pointer; I'll indeed take a look at your student's pass and
supporting runtime library.


Bruce,

Yes, I apologize, I meant bitcode instructions. But you're right, as long
as there exists a mapping between the basic blocks in the assembly and the
basic blocks in the LLVM bitcode, then I should be able to use any tool
that gives me assembly instruction execution counts (such as Valgrind or
PIN) to find out bitcode instruction execution counts. I'm thinking I could
use DWARF debug info to create such a mapping.

Thanks,
Steve

On Thu, May 28, 2015 at 11:12 AM, Bruce Hoult <bruce at hoult.org> wrote:

> Machine instructions, yes. You didn't say bitcode instruction.
>
> Though it amounts to the same thing, as all instructions in the same basic
> block have the same execution count and the basic blocks should correspond.
>
> On Thu, May 28, 2015 at 5:18 PM, Stephen Thomas <
> stephen.warner.thomas at gmail.com> wrote:
>
>> Bruce,
>>
>> Can valgrind give me the execution counts for each Instruction in the
>> LLVM bitcode?
>>
>> Thanks,
>> Steve
>>
>> On Thu, May 28, 2015 at 9:34 AM, Bruce Hoult <bruce at hoult.org> wrote:
>>
>>> That seems like a job for valgrind?
>>>
>>> Assuming you're on a supported platform, but these days that includes
>>> all the common Mac/Linux/Android platforms except ARM64.
>>>
>>> On Thu, May 28, 2015 at 4:08 PM, Stephen Thomas <
>>> stephen.warner.thomas at gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I'd like a simple and fast way to collect the number of times each
>>>> Instruction was executed in a given run of the application. As far as I can
>>>> tell, there are a number of approaches I can take:
>>>>
>>>> - Use PIN. This would require using DWARF debug info and Instruction
>>>> debug info to attempt to map instructions in the binary to instructions in
>>>> the bitcode; not 100% sure how accurate this will be.
>>>>
>>>> - Use llvm-prof. Two questions here. First, I've seen on Stack Overflow
>>>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__stackoverflow.com_questions_14617067_collecting-2Dllvm-2Dedge-2Dprofiling-2Dwith-2Dllvm-2Dprof&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=HtoNbGGO3zcoVy6n3_8lqn7ZXiNnqiQKim27ER3buUQ&s=kf8XiNx6628Vrx9TCVI4rrnisNDMVf8ZcuKA6V0udhE&e=>
>>>> an option to `opt` called `--insert-edge-profiling`. However, that option
>>>> doesn't seem to be available in 3.6? Second, it appears that such profiling
>>>> only records execution counts at the Function level, not at the individual
>>>> Instruction level. Is that correct?
>>>>
>>>> - Write a new tool similar to AddressSanitizer.
>>>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_docs_AddressSanitizer.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=HtoNbGGO3zcoVy6n3_8lqn7ZXiNnqiQKim27ER3buUQ&s=B48ymTvL2IOafrTkfbB7YJl2y6OdfQtG7_I7dfiuNPU&e=> This
>>>> may work, but seems like overkill.
>>>>
>>>> Is there an easier way to achieve my goal that I'm missing?
>>>>
>>>> Thanks,
>>>> Steve
>>>>
>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>>
>>>>
>>>
>>
>> --
>> This message has been scanned for viruses and
>> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and
>> is
>> believed to be clean.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150528/f2a87797/attachment.html>


More information about the llvm-dev mailing list