[LLVMdev] DFAPacketizer

Jonas Paulsson jonas.paulsson at ericsson.com
Mon Feb 18 02:27:15 PST 2013


Hi Anshu,

Would there be any interest in extending this algorithm to handling more extensive models, such as VLIW scheduling based on FU's and bundle space... ie handle multiple stages ?

I might do it and commit, if there is acceptance and guidance...

Jonas


________________________________
From: Anshuman Dasgupta [mailto:adasgupt at codeaurora.org]
Sent: Tuesday, February 12, 2013 4:47 PM
To: Jonas Paulsson
Cc: llvmdev at cs.uiuc.edu
Subject: Re: DFAPacketizer

Hi Jonas,

> It is interesting to find this in the ARM backend, considering your answer.

The ARM backend doesn't use the DFA packetizer. It's only used by Hexagon. At this point, there is no plan to address this in the DFA packetizer since none of the supported targets need the functionality.

Thanks
-Anshu


---
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation




On 2/12/2013 2:37 AM, Jonas Paulsson wrote:
Hi,

I looked a bit through the mail archives, and found this question answered in Oct 2011 (see below). It is interesting to find this in the ARM backend, considering your answer. Can you give more information about for example is this a temporary deficiency in the DFAPacketizer? What is the IIC_iMOVi itinerary doing below?

Thanks,

Jonas


Thu Oct 6 15:11:25 CDT 2011:

Hello Hal.

> Is there a way to express a multiple pipeline itinerary using the
> current scheme
Yes, surely

> (maybe some trick with setting NextCycles = 0)?
Yep!

> Specifically, consider a case where a floating-point load simultaneously
> uses units from a floating-point pipeline and a load/store pipeline.
Look into ARM itineraries, they contain a decent amount of such examples.

[Head feb 2013:]
InstrItinData<IIC_iMOVi   , [InstrStage<1, [SW_DIS0, SW_DIS1, SW_DIS2], 0>,
                                        InstrStage<1, [SW_ALU0, SW_ALU1]>],
                                        [1]>,

________________________________
From: Anshuman Dasgupta [mailto:adasgupt at codeaurora.org]
Sent: Monday, February 11, 2013 7:19 PM
To: Jonas Paulsson; llvmdev at cs.uiuc.edu<mailto:llvmdev at cs.uiuc.edu>
Subject: RE: DFAPacketizer

Jonas,



At this point, the DFA packetizer models a simple VLIW architecture and does not accommodate multiple stages. That's the reason for the behavior you're seeing.



-Anshu



---
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> [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Jonas Paulsson
Sent: Monday, February 11, 2013 11:16 AM
To: llvmdev at cs.uiuc.edu<mailto:llvmdev at cs.uiuc.edu>
Subject: [LLVMdev] DFAPacketizer

Hi,

I am having problems writing the ProcessorItineraries list. As instructions on my VLIW target have varying size I want to model both cpu units and bundle bits as FUs. The following does not work, to my surprise:

InstrItinData<ALU,  [InstrStage<1, [BITS1,BITS2, BITS3, BITS4], 0>,
                               InstrStage<1, [ALU1, ALU2]>]>

I want to express that there are two ALU's, and four bundle slots, and in this case while allocating this type of instructions several times, I would like to be allowed only two such instructions per cycle.

ResourceTracker->reserveResources();
ResourceTracker->reserveResources();
ResourceTracker->reserveResources();
ResourceTracker->reserveResources();
ResourceTracker->reserveResources();
DFAPacketizer.cpp:84: void llvm::DFAPacketizer::reserveResources(const llvm::MCInstrDesc*): Assertion `CachedTable.count(StateTrans) != 0' failed.

It seems to not want to worry about the alu's, but it is fine as long as there are any FU of the first row (BITS) available.

What is missing?

Thanks,

Jonas Paulsson


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130218/6a57cecf/attachment.html>


More information about the llvm-dev mailing list