vivek pandya via llvm-dev
2016-Jun-02 04:32 UTC
[llvm-dev] What kind of testcases should be required to test IPRA?
Dear Mentors, I will be writing test cases for IPRA for lit infrastructure. Following 2 basic test cases I have identified : Program that does not have recursive function call. Program that does have recursive calls. Please suggest some other test cases or provide some hints. Sincerely, Vivek -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160602/61d82d67/attachment.html>
Mehdi Amini via llvm-dev
2016-Jun-02 04:55 UTC
[llvm-dev] What kind of testcases should be required to test IPRA?
Hi,
I'd start with the most simple test I can imagine:
target triple = "x86_64-unknown-unknown"
define void @bar1() {
ret void
}
define preserve_allcc void @foo() #0 {
call void @bar1()
call void @bar2()
ret void
}
define void @bar2() {
ret void
}
attributes #0 = { nounwind }
It is designed such that the calling convention on foo are more conservative
than the calling convention on bar1 and bar2. That way running it through llc
should force foo to preserve all the registers that are not preserved by bar1
and bar2.
I'd run it two times through llc: the first one without ipra to check that
the spill occurs, and the second one with ipra and checking that the spill does
not occur.
There are two calls to bar1 and bar2, defined before and after foo, so that we
verify the effect of the CGSCC scheduling.
--
Mehdi
> On Jun 1, 2016, at 9:32 PM, vivek pandya <vivekvpandya at gmail.com>
wrote:
>
> Dear Mentors,
>
> I will be writing test cases for IPRA for lit infrastructure.
>
> Following 2 basic test cases I have identified :
>
> Program that does not have recursive function call.
> Program that does have recursive calls.
>
> Please suggest some other test cases or provide some hints.
>
> Sincerely,
> Vivek
vivek pandya via llvm-dev
2016-Jun-05 02:56 UTC
[llvm-dev] What kind of testcases should be required to test IPRA?
Hello Mehdi Amini,
Sorry for slow progress this week but it was due to interesting mistake of
mine. I had build llvm with ipra enable by default and that build files
were on my path ! Due to that next time I tried to build llvm it was
terribly slow (almost 1 hour for 10% build ). I spend to much time on
fixing this by playing around with environment variables, cmake options etc.
But I think this is a serious concern, we need to think verify this time
complexity other wise building a large software with IPRA enable would be
very time consuming.
I studied tets case suggest by you on phabricator, for RegUsageInfo passes
I am thinking to print clobbered registers and verify that with FileCheck
as expected clobbered register for a particular test-case. Is this approach
fine?
I did not find function call to CostModelAnalysis::print() , Is opt
-analyze making that call ?
I am not able to find similar option in llc. I can't use info printed with
dbgs() function as release build do not add -debug-only option to llc
executable.
For the testcase sent by you earlier I have modified it as following :
;;;;; ip-regallco-simple.ll
; RUN: llc < %s | FileCheck %s -check-prefix=NOIPRA
; RUN: llc < %s -enable-ipra | FileCheck %s
; NOIPRA: foo:
; NOIPRA: pushq %r10
; NOIPRA: pushq %r9
; NOIPRA: pushq %r8
; NOIPRA: callq bar1
; CHECK: foo:
; CHECK-NOT: pushq %r10
; CHECK-NOT: pushq %r9
; CHECK-NOT: pushq %r8
; CHECK: callq bar1
target triple = "x86_64-unknown-unknown"
define void @bar1() {
ret void
}
define preserve_allcc void @foo()#0 {
call void @bar1()
call void @bar2()
ret void
}
define void @bar2() {
ret void
}
attributes #0 = {nounwind}
Is this correct approach to verify spills?
Sincerely,
Vivek
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20160605/c436b6b3/attachment.html>