mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
land David Blaikie's patch to de-constify Type, with a few tweaks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135375 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -155,12 +155,12 @@ CallGraphNode *ArgPromotion::PromoteArguments(CallGraphNode *CGN) {
|
||||
for (unsigned i = 0; i != PointerArgs.size(); ++i) {
|
||||
bool isByVal = F->paramHasAttr(PointerArgs[i].second+1, Attribute::ByVal);
|
||||
Argument *PtrArg = PointerArgs[i].first;
|
||||
const Type *AgTy = cast<PointerType>(PtrArg->getType())->getElementType();
|
||||
Type *AgTy = cast<PointerType>(PtrArg->getType())->getElementType();
|
||||
|
||||
// If this is a byval argument, and if the aggregate type is small, just
|
||||
// pass the elements, which is always safe.
|
||||
if (isByVal) {
|
||||
if (const StructType *STy = dyn_cast<StructType>(AgTy)) {
|
||||
if (StructType *STy = dyn_cast<StructType>(AgTy)) {
|
||||
if (maxElements > 0 && STy->getNumElements() > maxElements) {
|
||||
DEBUG(dbgs() << "argpromotion disable promoting argument '"
|
||||
<< PtrArg->getName() << "' because it would require adding more"
|
||||
@@ -190,7 +190,7 @@ CallGraphNode *ArgPromotion::PromoteArguments(CallGraphNode *CGN) {
|
||||
// If the argument is a recursive type and we're in a recursive
|
||||
// function, we could end up infinitely peeling the function argument.
|
||||
if (isSelfRecursive) {
|
||||
if (const StructType *STy = dyn_cast<StructType>(AgTy)) {
|
||||
if (StructType *STy = dyn_cast<StructType>(AgTy)) {
|
||||
bool RecursiveType = false;
|
||||
for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
|
||||
if (STy->getElementType(i) == PtrArg->getType()) {
|
||||
@@ -492,7 +492,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
|
||||
// Start by computing a new prototype for the function, which is the same as
|
||||
// the old function, but has modified arguments.
|
||||
const FunctionType *FTy = F->getFunctionType();
|
||||
FunctionType *FTy = F->getFunctionType();
|
||||
std::vector<Type*> Params;
|
||||
|
||||
typedef std::set<IndicesVector> ScalarizeTable;
|
||||
@@ -527,8 +527,8 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
++I, ++ArgIndex) {
|
||||
if (ByValArgsToTransform.count(I)) {
|
||||
// Simple byval argument? Just add all the struct element types.
|
||||
const Type *AgTy = cast<PointerType>(I->getType())->getElementType();
|
||||
const StructType *STy = cast<StructType>(AgTy);
|
||||
Type *AgTy = cast<PointerType>(I->getType())->getElementType();
|
||||
StructType *STy = cast<StructType>(AgTy);
|
||||
for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
|
||||
Params.push_back(STy->getElementType(i));
|
||||
++NumByValArgsPromoted;
|
||||
@@ -593,7 +593,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
if (Attributes attrs = PAL.getFnAttributes())
|
||||
AttributesVec.push_back(AttributeWithIndex::get(~0, attrs));
|
||||
|
||||
const Type *RetTy = FTy->getReturnType();
|
||||
Type *RetTy = FTy->getReturnType();
|
||||
|
||||
// Work around LLVM bug PR56: the CWriter cannot emit varargs functions which
|
||||
// have zero fixed arguments.
|
||||
@@ -662,8 +662,8 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
|
||||
} else if (ByValArgsToTransform.count(I)) {
|
||||
// Emit a GEP and load for each element of the struct.
|
||||
const Type *AgTy = cast<PointerType>(I->getType())->getElementType();
|
||||
const StructType *STy = cast<StructType>(AgTy);
|
||||
Type *AgTy = cast<PointerType>(I->getType())->getElementType();
|
||||
StructType *STy = cast<StructType>(AgTy);
|
||||
Value *Idxs[2] = {
|
||||
ConstantInt::get(Type::getInt32Ty(F->getContext()), 0), 0 };
|
||||
for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
|
||||
@@ -686,12 +686,12 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
LoadInst *OrigLoad = OriginalLoads[*SI];
|
||||
if (!SI->empty()) {
|
||||
Ops.reserve(SI->size());
|
||||
const Type *ElTy = V->getType();
|
||||
Type *ElTy = V->getType();
|
||||
for (IndicesVector::const_iterator II = SI->begin(),
|
||||
IE = SI->end(); II != IE; ++II) {
|
||||
// Use i32 to index structs, and i64 for others (pointers/arrays).
|
||||
// This satisfies GEP constraints.
|
||||
const Type *IdxTy = (ElTy->isStructTy() ?
|
||||
Type *IdxTy = (ElTy->isStructTy() ?
|
||||
Type::getInt32Ty(F->getContext()) :
|
||||
Type::getInt64Ty(F->getContext()));
|
||||
Ops.push_back(ConstantInt::get(IdxTy, *II));
|
||||
@@ -792,9 +792,9 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
Instruction *InsertPt = NF->begin()->begin();
|
||||
|
||||
// Just add all the struct element types.
|
||||
const Type *AgTy = cast<PointerType>(I->getType())->getElementType();
|
||||
Type *AgTy = cast<PointerType>(I->getType())->getElementType();
|
||||
Value *TheAlloca = new AllocaInst(AgTy, 0, "", InsertPt);
|
||||
const StructType *STy = cast<StructType>(AgTy);
|
||||
StructType *STy = cast<StructType>(AgTy);
|
||||
Value *Idxs[2] = {
|
||||
ConstantInt::get(Type::getInt32Ty(F->getContext()), 0), 0 };
|
||||
|
||||
|
Reference in New Issue
Block a user