OSDN Git Service

Use 32-bit ebp for NaCl64 in a limited case: llvm.frameaddress.
authorJan Wen Voung <jvoung@google.com>
Fri, 5 Dec 2014 20:55:53 +0000 (20:55 +0000)
committerJan Wen Voung <jvoung@google.com>
Fri, 5 Dec 2014 20:55:53 +0000 (20:55 +0000)
commita44126f4322eef7637427d99675711e44a89941e
tree294d428ebbd06e7f232bc500858a5de88bf8eec2
parent8dcc5c09969cfb0082b202367dec94375ea048b3
Use 32-bit ebp for NaCl64 in a limited case: llvm.frameaddress.

Summary:
Follow up to [x32] "Use ebp/esp as frame and stack pointer":
http://reviews.llvm.org/D4617

In that earlier patch, NaCl64 was made to always use rbp.
That's needed for most cases because rbp should hold a full
64-bit address within the NaCl sandbox so that load/stores
off of rbp don't require sandbox adjustment (zeroing the top
32-bits, then filling those by adding r15).

However, llvm.frameaddress returns a pointer and pointers
are 32-bit for NaCl64. In this case, use ebp instead, which
will make the register copy type check. A similar mechanism
may be needed for llvm.eh.return, but is not added in this change.

Test Plan: test/CodeGen/X86/frameaddr.ll

Reviewers: dschuff, nadav

Subscribers: jfb, llvm-commits

Differential Revision: http://reviews.llvm.org/D6514

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223510 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86FastISel.cpp
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86RegisterInfo.cpp
lib/Target/X86/X86RegisterInfo.h
test/CodeGen/X86/frameaddr.ll