[LLVMdev] instruction scheduling issue

Xu Liu xl10 at rice.edu
Mon Jan 7 12:13:25 PST 2013


Hi Sergei,

Thanks for your reply. I need to make the have the two instructions  
together because I want to make the monitored memory access  
instruction as the return address of the instrumented function.
How can I turn off the instruction scheduling? Is there any easy way  
to do that?

Best regards,

Xu Liu
PhD student, Rice University

Quoting Sergei Larin <slarin at codeaurora.org>:

> Liu,
>
>
>
>   I do not think there is a trivial way to do it. Do you really _have_ to
> have those instructions together, or mere order is enough?
>
> Also, how much performance are you willing to sacrifice to do what you do?
> Maybe turning off scheduling all together is an acceptable solution?
>
>
>
> Sergei
>
>
>
> ---
>
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by
> The Linux Foundation
>
>
>
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
> Behalf Of Xu Liu
> Sent: Friday, January 04, 2013 11:38 AM
> To: llvmdev at cs.uiuc.edu
> Subject: [LLVMdev] instruction scheduling issue
>
>
>
> Hi all,
>
>
>
> I'm trying to insert a function call "llvm_memory_profiling " right before
> each memory access. The function uses the effective address of the memory
> access as its single parameter.
>
>
>
> A example is as follows: the function call at 402a99 has a parameter passed
> to %rdi at 402a91. One can see that the function call is exactly before the
>
> memory access I want to monitor because the effective address used by 402a9e
> is passed to the function call.
>
>
>
>   402a91:       48 8d bc 1c 48 02 00    lea    0x248(%rsp,%rbx,1),%rdi
>
>   402a98:       00
>
>   402a99:       e8 82 e0 ff ff          callq  400b20
> <llvm_memory_profiling at plt>
>
> /home/xl10/llvm/test//luleshOMP-0611.cc:1974
>
>   402a9e:       f2 0f 10 84 1c 48 02    movsd  0x248(%rsp,%rbx,1),%xmm0
>
>   402aa5:       00 00
>
>   402aa7:       f2 0f 11 84 24 b8 01    movsd  %xmm0,0x1b8(%rsp)
>
>
>
> However, due to instruction scheduling, the following instruction of the
> function call is not always the desired memory access instruction. For
> example,
>
> in the following code, the memory access is at 402afa, not right next to the
> function call at 402aed.
>
>
>
> /home/xl10/llvm/test//luleshOMP-0611.cc:1972
>
>   402ae5:       48 8d bc 1c 08 02 00    lea    0x208(%rsp,%rbx,1),%rdi
>
>   402aec:       00
>
>   402aed:       e8 2e e0 ff ff          callq  400b20
> <llvm_memory_profiling at plt>
>
>   402af2:       48 8d bc 1c c8 02 00    lea    0x2c8(%rsp,%rbx,1),%rdi
>
>   402af9:       00
>
> /home/xl10/llvm/test//luleshOMP-0611.cc:1975
>
>   402afa:       f2 0f 10 84 1c 08 02    movsd  0x208(%rsp,%rbx,1),%xmm0
>
>   402b01:       00 00
>
>
>
> Could anyone point me how to solve this problem by modifying the instruction
> scheduling module in LLVM to make sure the function call instruction and the
>
>
> memory access instruction next to each other? Thank you very much.
>
>
>
> Best regards,
>
>
>
> Xu Liu
>
>
>
>
>
>
>
>
>
>





More information about the llvm-dev mailing list