[mips] LLVM PR/30197 - Tail call incorrectly clobbers arguments for mips
authorSimon Dardis <simon.dardis@imgtec.com>
Wed, 21 Sep 2016 09:43:40 +0000 (09:43 +0000)
committerSimon Dardis <simon.dardis@imgtec.com>
Wed, 21 Sep 2016 09:43:40 +0000 (09:43 +0000)
commit9a66bbecae7ab496ff2d2d204c8808d1e90f3607
treefe16ca399f5cf13c03c725b704dde74e17c0bc16
parent7c98baab29f8ade4b0f69d482f9ce0bef4063b65
[mips] LLVM PR/30197 - Tail call incorrectly clobbers arguments for mips

The postRA scheduler performs alias analysis to determine if stores and loads
can moved past each other. When a function has more arguments than argument
registers for the calling convention used, excess arguments are spilled onto the
stack. LLVM by default assumes that argument slots are immutable, unless the
function contains a tail call. Without the knowledge of that a function contains
a tail call site, stores and loads to fixed stack slots may be re-ordered
causing the out-going arguments to clobber the incoming arguments before the
incoming arguments are supposed to be dead.

Reviewers: vkalintiris

Differential Review: https://reviews.llvm.org/D24077

llvm-svn: 282063
llvm/lib/Target/Mips/MipsISelLowering.cpp
llvm/test/CodeGen/Mips/tailcall/tail-call-arguments-clobber.ll [new file with mode: 0644]