[llvm-commits] Patch for review: Speeding up ScheduleDAG computations
Evan Cheng
evan.cheng at apple.com
Thu Mar 6 11:41:48 PST 2008
On Mar 6, 2008, at 5:28 AM, Roman Levenstein wrote:
> Hi Evan,
>
> 2008/3/5, Evan Cheng <evan.cheng at apple.com>:
>> I'm seeing 2 dejagnu test failures on my machine.
>>
>> CodeGen/Generic/print-arith-fp.ll
>> while running: llvm-as < /Users/echeng/LLVM/llvm/test/CodeGen/
>> Generic/
>> print-arith-fp.ll | llc
>> *** List scheduling failed! ***
>> SU(54): 0x120edc0: i32,ch,flag = CopyFromReg 0x120e680, 0x120b6a0,
>> 0x120e680:1
>> 0x12073e0: ch,flag = CALLpcrel32 0x1209aa0, 0x120eaf0
>> 0x120e680: ch,flag = ADJCALLSTACKUP 0x120f370, 0x120b100,
>> 0x12073e0, 0x12073e0:1
>> has been released too many times!
>> Assertion failed: (0), function ReleasePred, file
>> ScheduleDAGRRList.cpp, line 213.
>
> OK. I can confirm this failure. I fixed it in the attached updated
> version of my patch (only the ScheduleDAGRRList patch is modified, the
> ScheduleDAGList patch is unaffected).
Ok, will test.
>
>
> There is still one moment, where I'm not quite sure, but in any case
> it is not worse than in the repository. It is related to Dan's comment
> about updates of PredSU->CycleBound in the CapturePred function. I
> inserted for now the following comment:
> // TODO: Check that PredSU is not in the AvailableQueue at this
> moment!
> The problem is that currently there is no way to check if a node in
> the AvailableQueue, AFAIK. But if it is, then the node should be
> removed and inserted back into the queue to preserve the ordering. All
> tests compile without problems, but I'd still like to be sure that
> when this comment line is reached, the node is not in the queue.
There is a way. When a node is inserted into the AvailableQueue, the
isAvailable field is set to true. Can you update the patch?
>
>
>
>> CodeGen/X86/2007-07-03-GR64ToVR64.ll
>
> OK. This one is not a real failure. Basically, the names of registers
> are swapped (see below), as far as I understand. Without my changes
> %rdi should be loaded into %mm1 and %rsi into %mm0.
>
> .text
> .align 16
> .globl foo
> .type foo, at function
> foo:
> movd %rdi, %mm0
> movd %rsi, %mm1
> paddusw %mm1, %mm0
> movq %mm0, R
> emms
> ret
> .size foo, .-foo
Yes, that's silly. Please change the run lines to grep for movd and
paddusw instead.
>
>
>> Are you seeing any issues?
>
> The same that you see. And some others related to the frontend, but
> they have nothing to do with this patch.
>
> Please, try again if possible and let me know if I can commit.
Will do.
Evan
>
>
> -Roman
>
>> On Mar 5, 2008, at 9:16 AM, Roman Levenstein wrote:
>>
>>
>>> 2008/3/5, Dan Gohman <gohman at apple.com>:
>>>> On Mar 4, 2008, at 3:56 AM, Roman Levenstein wrote:
>>>>>
>>>>
>>>>> make[5]: Entering directory
>>>>> `/opt/llvm.build/projects/llvm-test/SingleSource/UnitTests/Vector/
>>>>> SSE'
>>>>> make[5]: *** No rule to make target `Output/
>>>>> sse.expandfft.linked.rbc',
>>>>> needed by `Output/sse.expandfft.linked.bc'. Stop.
>>>>
>>>>
>>>> When I've seen this error, the problem has been that my base llvm
>>>> build configure was run without an llvm-gcc in PATH. llvm-test
>>>> apparently relies on the base llvm build to locate llvm-gcc for it.
>>>
>>> Thanks! Now I checked again and it seems to work.
>>>
>>> So, I have other questions about testing (I guess some of them are
>>> asked quite often ;-):
>>>
>>> 1) I do run llvm/test tests. At the end I get some figures about the
>>> number of PASSED and UNEXPECTEDLY FAILED tests. This is fine. But is
>>> it guaranteed that UNEXPECTEDLY FAILED are introduced by my code
>>> or is
>>> it possible that due to some recent changes to the repository some
>>> of
>>> those tests just fail? If it is due to the changes in the
>>> repository,
>>> how do I know what are the figures without my changes, so that I can
>>> compare and see new failures introduced by my code? Are those
>>> numbers
>>> published anywhere, may be in the nightly tests results??? Or
>>> should I
>>> basically have to source trees: one for repository version and one
>>> for
>>> my local modifications and then run tests under both trees?
>>>
>>> 2) If I run the llvm-test tests, how do I produce reports? How do I
>>> know that something failed?
>>>
>>> 3) How can I run only a selected subset of the tests from llvm-test?
>>> In particular, I only change LLC mostly. Do I have to run the
>>> llvm-test every time, or can I reduce it to something smaller?
>>>
>>> Basically, I have my ScheduleDAG patches ready, All of the proposals
>>> from the review by you and Evan are implemented. But I don't know
>>> how
>>> to test them properly using llvm tests and how can I understand if
>>> something is broken by them....
>>>
>>> I attach both patches for now, so that someone else can test them as
>>> well, while I'm trying to figure out how to do it on my machine.
>>>
>>> -Roman
>>> <
>>
>>> ScheduleDAGRRList
>>> .patch
>>>>
>>> <
>>> ScheduleDAGList
>>> .patch>_______________________________________________
>>
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
> <
> ScheduleDAGRRList
> .patch>_______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list