Author: hans
Date: Thu Jan 14 11:52:28 2016
New Revision: 257779
URL: http://llvm.org/viewvc/llvm-project?rev=257779&view=rev
Log:
Merging r257730:
r257730 | majnemer | 2016-01-13 17:20:03 -0800 (Wed, 13 Jan 2016) | 11 lines
[X86] Don't alter HasOpaqueSPAdjustment after we've relied on it
We rely on HasOpaqueSPAdjustment not changing after we've calculated
things based on it. Things like whether or not we can use 'rep;movs' to
copy bytes around, that sort of thing. If it changes, invariants in the
backend will quietly break. This situation arose when we had a call to
memcpy *and* a COPY of the FLAGS register where we would attempt to
reference local variables using %esi, a register that was clobbered by
the 'rep;movs'.
This fixes PR26124.
Added:
llvm/branches/release_38/test/CodeGen/X86/x86-repmov-copy-eflags.ll
- copied unchanged from r257730,
llvm/trunk/test/CodeGen/X86/x86-repmov-copy-eflags.ll
Modified:
llvm/branches/release_38/ (props changed)
llvm/branches/release_38/include/llvm/CodeGen/MachineFrameInfo.h
llvm/branches/release_38/include/llvm/Target/TargetLowering.h
llvm/branches/release_38/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
llvm/branches/release_38/lib/Target/X86/X86FrameLowering.cpp
llvm/branches/release_38/lib/Target/X86/X86ISelLowering.cpp
Propchange: llvm/branches/release_38/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 14 11:52:28 2016
@@ -1,3 +1,3 @@
/llvm/branches/Apple/Pertwee:110850,110961
/llvm/branches/type-system-rewrite:133420-134817
-/llvm/trunk:155241,257645,257648
+/llvm/trunk:155241,257645,257648,257730
Modified: llvm/branches/release_38/include/llvm/CodeGen/MachineFrameInfo.h
URL:
http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/include/llvm/CodeGen/MachineFrameInfo.h?rev=257779&r1=257778&r2=257779&view=diff
==
--- llvm/branches/release_38/include/llvm/CodeGen/MachineFrameInfo.h (original)
+++ llvm/branches/release_38/include/llvm/CodeGen/MachineFrameInfo.h Thu Jan 14
11:52:28 2016
@@ -251,6 +251,10 @@ class MachineFrameInfo {
/// opaque mechanism like inline assembly or Win32 EH.
bool HasOpaqueSPAdjustment;
+ /// True if the function contains operations which will lower down to
+ /// instructions which manipulate the stack pointer.
+ bool HasCopyImplyingStackAdjustment;
+
/// True if the function contains a call to the llvm.vastart intrinsic.
bool HasVAStart;
@@ -288,6 +292,7 @@ public:
LocalFrameMaxAlign = 0;
UseLocalStackAllocationBlock = false;
HasOpaqueSPAdjustment = false;
+HasCopyImplyingStackAdjustment = false;
HasVAStart = false;
HasMustTailInVarArgFunc = false;
Save = nullptr;
@@ -493,6 +498,15 @@ public:
bool hasOpaqueSPAdjustment() const { return HasOpaqueSPAdjustment; }
void setHasOpaqueSPAdjustment(bool B) { HasOpaqueSPAdjustment = B; }
+ /// Returns true if the function contains operations which will lower down to
+ /// instructions which manipulate the stack pointer.
+ bool hasCopyImplyingStackAdjustment() const {
+return HasCopyImplyingStackAdjustment;
+ }
+ void setHasCopyImplyingStackAdjustment(bool B) {
+HasCopyImplyingStackAdjustment = B;
+ }
+
/// Returns true if the function calls the llvm.va_start intrinsic.
bool hasVAStart() const { return HasVAStart; }
void setHasVAStart(bool B) { HasVAStart = B; }
Modified: llvm/branches/release_38/include/llvm/Target/TargetLowering.h
URL:
http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/include/llvm/Target/TargetLowering.h?rev=257779&r1=257778&r2=257779&view=diff
==
--- llvm/branches/release_38/include/llvm/Target/TargetLowering.h (original)
+++ llvm/branches/release_38/include/llvm/Target/TargetLowering.h Thu Jan 14
11:52:28 2016
@@ -2270,7 +2270,7 @@ public:
}
/// Return true if the MachineFunction contains a COPY which would imply
- /// HasOpaqueSPAdjustment.
+ /// HasCopyImplyingStackAdjustment.
virtual bool hasCopyImplyingStackAdjustment(MachineFunction *MF) const {
return false;
}
Modified: llvm/branches/release_38/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
URL:
http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=257779&r1=257778&r2=257779&view=diff
==
--- llvm/branches/release_38/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
(original)
+++ llvm/branches/release_38/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Thu
Jan 14 11:52:28 2016
@@ -634,7 +634,7 @@ bool SelectionDAGISel::runOnMachineFunct
}