mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
[ms-inline asm] Do not omit the frame pointer if we have ms-inline assembly.
If the frame pointer is omitted, and any stack changes occur in the inline assembly, e.g.: "pusha", then any C local variable or C argument references will be incorrect. I pass no judgement on anyone who would do such a thing. ;) rdar://13218191 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175334 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -131,6 +131,9 @@ class MachineFunction {
|
||||
/// about the control flow of such functions.
|
||||
bool ExposesReturnsTwice;
|
||||
|
||||
/// True if the function includes MS-style inline assembly.
|
||||
bool HasMSInlineAsm;
|
||||
|
||||
MachineFunction(const MachineFunction &) LLVM_DELETED_FUNCTION;
|
||||
void operator=(const MachineFunction&) LLVM_DELETED_FUNCTION;
|
||||
public:
|
||||
@@ -214,6 +217,17 @@ public:
|
||||
void setExposesReturnsTwice(bool B) {
|
||||
ExposesReturnsTwice = B;
|
||||
}
|
||||
|
||||
/// Returns true if the function contains any MS-style inline assembly.
|
||||
bool hasMSInlineAsm() const {
|
||||
return HasMSInlineAsm;
|
||||
}
|
||||
|
||||
/// Set a flag that indicates that the function contains MS-style inline
|
||||
/// assembly.
|
||||
void setHasMSInlineAsm(bool B) {
|
||||
HasMSInlineAsm = B;
|
||||
}
|
||||
|
||||
/// getInfo - Keep track of various per-function pieces of information for
|
||||
/// backends that would like to do so.
|
||||
|
@@ -642,6 +642,9 @@ public:
|
||||
bool isKill() const { return getOpcode() == TargetOpcode::KILL; }
|
||||
bool isImplicitDef() const { return getOpcode()==TargetOpcode::IMPLICIT_DEF; }
|
||||
bool isInlineAsm() const { return getOpcode() == TargetOpcode::INLINEASM; }
|
||||
bool isMSInlineAsm() const {
|
||||
return getOpcode() == TargetOpcode::INLINEASM && getInlineAsmDialect();
|
||||
}
|
||||
bool isStackAligningInlineAsm() const;
|
||||
InlineAsm::AsmDialect getInlineAsmDialect() const;
|
||||
bool isInsertSubreg() const {
|
||||
|
Reference in New Issue
Block a user