<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi all,<div><br></div><div>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.</div><div><br></div><div>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 </div><div>memory access I want to monitor because the effective address used by 402a9e is passed to the function call.</div><div><br></div><div><div>  402a91:       48 8d bc 1c 48 02 00    lea    <font class="Apple-style-span" color="#b70f0a">0x248(%rsp,%rbx,1),</font>%rdi</div><div>  402a98:       00</div><div>  402a99:       e8 82 e0 ff ff          callq  400b20 <llvm_memory_profiling@plt></div><div>/home/xl10/llvm/test//luleshOMP-0611.cc:1974</div><div>  402a9e:       f2 0f 10 84 1c 48 02    movsd  <font class="Apple-style-span" color="#b70f0a">0x248(%rsp,%rbx,1)</font>,%xmm0</div><div>  402aa5:       00 00</div><div>  402aa7:       f2 0f 11 84 24 b8 01    movsd  %xmm0,0x1b8(%rsp)</div><div><br></div><div>However, due to instruction scheduling, the following instruction of the function call is not always the desired memory access instruction. For example, </div><div>in the following code, the memory access is at 402afa, not right next to the function call at 402aed.</div><div><br></div><div><div>/home/xl10/llvm/test//luleshOMP-0611.cc:1972 </div><div>  402ae5:       48 8d bc 1c 08 02 00    lea    0x208(%rsp,%rbx,1),%rdi </div><div>  402aec:       00  </div><div>  402aed:       e8 2e e0 ff ff          callq  400b20 <llvm_memory_profiling@plt> </div><div>  402af2:       48 8d bc 1c c8 02 00    lea    0x2c8(%rsp,%rbx,1),%rdi </div></div><div><div>  402af9:       00</div><div>/home/xl10/llvm/test//luleshOMP-0611.cc:1975</div><div>  402afa:       f2 0f 10 84 1c 08 02    movsd  0x208(%rsp,%rbx,1),%xmm0</div><div>  402b01:       00 00</div></div><div><br></div><div>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 </div><div>memory access instruction next to each other? Thank you very much.</div><div><br></div><div apple-content-edited="true">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Best regards,</div><div><br></div><div>Xu Liu</div><div><br></div></div><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">
</div>
<br></div></body></html>