summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2013-02-19 23:50:45 +0000
committerChad Rosier <mcrosier@apple.com>2013-02-19 23:50:45 +0000
commitb86f1e5e557f8a00209eef1c6ecb4532b33d7738 (patch)
tree4e5f4b2ded8e1ddb4ee6091f1e7473f6a845627f
parent2f87fed2479017589051a5a99277e4278f6372e3 (diff)
downloadllvm-b86f1e5e557f8a00209eef1c6ecb4532b33d7738.tar.gz
llvm-b86f1e5e557f8a00209eef1c6ecb4532b33d7738.tar.bz2
llvm-b86f1e5e557f8a00209eef1c6ecb4532b33d7738.tar.xz
[ms-inline asm] Force the use of a base pointer if the MachineFunction includes
MS-style inline assembly. This is a follow-on to r175334. Forcing a FP to be emitted doesn't ensure it will be used. Therefore, force the base pointer as well. We now treat MS inline assembly in the same way we treat functions with dynamic stack realignment and VLAs. This guarantees the BP will be used to reference parameters and locals. rdar://13218191 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175576 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/X86RegisterInfo.cpp6
-rw-r--r--test/CodeGen/X86/ms-inline-asm.ll4
2 files changed, 6 insertions, 4 deletions
diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp
index 401eefb16a..fbe6331e84 100644
--- a/lib/Target/X86/X86RegisterInfo.cpp
+++ b/lib/Target/X86/X86RegisterInfo.cpp
@@ -389,8 +389,10 @@ bool X86RegisterInfo::hasBasePointer(const MachineFunction &MF) const {
return false;
// When we need stack realignment and there are dynamic allocas, we can't
- // reference off of the stack pointer, so we reserve a base pointer.
- if (needsStackRealignment(MF) && MFI->hasVarSizedObjects())
+ // reference off of the stack pointer, so we reserve a base pointer. This
+ // is also true if the function contain MS-style inline assembly.
+ if ((needsStackRealignment(MF) && MFI->hasVarSizedObjects()) ||
+ MF.hasMSInlineAsm())
return true;
return false;
diff --git a/test/CodeGen/X86/ms-inline-asm.ll b/test/CodeGen/X86/ms-inline-asm.ll
index eca174610d..5048a93ad3 100644
--- a/test/CodeGen/X86/ms-inline-asm.ll
+++ b/test/CodeGen/X86/ms-inline-asm.ll
@@ -103,8 +103,8 @@ entry:
; CHECK: {{## InlineAsm End|#NO_APP}}
; CHECK: {{## InlineAsm Start|#APP}}
; CHECK: .intel_syntax
-; CHECK: mov dword ptr [ebp - 8], edi
+; CHECK: mov dword ptr [esi], edi
; CHECK: .att_syntax
; CHECK: {{## InlineAsm End|#NO_APP}}
-; CHECK: movl -8(%ebp), %eax
+; CHECK: movl (%esi), %eax
}