[LLVMdev] [llvm-commits] [PATCH] Refactoring the DFA generator

Ivan Llopard ivanllopard at gmail.com
Sat Aug 25 04:54:04 PDT 2012



On 25/08/2012 13:42, Ivan Llopard wrote:
> Hi Anshu,
>
> Thanks again for your feedbacks.
>
> On 24/08/2012 17:01, Anshuman Dasgupta wrote:
>> Hi Ivan,
>>
>>> I missed last 2 commits made by Alexey. Following his advices, I
>>> updated the patch. It should be ok now.
>>> Thanks Anshu!
>>>
>>> I've recently added more functional units to our Schedule.td and the
>>> generation time became painfully long. In fact, the main problem was
>>> in writeTableAndAPI(). I propose another patch to fix it:
>>> - Fixed memory leaks.
>>> - Transitions are attached to states.
>>>
>>> I've regenerated the DFA table of Hexagon and everything is ok.
>>> Please review it.
>>
>> I had a few comments about the design change that you're introducing
>> with the patch:
>>
>> This patch adds multiple points of control for adding a transition:
>> there's now an addTransition() for DFA and another addTransition() for
>> State that populate different data structures. We shouldn't need both. I
>> am okay with transitions being folded into the State class if it results
>> in significant speedup in DFA generation.
>
> Yes, it gives a significant speedup to the emitter. My main concern is
> to address this:
>
> 357:    for (unsigned j = 0; j <= LargestInput; ++j) {
>
> LargestInput becomes too large. The more resources we introduce in the
> td file the larger it will be. Given an architecture with n resources,
> LargestInput will take the maximum value, i.e. 2^(n-1), but valid inputs
> are just a small subset of [0, LargestInput].

ERRATA: LargestInput will take some value in [2^(n-1), 2^n-1]. That's 
depend on the resource combinations. Then it may be even larger! :)

>
> But then please remove the
>> Transition mechanism for the DFA class (stateTransitions).
>
> Done!
>
>>
>> For transitions being folded into State:
>>  > std::map<unsigned, Transition *> inputToTrans;
>>
>> We don't need a map to Transition* here; we can directly map from input
>> to stateNum. You should be able to use a LLVM data structure.
>
> In that case,
> (1) Should I completely remove Transition and create a map structure in
> State (input, state) to replace them?
> (2) Or are you proposing to go though DFA in order look for valid
> transitions?
>
> After doing some cleanup to match the new design, these are the main
> changes:
> - Transition folded in states.
> Each state keeps a set of transitions.
> - Each transition contains the input to match in order to take it and
> the destination state 'To'.
> - Factoring up redundant information.
> Transitions doesn't contains 'From' state anymore because they are
> folded into it.
> - Using STLExtras functions.
> - Removed old and unused API's (e.g. addTransition in DFA)
>
> The new patch is attached but if you prefer (2) I can remake it.
>
> I failed to use SmallSet to store the transitions in State because I
> needed to iterate on it. What kind of llvm structure may I use?
>
> Ivan
>
>>
>> -Anshu
>>
>
>




More information about the llvm-dev mailing list