Bill Wendling
2010-May-13 18:59 UTC
[LLVMdev] Attention: About to Break SystemZ and possibly other Back Ends
Hi, Attached is a patch I'm testing. It changes how "MachineFrameInfo::HasCalls" is calculated. Basically, the way it's calculated now is in PEI. And it only looks for frame adjustments (or inline ASM) to determine if the function has a call or not. This way is much more accurate and occurs much sooner. But it breaks this test: test/CodeGen/SystemZ/2009-07-10-BadIncomingArgOffset.ll (See below for the output with this patch.) The problem is that SystemZ is using "hasCalls()" in the back end to determine if a frame pointer is needed or not. My guess is that several of the places where it calls hasCalls() should really be hasFP(). I don't have enough expertise in all of the back ends to determine if the call should be "hasFP" or "hasCalls". I need the respective back end owners to perform an audit of their code. This can be done even before my patch goes in (it's not ready yet). Please look at all calls to hasCalls() in the back end and determine if it should remain that or should be changed to hasFP() instead, given that hasCalls() is more accurate and not just indicating that there's a frame in the function. -bw Here is the new output: .file "/Volumes/Sandbox/llvm/llvm.src/test/CodeGen/SystemZ/2009-07-10-BadIncomingArgOffset.ll" .text .globl mp_mul_radix_test_bb3 .align 2 .type mp_mul_radix_test_bb3, at function mp_mul_radix_test_bb3: # @mp_mul_radix_test_bb3 # BB#0: # %newFuncRoot stmg %r6, %r15, 48(%r15) aghi %r15, -160 # kill: R3W<def> R3D<kill> lr %r12, %r2 lg %r11, 328(%r15) lg %r1, 320(%r15) lgr %r10, %r4 lgfr %r9, %r3 lghi %r3, -1 lgr %r2, %r9 lgr %r4, %r1 brasl %r14, rdft lgfr %r2, %r12 lgr %r3, %r9 lgr %r4, %r10 brasl %r14, mp_mul_d2i_test std %f0, 0(%r11) lmg %r6, %r15, 208(%r15) br %r14 .Ltmp0: .size mp_mul_radix_test_bb3, .Ltmp0-mp_mul_radix_test_bb3 .section .note.GNU-stack,"", at progbits -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: p.txt URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100513/53f2a6f6/attachment.txt> -------------- next part --------------
Anton Korobeynikov
2010-May-13 19:42 UTC
[LLVMdev] Attention: About to Break SystemZ and possibly other Back Ends
Hi, Bill> Please look at all calls to hasCalls() in the back end and determine if it should remain that or should be changed to hasFP() instead, given that hasCalls() is more accurate and not just indicating that there's a frame in the function.It looks like hasCalls() returns false with your change, right? -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University