Don't track max alignment during stack object allocations since they can be deleted...
authorEvan Cheng <evan.cheng@apple.com>
Wed, 27 Feb 2008 10:04:56 +0000 (10:04 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 27 Feb 2008 10:04:56 +0000 (10:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47668 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineFrameInfo.h
lib/CodeGen/PrologEpilogInserter.cpp
test/CodeGen/X86/2008-02-27-PEICrash.ll [new file with mode: 0644]

index 856fb34bfaad0871e15b8dcddaecb1174f0b81fa..4be3bd474e0c418e7a669e6e03006294c1680273 100644 (file)
@@ -305,9 +305,6 @@ public:
   /// a postive identifier to represent it.
   ///
   int CreateStackObject(uint64_t Size, unsigned Alignment) {
-    // Keep track of the maximum alignment.
-    if (MaxAlignment < Alignment) MaxAlignment = Alignment;
-    
     assert(Size != 0 && "Cannot allocate zero size stack objects!");
     Objects.push_back(StackObject(Size, Alignment, -1));
     return Objects.size()-NumFixedObjects-1;
@@ -331,7 +328,6 @@ public:
   ///
   int CreateVariableSizedObject() {
     HasVarSizedObjects = true;
-    if (MaxAlignment < 1) MaxAlignment = 1;
     Objects.push_back(StackObject(0, 1, -1));
     return Objects.size()-NumFixedObjects-1;
   }
index 3cc2aa6f61f1c5b5798bf98cafda1221b20f0c32..3106455850931defc66aa541e9a1c24491b15ff4 100644 (file)
@@ -475,8 +475,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &Fn) {
 
   // Remember the required stack alignment in case targets need it to perform
   // dynamic stack alignment.
-  assert(FFI->getMaxAlignment() == MaxAlign &&
-         "Stack alignment calculation broken!");
+  FFI->setMaxAlignment(MaxAlign);
 }
 
 
diff --git a/test/CodeGen/X86/2008-02-27-PEICrash.ll b/test/CodeGen/X86/2008-02-27-PEICrash.ll
new file mode 100644 (file)
index 0000000..b644d8f
--- /dev/null
@@ -0,0 +1,33 @@
+; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2
+
+define i64 @__divsc3(float %a, float %b, float %c, float %d) nounwind readnone  {
+entry:
+       br i1 false, label %bb56, label %bb33
+
+bb33:          ; preds = %entry
+       br label %bb56
+
+bb56:          ; preds = %bb33, %entry
+       %tmp36.pn = phi float [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %entry ]         ; <float> [#uses=1]
+       %b.pn509 = phi float [ %b, %bb33 ], [ %a, %entry ]              ; <float> [#uses=1]
+       %a.pn = phi float [ %a, %bb33 ], [ %b, %entry ]         ; <float> [#uses=1]
+       %tmp41.pn508 = phi float [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %entry ]              ; <float> [#uses=1]
+       %tmp51.pn = phi float [ 0.000000e+00, %bb33 ], [ %a, %entry ]           ; <float> [#uses=1]
+       %tmp44.pn = mul float %tmp36.pn, %b.pn509               ; <float> [#uses=1]
+       %tmp46.pn = add float %tmp44.pn, %a.pn          ; <float> [#uses=1]
+       %tmp53.pn = sub float 0.000000e+00, %tmp51.pn           ; <float> [#uses=1]
+       %x.0 = fdiv float %tmp46.pn, %tmp41.pn508               ; <float> [#uses=1]
+       %y.0 = fdiv float %tmp53.pn, 0.000000e+00               ; <float> [#uses=1]
+       br i1 false, label %bb433, label %bb98
+
+bb98:          ; preds = %bb56
+       %tmp102 = mul float 0.000000e+00, %a            ; <float> [#uses=1]
+       %tmp106 = mul float 0.000000e+00, %b            ; <float> [#uses=1]
+       br label %bb433
+
+bb433:         ; preds = %bb98, %bb56
+       %x.1 = phi float [ %tmp102, %bb98 ], [ %x.0, %bb56 ]            ; <float> [#uses=0]
+       %y.1 = phi float [ %tmp106, %bb98 ], [ %y.0, %bb56 ]            ; <float> [#uses=1]
+       %tmp460 = add float %y.1, 0.000000e+00          ; <float> [#uses=0]
+       ret i64 0
+}