Rename llvm.recoverframeallocation to llvm.framerecover

This name is less descriptive, but it sort of puts things in the
'llvm.frame...' namespace, relating it to frameallocate and
frameaddress. It also avoids using "allocate" and "allocation" together.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225752 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Kleckner 2015-01-13 01:51:34 +00:00
parent 2b390f4dcf
commit d8f69a7201
8 changed files with 24 additions and 24 deletions

View File

@ -7281,7 +7281,7 @@ Note that calling this intrinsic does not prevent function inlining or
other aggressive transformations, so the value returned may not be that other aggressive transformations, so the value returned may not be that
of the obvious source-language caller. of the obvious source-language caller.
'``llvm.frameallocate``' and '``llvm.recoverframeallocation``' Intrinsics '``llvm.frameallocate``' and '``llvm.framerecover``' Intrinsics
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Syntax: Syntax:
@ -7290,13 +7290,13 @@ Syntax:
:: ::
declare i8* @llvm.frameallocate(i32 %size) declare i8* @llvm.frameallocate(i32 %size)
declare i8* @llvm.recoverframeallocation(i8* %func, i8* %fp) declare i8* @llvm.framerecover(i8* %func, i8* %fp)
Overview: Overview:
""""""""" """""""""
The '``llvm.frameallocate``' intrinsic allocates stack memory at some fixed The '``llvm.frameallocate``' intrinsic allocates stack memory at some fixed
offset from the frame pointer, and the '``llvm.recoverframeallocation``' offset from the frame pointer, and the '``llvm.framerecover``'
intrinsic applies that offset to a live frame pointer to recover the address of intrinsic applies that offset to a live frame pointer to recover the address of
the allocation. The offset is computed during frame layout of the caller of the allocation. The offset is computed during frame layout of the caller of
``llvm.frameallocate``. ``llvm.frameallocate``.
@ -7308,12 +7308,12 @@ The ``size`` argument to '``llvm.frameallocate``' must be a constant integer
indicating the amount of stack memory to allocate. As with allocas, allocating indicating the amount of stack memory to allocate. As with allocas, allocating
zero bytes is legal, but the result is undefined. zero bytes is legal, but the result is undefined.
The ``func`` argument to '``llvm.recoverframeallocation``' must be a constant The ``func`` argument to '``llvm.framerecover``' must be a constant
bitcasted pointer to a function defined in the current module. The code bitcasted pointer to a function defined in the current module. The code
generator cannot determine the frame allocation offset of functions defined in generator cannot determine the frame allocation offset of functions defined in
other modules. other modules.
The ``fp`` argument to '``llvm.recoverframeallocation``' must be a frame The ``fp`` argument to '``llvm.framerecover``' must be a frame
pointer of a call frame that is currently live. The return value of pointer of a call frame that is currently live. The return value of
'``llvm.frameaddress``' is one way to produce such a value, but most platforms '``llvm.frameaddress``' is one way to produce such a value, but most platforms
also expose the frame pointer through stack unwinding mechanisms. also expose the frame pointer through stack unwinding mechanisms.
@ -7328,7 +7328,7 @@ memory is only aligned to the ABI-required stack alignment. Each function may
only call '``llvm.frameallocate``' one or zero times from the function entry only call '``llvm.frameallocate``' one or zero times from the function entry
block. The frame allocation intrinsic inhibits inlining, as any frame block. The frame allocation intrinsic inhibits inlining, as any frame
allocations in the inlined function frame are likely to be at a different allocations in the inlined function frame are likely to be at a different
offset from the one used by '``llvm.recoverframeallocation``' called with the offset from the one used by '``llvm.framerecover``' called with the
uninlined function. uninlined function.
.. _int_read_register: .. _int_read_register:

View File

@ -72,10 +72,10 @@ namespace ISD {
/// the parent's frame or return address, and so on. /// the parent's frame or return address, and so on.
FRAMEADDR, RETURNADDR, FRAMEADDR, RETURNADDR,
/// RECOVER_FRAME_ALLOC - Represents the llvm.recoverframeallocation /// FRAME_ALLOC_RECOVER - Represents the llvm.framerecover
/// intrinsic. Materializes the offset from the frame pointer of another /// intrinsic. Materializes the offset from the frame pointer of another
/// function to the result of llvm.frameallocate. /// function to the result of llvm.frameallocate.
RECOVER_FRAME_ALLOC, FRAME_ALLOC_RECOVER,
/// READ_REGISTER, WRITE_REGISTER - This node represents llvm.register on /// READ_REGISTER, WRITE_REGISTER - This node represents llvm.register on
/// the DAG, which implements the named register global variables extension. /// the DAG, which implements the named register global variables extension.

View File

@ -260,7 +260,7 @@ def int_gcwrite : Intrinsic<[],
def int_returnaddress : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem]>; def int_returnaddress : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem]>;
def int_frameaddress : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem]>; def int_frameaddress : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem]>;
def int_frameallocate : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty]>; def int_frameallocate : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty]>;
def int_recoverframeallocation : Intrinsic<[llvm_ptr_ty], def int_framerecover : Intrinsic<[llvm_ptr_ty],
[llvm_ptr_ty, llvm_ptr_ty], [llvm_ptr_ty, llvm_ptr_ty],
[IntrNoMem]>; [IntrNoMem]>;
def int_read_register : Intrinsic<[llvm_anyint_ty], [llvm_metadata_ty], def int_read_register : Intrinsic<[llvm_anyint_ty], [llvm_metadata_ty],

View File

@ -5608,8 +5608,8 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
return nullptr; return nullptr;
} }
case Intrinsic::recoverframeallocation: { case Intrinsic::framerecover: {
// i8* @llvm.recoverframeallocation(i8* %fn, i8* %fp) // i8* @llvm.framerecover(i8* %fn, i8* %fp)
MachineFunction &MF = DAG.getMachineFunction(); MachineFunction &MF = DAG.getMachineFunction();
MVT PtrVT = TLI.getPointerTy(0); MVT PtrVT = TLI.getPointerTy(0);
@ -5624,7 +5624,7 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
assert(Name.size() == strlen(Name.data()) && "not null terminated"); assert(Name.size() == strlen(Name.data()) && "not null terminated");
SDValue OffsetSym = DAG.getTargetExternalSymbol(Name.data(), PtrVT); SDValue OffsetSym = DAG.getTargetExternalSymbol(Name.data(), PtrVT);
SDValue OffsetVal = SDValue OffsetVal =
DAG.getNode(ISD::RECOVER_FRAME_ALLOC, sdl, PtrVT, OffsetSym); DAG.getNode(ISD::FRAME_ALLOC_RECOVER, sdl, PtrVT, OffsetSym);
// Add the offset to the FP. // Add the offset to the FP.
Value *FP = I.getArgOperand(1); Value *FP = I.getArgOperand(1);

View File

@ -2617,10 +2617,10 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
"llvm.frameallocate argument must be constant integer size", &CI); "llvm.frameallocate argument must be constant integer size", &CI);
break; break;
} }
case Intrinsic::recoverframeallocation: { case Intrinsic::framerecover: {
Value *FnArg = CI.getArgOperand(0)->stripPointerCasts(); Value *FnArg = CI.getArgOperand(0)->stripPointerCasts();
Function *Fn = dyn_cast<Function>(FnArg); Function *Fn = dyn_cast<Function>(FnArg);
Assert1(Fn && !Fn->isDeclaration(), "llvm.recoverframeallocation first " Assert1(Fn && !Fn->isDeclaration(), "llvm.framerecover first "
"argument must be function defined in this module", &CI); "argument must be function defined in this module", &CI);
break; break;
} }

View File

@ -194,7 +194,7 @@ def X86rdpmc : SDNode<"X86ISD::RDPMC_DAG", SDTX86Void,
def X86Wrapper : SDNode<"X86ISD::Wrapper", SDTX86Wrapper>; def X86Wrapper : SDNode<"X86ISD::Wrapper", SDTX86Wrapper>;
def X86WrapperRIP : SDNode<"X86ISD::WrapperRIP", SDTX86Wrapper>; def X86WrapperRIP : SDNode<"X86ISD::WrapperRIP", SDTX86Wrapper>;
def X86RecoverFrameAlloc : SDNode<"ISD::RECOVER_FRAME_ALLOC", def X86RecoverFrameAlloc : SDNode<"ISD::FRAME_ALLOC_RECOVER",
SDTypeProfile<1, 1, [SDTCisSameAs<0, 1>, SDTypeProfile<1, 1, [SDTCisSameAs<0, 1>,
SDTCisInt<1>]>>; SDTCisInt<1>]>>;

View File

@ -2,13 +2,13 @@
declare i8* @llvm.frameallocate(i32) declare i8* @llvm.frameallocate(i32)
declare i8* @llvm.frameaddress(i32) declare i8* @llvm.frameaddress(i32)
declare i8* @llvm.recoverframeallocation(i8*, i8*) declare i8* @llvm.framerecover(i8*, i8*)
declare i32 @printf(i8*, ...) declare i32 @printf(i8*, ...)
@str = internal constant [10 x i8] c"asdf: %d\0A\00" @str = internal constant [10 x i8] c"asdf: %d\0A\00"
define void @print_framealloc_from_fp(i8* %fp) { define void @print_framealloc_from_fp(i8* %fp) {
%alloc = call i8* @llvm.recoverframeallocation(i8* bitcast (void(i32*, i32*)* @alloc_func to i8*), i8* %fp) %alloc = call i8* @llvm.framerecover(i8* bitcast (void(i32*, i32*)* @alloc_func to i8*), i8* %fp)
%alloc_i32 = bitcast i8* %alloc to i32* %alloc_i32 = bitcast i8* %alloc to i32*
%r = load i32* %alloc_i32 %r = load i32* %alloc_i32
call i32 (i8*, ...)* @printf(i8* getelementptr ([10 x i8]* @str, i32 0, i32 0), i32 %r) call i32 (i8*, ...)* @printf(i8* getelementptr ([10 x i8]* @str, i32 0, i32 0), i32 %r)

View File

@ -1,7 +1,7 @@
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s ; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
declare i8* @llvm.frameallocate(i32) declare i8* @llvm.frameallocate(i32)
declare i8* @llvm.recoverframeallocation(i8*, i8*) declare i8* @llvm.framerecover(i8*, i8*)
define internal void @f() { define internal void @f() {
call i8* @llvm.frameallocate(i32 4) call i8* @llvm.frameallocate(i32 4)
@ -26,23 +26,23 @@ not_entry:
; CHECK: llvm.frameallocate used outside of entry block ; CHECK: llvm.frameallocate used outside of entry block
define internal void @h() { define internal void @h() {
call i8* @llvm.recoverframeallocation(i8* null, i8* null) call i8* @llvm.framerecover(i8* null, i8* null)
ret void ret void
} }
; CHECK: llvm.recoverframeallocation first argument must be function defined in this module ; CHECK: llvm.framerecover first argument must be function defined in this module
@global = constant i8 0 @global = constant i8 0
declare void @declaration() declare void @declaration()
define internal void @i() { define internal void @i() {
call i8* @llvm.recoverframeallocation(i8* @global, i8* null) call i8* @llvm.framerecover(i8* @global, i8* null)
ret void ret void
} }
; CHECK: llvm.recoverframeallocation first argument must be function defined in this module ; CHECK: llvm.framerecover first argument must be function defined in this module
define internal void @j() { define internal void @j() {
call i8* @llvm.recoverframeallocation(i8* bitcast(void()* @declaration to i8*), i8* null) call i8* @llvm.framerecover(i8* bitcast(void()* @declaration to i8*), i8* null)
ret void ret void
} }
; CHECK: llvm.recoverframeallocation first argument must be function defined in this module ; CHECK: llvm.framerecover first argument must be function defined in this module