From cfaf22445cb3293af4503df06fc2ce6ede284652 Mon Sep 17 00:00:00 2001 From: Brian Gaeke Date: Fri, 18 Jun 2004 08:45:52 +0000 Subject: [PATCH] Make visitAllocaInst() look more like its X86 counterpart. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14229 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Sparc/InstSelectSimple.cpp | 14 +++++++++++--- lib/Target/Sparc/SparcV8ISelSimple.cpp | 14 +++++++++++--- lib/Target/SparcV8/InstSelectSimple.cpp | 14 +++++++++++--- lib/Target/SparcV8/SparcV8ISelSimple.cpp | 14 +++++++++++--- 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/lib/Target/Sparc/InstSelectSimple.cpp b/lib/Target/Sparc/InstSelectSimple.cpp index e86e25b9cfe..1bfd4da278c 100644 --- a/lib/Target/Sparc/InstSelectSimple.cpp +++ b/lib/Target/Sparc/InstSelectSimple.cpp @@ -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 diff --git a/lib/Target/Sparc/SparcV8ISelSimple.cpp b/lib/Target/Sparc/SparcV8ISelSimple.cpp index e86e25b9cfe..1bfd4da278c 100644 --- a/lib/Target/Sparc/SparcV8ISelSimple.cpp +++ b/lib/Target/Sparc/SparcV8ISelSimple.cpp @@ -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 diff --git a/lib/Target/SparcV8/InstSelectSimple.cpp b/lib/Target/SparcV8/InstSelectSimple.cpp index e86e25b9cfe..1bfd4da278c 100644 --- a/lib/Target/SparcV8/InstSelectSimple.cpp +++ b/lib/Target/SparcV8/InstSelectSimple.cpp @@ -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 diff --git a/lib/Target/SparcV8/SparcV8ISelSimple.cpp b/lib/Target/SparcV8/SparcV8ISelSimple.cpp index e86e25b9cfe..1bfd4da278c 100644 --- a/lib/Target/SparcV8/SparcV8ISelSimple.cpp +++ b/lib/Target/SparcV8/SparcV8ISelSimple.cpp @@ -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 -- 2.34.1