diff options
author | Brian Gaeke <gaeke@uiuc.edu> | 2004-06-18 08:45:52 +0000 |
---|---|---|
committer | Brian Gaeke <gaeke@uiuc.edu> | 2004-06-18 08:45:52 +0000 |
commit | 694f7b78d9bc140ff58311f1576c5c51aa3eec8f (patch) | |
tree | 26bb9920c988343fe06ab301403f0d070da5b962 | |
parent | fcc30aca1b0e8ed241f8e56d15372b7a6865e914 (diff) | |
download | bcm5719-llvm-694f7b78d9bc140ff58311f1576c5c51aa3eec8f.tar.gz bcm5719-llvm-694f7b78d9bc140ff58311f1576c5c51aa3eec8f.zip |
Make visitAllocaInst() look more like its X86 counterpart.
llvm-svn: 14229
-rw-r--r-- | llvm/lib/Target/SparcV8/InstSelectSimple.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/llvm/lib/Target/SparcV8/InstSelectSimple.cpp b/llvm/lib/Target/SparcV8/InstSelectSimple.cpp index e86e25b9cfe..1bfd4da278c 100644 --- a/llvm/lib/Target/SparcV8/InstSelectSimple.cpp +++ b/llvm/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 |