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)
commitf547861ba079f46462750be59e866587e1d7feb3
tree655d5db0f9c5cbdbf9e82c937062021cb4b884f5
parent1baeeb029b4da865856039fd0ab148c576fe9fbd
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

llvm-svn: 223510
llvm/lib/Target/X86/X86FastISel.cpp
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86RegisterInfo.cpp
llvm/lib/Target/X86/X86RegisterInfo.h
llvm/test/CodeGen/X86/frameaddr.ll