mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-01 01:54:21 +00:00
Create a stack slot for the return address lazily instead of eagerly. This
save small amounts of time for functions that don't call llvm.returnaddress or llvm.frameaddress (which is almost all functions). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19006 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
acd6782470
commit
11cf7aa775
@ -96,6 +96,9 @@ namespace {
|
||||
/// the entire function.
|
||||
///
|
||||
bool runOnFunction(Function &Fn) {
|
||||
// Lazily create a stack slot for the return address if needed.
|
||||
ReturnAddressIndex = -1;
|
||||
|
||||
// First pass over the function, lower any unknown intrinsic functions
|
||||
// with the IntrinsicLowering class.
|
||||
LowerUnknownIntrinsicFunctionCalls(Fn);
|
||||
@ -108,10 +111,6 @@ namespace {
|
||||
|
||||
BB = &F->front();
|
||||
|
||||
// Set up a frame object for the return address. This is used by the
|
||||
// llvm.returnaddress & llvm.frameaddress intrinisics.
|
||||
ReturnAddressIndex = F->getFrameInfo()->CreateFixedObject(4, -4);
|
||||
|
||||
// Copy incoming arguments off of the stack...
|
||||
LoadArgumentsToVirtualRegs(Fn);
|
||||
|
||||
@ -1765,6 +1764,11 @@ void X86ISel::visitIntrinsicCall(Intrinsic::ID ID, CallInst &CI) {
|
||||
case Intrinsic::frameaddress:
|
||||
TmpReg1 = getReg(CI);
|
||||
if (cast<Constant>(CI.getOperand(1))->isNullValue()) {
|
||||
if (ReturnAddressIndex == -1) {
|
||||
// Set up a frame object for the return address.
|
||||
ReturnAddressIndex = F->getFrameInfo()->CreateFixedObject(4, -4);
|
||||
}
|
||||
|
||||
if (ID == Intrinsic::returnaddress) {
|
||||
// Just load the return address
|
||||
addFrameReference(BuildMI(BB, X86::MOV32rm, 4, TmpReg1),
|
||||
|
Loading…
x
Reference in New Issue
Block a user