[llvm-dev] how to prevent LLVM back-end from reordering instructions at instruction scheduling?

Ryan Taylor via llvm-dev llvm-dev at lists.llvm.org
Tue Nov 15 14:19:26 PST 2016


Krzysztof,

  Thanks, I'll look into it.

-Ryan

On Tue, Nov 15, 2016 at 5:18 PM, Krzysztof Parzyszek <
kparzysz at codeaurora.org> wrote:

> You can override TargetInstrInfo::isSchedulingBoundary for that.
>
> -Krzysztof
>
> On 11/15/2016 4:13 PM, Ryan Taylor wrote:
>
>> I have the same issue, would it be easier and more useful to attach a
>> flag to the instruction to tell the scheduler not to move instructions
>> across this boundary?
>>
>> -Ryan
>>
>> On Tue, Nov 15, 2016 at 5:11 PM, Krzysztof Parzyszek via llvm-dev
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>>     You can create a DAG mutation that adds artificial dependencies
>>     between A, B and Z.
>>
>>     -Krzysztof
>>
>>
>>     On 11/15/2016 3:26 PM, Wei Ding via llvm-dev wrote:
>>
>>         Hello,
>>
>>         I have a LLVM backend question regarding how to prevent compiler
>>         from
>>         reordering instructions. For example, I have the following
>>         instructions.
>>         Z_instruction is the one which I want to insert.
>>
>>
>>         // instruction order which I am looking for
>>         /////////////////////////////////////////
>>         A_instruction
>>         B_instruction
>>
>>         *Z_instruction*
>>
>>         C_instruction
>>         D_instruction
>>         E_instruction
>>         F_instruction
>>
>>         *Z_instruction*
>>
>>         G_instruction
>>         F_instruction
>>
>>
>>         ==================================================
>>
>>         But I found compiler reordered those instructions like the
>>         following.
>>         How could I prevent compiler from moving *A_instruction* and
>>         *B_instruction* after the first *Z_instruction*? Any
>>         recommendations and
>>         suggestion are greatly appreciated here!!!
>>
>>         *Z_instruction*
>>         *
>>         *
>>         A_instruction
>>         B_instruction
>>
>>         C_instruction
>>         D_instruction
>>         E_instruction
>>         F_instruction
>>
>>         *Z_instruction*
>>
>>         G_instruction
>>         F_instruction
>>
>>         BTW, I have define input/output chain for : *C_instruction,
>>         D_instruction, E_instruction, F_instruction and Z_instruction*
>>         *
>>         *
>>         Thank you so much!
>>
>>         --
>>         Wei Ding
>>
>>
>>         _______________________________________________
>>         LLVM Developers mailing list
>>         llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>         http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>         <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>
>>
>>     --
>>     Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
>>     hosted by The Linux Foundation
>>     _______________________________________________
>>     LLVM Developers mailing list
>>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>
>>
>>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
> by The Linux Foundation
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161115/586f97db/attachment.html>


More information about the llvm-dev mailing list