[LLVMbugs] [Bug 23459] New: MISched does not handle function arguments in tail calling functions correctly
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Fri May 8 15:18:52 PDT 2015
https://llvm.org/bugs/show_bug.cgi?id=23459
Bug ID: 23459
Summary: MISched does not handle function arguments in tail
calling functions correctly
Product: libraries
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Common Code Generator Code
Assignee: unassignedbugs at nondot.org
Reporter: aschwaighofer at apple.com
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
$ cat test_tail_call_rol.c
void callee2(void *a0, void *a1, void *a2, void *a3, void *a4, void *a5, void
*a6, void *a7, void *a8, void *a9, void *a10, void *a11, void *a12,
void *a13, void *a14, void *a15, void *a16, void *a17, void *a18,
void *a19, void *a20, void *a21, void *a22, void *a23, void *a24, void *a25,
void *a26, void *a27, void *a28, void *a29, void *a30, void *a31,
void *a32, void *a33);
void caller2(void *a0, void *a1, void *a2, void *a3, void *a4, void *a5, void
*a6, void *a7, void *a8, void *a9, void *a10, void *a11, void *a12,
void *a13, void *a14, void *a15, void *a16, void *a17, void *a18,
void *a19, void *a20, void *a21, void *a22, void *a23, void *a24, void *a25,
void *a26, void *a27, void *a28, void *a29, void *a30, void *a31,
void *a32, void *a33) {
callee2(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25,
a26, a27, a28, a29, a30, a31, a32, a33, a0);
}
$ bin/clang -target arm64-apple-ios -O test_tail_call_rol.c -S -o - -mllvm
--aarch64-load-store-opt=false
_caller2: ; @caller2
; BB#0: ; %entry
str x0, [sp, #200] <== Upsy daisy we trashed the old value.
ldr x8, [sp]
ldr x9, [sp, #200]
...
The problem is two fold:
1.) MI->isInvariantLoad returns true for stack argument locations. This is not
true when we are tail calling. A tail call clobbers its incoming argument area.
2.) The code in ScheduleDAGInstrs::buildSchedGraph assumes that two distinct
PseudoSourceValues can't alias. For tail calls this assumption is again not
correct. Two FixedStackPseudoSourceValues can refer to the same location.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150508/bb4e7519/attachment.html>
More information about the llvm-bugs
mailing list