Author: criswell Date: Mon Feb 18 17:06:24 2008 New Revision: 47291 URL: http://llvm.org/viewvc/llvm-project?rev=47291&view=rev Log: Taught pool allocation how to deal with the new function attributes.
Modified: poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp Modified: poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp?rev=47291&r1=47290&r2=47291&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp Mon Feb 18 17:06:24 2008 @@ -24,6 +24,7 @@ #include "llvm/Instructions.h" #include "llvm/Module.h" #include "llvm/Constants.h" +#include "llvm/ParameterAttributes.h" #include "llvm/Support/CFG.h" #include "llvm/Target/TargetData.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" @@ -424,6 +425,29 @@ {TIME_REGION(X, "CloneFunctionInto"); CloneFunctionInto(New, &F, ValueMap, Returns); } + + // + // The CloneFunctionInto() function will copy the parameter attributes + // verbatim. This is incorrect; each attribute should be shifted one so + // that the pool descriptor has no attributes. + // + const ParamAttrsList * OldAttrs = New->getParamAttrs(); + ParamAttrsVector NewAttrsVector; + for (unsigned index = 0; index < OldAttrs->size(); ++index) { + // Find the argument index + unsigned argIndex = OldAttrs->getParamIndex (index); + + // If it's not the return value, move the attribute to the next + // parameter. + if (argIndex) ++argIndex; + + // Add the parameter to the new list. + NewAttrsVector.push_back(ParamAttrsWithIndex::get(argIndex,OldAttrs->getParamAttrsAtIndex(index))); + } + + // Assign the new attributes to the function clone + New->setParamAttrs (ParamAttrsList::get (NewAttrsVector)); + // Invert the ValueMap into the NewToOldValueMap std::map<Value*, const Value*> &NewToOldValueMap = FI.NewToOldValueMap; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits