mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-02 22:32:08 +00:00
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:
parent
2b390f4dcf
commit
d8f69a7201
@ -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
|
||||
of the obvious source-language caller.
|
||||
|
||||
'``llvm.frameallocate``' and '``llvm.recoverframeallocation``' Intrinsics
|
||||
'``llvm.frameallocate``' and '``llvm.framerecover``' Intrinsics
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Syntax:
|
||||
@ -7290,13 +7290,13 @@ Syntax:
|
||||
::
|
||||
|
||||
declare i8* @llvm.frameallocate(i32 %size)
|
||||
declare i8* @llvm.recoverframeallocation(i8* %func, i8* %fp)
|
||||
declare i8* @llvm.framerecover(i8* %func, i8* %fp)
|
||||
|
||||
Overview:
|
||||
"""""""""
|
||||
|
||||
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
|
||||
the allocation. The offset is computed during frame layout of the caller of
|
||||
``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
|
||||
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
|
||||
generator cannot determine the frame allocation offset of functions defined in
|
||||
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
|
||||
'``llvm.frameaddress``' is one way to produce such a value, but most platforms
|
||||
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
|
||||
block. The frame allocation intrinsic inhibits inlining, as any frame
|
||||
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.
|
||||
|
||||
.. _int_read_register:
|
||||
|
@ -72,10 +72,10 @@ namespace ISD {
|
||||
/// the parent's frame or return address, and so on.
|
||||
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
|
||||
/// function to the result of llvm.frameallocate.
|
||||
RECOVER_FRAME_ALLOC,
|
||||
FRAME_ALLOC_RECOVER,
|
||||
|
||||
/// READ_REGISTER, WRITE_REGISTER - This node represents llvm.register on
|
||||
/// the DAG, which implements the named register global variables extension.
|
||||
|
@ -260,7 +260,7 @@ def int_gcwrite : Intrinsic<[],
|
||||
def int_returnaddress : 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_recoverframeallocation : Intrinsic<[llvm_ptr_ty],
|
||||
def int_framerecover : Intrinsic<[llvm_ptr_ty],
|
||||
[llvm_ptr_ty, llvm_ptr_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_read_register : Intrinsic<[llvm_anyint_ty], [llvm_metadata_ty],
|
||||
|
@ -5608,8 +5608,8 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
case Intrinsic::recoverframeallocation: {
|
||||
// i8* @llvm.recoverframeallocation(i8* %fn, i8* %fp)
|
||||
case Intrinsic::framerecover: {
|
||||
// i8* @llvm.framerecover(i8* %fn, i8* %fp)
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
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");
|
||||
SDValue OffsetSym = DAG.getTargetExternalSymbol(Name.data(), PtrVT);
|
||||
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.
|
||||
Value *FP = I.getArgOperand(1);
|
||||
|
@ -2617,10 +2617,10 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
|
||||
"llvm.frameallocate argument must be constant integer size", &CI);
|
||||
break;
|
||||
}
|
||||
case Intrinsic::recoverframeallocation: {
|
||||
case Intrinsic::framerecover: {
|
||||
Value *FnArg = CI.getArgOperand(0)->stripPointerCasts();
|
||||
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);
|
||||
break;
|
||||
}
|
||||
|
@ -194,7 +194,7 @@ def X86rdpmc : SDNode<"X86ISD::RDPMC_DAG", SDTX86Void,
|
||||
def X86Wrapper : SDNode<"X86ISD::Wrapper", 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>,
|
||||
SDTCisInt<1>]>>;
|
||||
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
declare i8* @llvm.frameallocate(i32)
|
||||
declare i8* @llvm.frameaddress(i32)
|
||||
declare i8* @llvm.recoverframeallocation(i8*, i8*)
|
||||
declare i8* @llvm.framerecover(i8*, i8*)
|
||||
declare i32 @printf(i8*, ...)
|
||||
|
||||
@str = internal constant [10 x i8] c"asdf: %d\0A\00"
|
||||
|
||||
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*
|
||||
%r = load i32* %alloc_i32
|
||||
call i32 (i8*, ...)* @printf(i8* getelementptr ([10 x i8]* @str, i32 0, i32 0), i32 %r)
|
||||
|
@ -1,7 +1,7 @@
|
||||
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
|
||||
|
||||
declare i8* @llvm.frameallocate(i32)
|
||||
declare i8* @llvm.recoverframeallocation(i8*, i8*)
|
||||
declare i8* @llvm.framerecover(i8*, i8*)
|
||||
|
||||
define internal void @f() {
|
||||
call i8* @llvm.frameallocate(i32 4)
|
||||
@ -26,23 +26,23 @@ not_entry:
|
||||
; CHECK: llvm.frameallocate used outside of entry block
|
||||
|
||||
define internal void @h() {
|
||||
call i8* @llvm.recoverframeallocation(i8* null, i8* null)
|
||||
call i8* @llvm.framerecover(i8* null, i8* null)
|
||||
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
|
||||
|
||||
declare void @declaration()
|
||||
|
||||
define internal void @i() {
|
||||
call i8* @llvm.recoverframeallocation(i8* @global, i8* null)
|
||||
call i8* @llvm.framerecover(i8* @global, i8* null)
|
||||
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() {
|
||||
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
|
||||
}
|
||||
; CHECK: llvm.recoverframeallocation first argument must be function defined in this module
|
||||
; CHECK: llvm.framerecover first argument must be function defined in this module
|
||||
|
Loading…
x
Reference in New Issue
Block a user