Make visitAllocaInst() look more like its X86 counterpart.
authorBrian Gaeke <gaeke@uiuc.edu>
Fri, 18 Jun 2004 08:45:52 +0000 (08:45 +0000)
committerBrian Gaeke <gaeke@uiuc.edu>
Fri, 18 Jun 2004 08:45:52 +0000 (08:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14229 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Sparc/InstSelectSimple.cpp
lib/Target/Sparc/SparcV8ISelSimple.cpp
lib/Target/SparcV8/InstSelectSimple.cpp
lib/Target/SparcV8/SparcV8ISelSimple.cpp

index e86e25b9cfe734ab0b7bfa6fb155b75c328e416f..1bfd4da278cc1e8a62ad330d5cb769f8b2eb7f46 100644 (file)
@@ -905,16 +905,24 @@ void V8ISel::visitAllocaInst(AllocaInst &I) {
   unsigned TmpReg1 = makeAnotherReg (Type::UIntTy);
   unsigned TmpReg2 = makeAnotherReg (Type::UIntTy);
   unsigned StackAdjReg = makeAnotherReg (Type::UIntTy);
-  unsigned DestReg = getReg (I);
 
   // StackAdjReg = (ArraySize * TySize) rounded up to nearest doubleword boundary
   BuildMI (BB, V8::UMULrr, 2, TmpReg1).addReg (ArraySizeReg).addReg (TySizeReg);
+
   // Round up TmpReg1 to nearest doubleword boundary:
   BuildMI (BB, V8::ADDri, 2, TmpReg2).addReg (TmpReg1).addSImm (7);
   BuildMI (BB, V8::ANDri, 2, StackAdjReg).addReg (TmpReg2).addSImm (-8);
-  // Adjust stack, push pointer past trap frame space, put result in DestReg
+
+  // Subtract size from stack pointer, thereby allocating some space.
   BuildMI (BB, V8::SUBrr, 2, V8::SP).addReg (V8::SP).addReg (StackAdjReg);
-  BuildMI (BB, V8::ADDri, 2, DestReg).addReg (V8::SP).addSImm (96);
+
+  // Put a pointer to the space into the result register, by copying
+  // the stack pointer.
+  BuildMI (BB, V8::ADDri, 2, getReg(I)).addReg (V8::SP).addSImm (96);
+
+  // Inform the Frame Information that we have just allocated a variable-sized
+  // object.
+  F->getFrameInfo()->CreateVariableSizedObject();
 }
 
 /// LowerUnknownIntrinsicFunctionCalls - This performs a prepass over the
index e86e25b9cfe734ab0b7bfa6fb155b75c328e416f..1bfd4da278cc1e8a62ad330d5cb769f8b2eb7f46 100644 (file)
@@ -905,16 +905,24 @@ void V8ISel::visitAllocaInst(AllocaInst &I) {
   unsigned TmpReg1 = makeAnotherReg (Type::UIntTy);
   unsigned TmpReg2 = makeAnotherReg (Type::UIntTy);
   unsigned StackAdjReg = makeAnotherReg (Type::UIntTy);
-  unsigned DestReg = getReg (I);
 
   // StackAdjReg = (ArraySize * TySize) rounded up to nearest doubleword boundary
   BuildMI (BB, V8::UMULrr, 2, TmpReg1).addReg (ArraySizeReg).addReg (TySizeReg);
+
   // Round up TmpReg1 to nearest doubleword boundary:
   BuildMI (BB, V8::ADDri, 2, TmpReg2).addReg (TmpReg1).addSImm (7);
   BuildMI (BB, V8::ANDri, 2, StackAdjReg).addReg (TmpReg2).addSImm (-8);
-  // Adjust stack, push pointer past trap frame space, put result in DestReg
+
+  // Subtract size from stack pointer, thereby allocating some space.
   BuildMI (BB, V8::SUBrr, 2, V8::SP).addReg (V8::SP).addReg (StackAdjReg);
-  BuildMI (BB, V8::ADDri, 2, DestReg).addReg (V8::SP).addSImm (96);
+
+  // Put a pointer to the space into the result register, by copying
+  // the stack pointer.
+  BuildMI (BB, V8::ADDri, 2, getReg(I)).addReg (V8::SP).addSImm (96);
+
+  // Inform the Frame Information that we have just allocated a variable-sized
+  // object.
+  F->getFrameInfo()->CreateVariableSizedObject();
 }
 
 /// LowerUnknownIntrinsicFunctionCalls - This performs a prepass over the
index e86e25b9cfe734ab0b7bfa6fb155b75c328e416f..1bfd4da278cc1e8a62ad330d5cb769f8b2eb7f46 100644 (file)
@@ -905,16 +905,24 @@ void V8ISel::visitAllocaInst(AllocaInst &I) {
   unsigned TmpReg1 = makeAnotherReg (Type::UIntTy);
   unsigned TmpReg2 = makeAnotherReg (Type::UIntTy);
   unsigned StackAdjReg = makeAnotherReg (Type::UIntTy);
-  unsigned DestReg = getReg (I);
 
   // StackAdjReg = (ArraySize * TySize) rounded up to nearest doubleword boundary
   BuildMI (BB, V8::UMULrr, 2, TmpReg1).addReg (ArraySizeReg).addReg (TySizeReg);
+
   // Round up TmpReg1 to nearest doubleword boundary:
   BuildMI (BB, V8::ADDri, 2, TmpReg2).addReg (TmpReg1).addSImm (7);
   BuildMI (BB, V8::ANDri, 2, StackAdjReg).addReg (TmpReg2).addSImm (-8);
-  // Adjust stack, push pointer past trap frame space, put result in DestReg
+
+  // Subtract size from stack pointer, thereby allocating some space.
   BuildMI (BB, V8::SUBrr, 2, V8::SP).addReg (V8::SP).addReg (StackAdjReg);
-  BuildMI (BB, V8::ADDri, 2, DestReg).addReg (V8::SP).addSImm (96);
+
+  // Put a pointer to the space into the result register, by copying
+  // the stack pointer.
+  BuildMI (BB, V8::ADDri, 2, getReg(I)).addReg (V8::SP).addSImm (96);
+
+  // Inform the Frame Information that we have just allocated a variable-sized
+  // object.
+  F->getFrameInfo()->CreateVariableSizedObject();
 }
 
 /// LowerUnknownIntrinsicFunctionCalls - This performs a prepass over the
index e86e25b9cfe734ab0b7bfa6fb155b75c328e416f..1bfd4da278cc1e8a62ad330d5cb769f8b2eb7f46 100644 (file)
@@ -905,16 +905,24 @@ void V8ISel::visitAllocaInst(AllocaInst &I) {
   unsigned TmpReg1 = makeAnotherReg (Type::UIntTy);
   unsigned TmpReg2 = makeAnotherReg (Type::UIntTy);
   unsigned StackAdjReg = makeAnotherReg (Type::UIntTy);
-  unsigned DestReg = getReg (I);
 
   // StackAdjReg = (ArraySize * TySize) rounded up to nearest doubleword boundary
   BuildMI (BB, V8::UMULrr, 2, TmpReg1).addReg (ArraySizeReg).addReg (TySizeReg);
+
   // Round up TmpReg1 to nearest doubleword boundary:
   BuildMI (BB, V8::ADDri, 2, TmpReg2).addReg (TmpReg1).addSImm (7);
   BuildMI (BB, V8::ANDri, 2, StackAdjReg).addReg (TmpReg2).addSImm (-8);
-  // Adjust stack, push pointer past trap frame space, put result in DestReg
+
+  // Subtract size from stack pointer, thereby allocating some space.
   BuildMI (BB, V8::SUBrr, 2, V8::SP).addReg (V8::SP).addReg (StackAdjReg);
-  BuildMI (BB, V8::ADDri, 2, DestReg).addReg (V8::SP).addSImm (96);
+
+  // Put a pointer to the space into the result register, by copying
+  // the stack pointer.
+  BuildMI (BB, V8::ADDri, 2, getReg(I)).addReg (V8::SP).addSImm (96);
+
+  // Inform the Frame Information that we have just allocated a variable-sized
+  // object.
+  F->getFrameInfo()->CreateVariableSizedObject();
 }
 
 /// LowerUnknownIntrinsicFunctionCalls - This performs a prepass over the