[LLVMdev] forcing two instructions to be together
Owen Anderson
resistor at mac.com
Tue Sep 17 23:43:19 PDT 2013
That doesn't actually give you a guarantee that they won't be split up. Phases other than the scheduler may insert instructions in the middle of block (constant island pass, for example). Pseudo-instructions are the canonical answer to that problem.
--Owen
On Sep 17, 2013, at 11:09 PM, Micah Villmow <micah.villmow at smachines.com> wrote:
> I used the A9 schedule as an example:
> http://llvm.org/svn/llvm-project/llvm/trunk/lib/Target/ARM/ARMScheduleA9.td
>
> The documentation could use more clarity, but this is how I was able to do it to always get two specific instructions to be scheduled together.
> ________________________________________
> From: reed kotler [rkotler at mips.com]
> Sent: Tuesday, September 17, 2013 8:54 PM
> To: Micah Villmow
> Cc: Owen Anderson; llvmdev Mailing List
> Subject: Re: [LLVMdev] forcing two instructions to be together
>
> On 09/17/2013 04:51 PM, Micah Villmow wrote:
>> Reed,
>> Couldn't you also use instruction scheduling classes and specify that the second instruction has a bypass from the first instruction? The scheduler should always schedule them together in that case.
>>
>> Micah
>>
> I'm not sure exactly what you mean.
>
> Can you point me to an example of that?
>
> TIA.
>
> Reed
>
>>> -----Original Message-----
>>> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
>>> Behalf Of reed kotler
>>> Sent: Tuesday, September 17, 2013 3:59 PM
>>> To: Owen Anderson
>>> Cc: llvmdev Mailing List
>>> Subject: Re: [LLVMdev] forcing two instructions to be together
>>>
>>> On 09/17/2013 03:52 PM, Owen Anderson wrote:
>>>> +the list again
>>>> On Sep 17, 2013, at 3:48 PM, reed kotler <rkotler at mips.com> wrote:
>>>>
>>>>> On 09/17/2013 03:46 PM, Owen Anderson wrote:
>>>>>> On Sep 17, 2013, at 3:08 PM, reed kotler <rkotler at mips.com> wrote:
>>>>>>
>>>>>>> Is there any way, except for using bundles, to force two instructions to be
>>> sequentially executed?
>>>>>> What level of codegen are you working at? There are various mechanisms
>>> that can be applied, depending on exactly what the constraints are that you
>>> need to preserve.
>>>>>> -Owen
>>>>> I have two machine instructions that I need to be together.
>>>>>
>>>>> BuildMI(MBB, I, DL, TII.get(Mips::LiRxImmAlignX16), V0)
>>>>> .addExternalSymbol("_gp_disp", MipsII::MO_ABS_HI);
>>>>> BuildMI(MBB, I, DL, TII.get(Mips::AddiuRxPcImmX16), V1)
>>>>> .addExternalSymbol("_gp_disp", MipsII::MO_ABS_LO);
>>>>>
>>>>> It's in Mips16ISelDagToDag.cpp
>>>>>
>>>>> these two have to be together because they are both part of a complex pc
>>> relative calculation.
>>>>> I have not used bundles yet and was just looking for an easy way to join
>>> these two.
>>>> Bundles is one way you can go. Another is to use a pseudo instruction that is
>>> broken up immediately before (or during!) MC emission.
>>>> -Owen
>>> I just tried this but something is wrong here. Well, I have not used bundles at
>>> all.
>>> I just know how they work conceptually. This compiled okay but I got some
>>> constraint errors.
>>>
>>> MIBundleBuilder(MBB, I)
>>> .append(BuildMI(MF, DL, TII.get(Mips::LiRxImmAlignX16), V0)
>>> .addExternalSymbol("_gp_disp", MipsII::MO_ABS_HI))
>>> .append(BuildMI(MF, DL, TII.get(Mips::AddiuRxPcImmX16), V1)
>>> .addExternalSymbol("_gp_disp", MipsII::MO_ABS_LO));
>>>
>>>
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
More information about the llvm-dev
mailing list