aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/ExprTypeConvert.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms/ExprTypeConvert.cpp')
-rw-r--r--lib/Transforms/ExprTypeConvert.cpp185
1 files changed, 0 insertions, 185 deletions
diff --git a/lib/Transforms/ExprTypeConvert.cpp b/lib/Transforms/ExprTypeConvert.cpp
index 4ab4fe5fee..9a7f18871b 100644
--- a/lib/Transforms/ExprTypeConvert.cpp
+++ b/lib/Transforms/ExprTypeConvert.cpp
@@ -252,32 +252,6 @@ bool llvm::ExpressionConvertibleToType(Value *V, const Type *Ty,
if (ElTy) break; // Found a number of zeros we can strip off!
- // Otherwise, we can convert a GEP from one form to the other iff the
- // current gep is of the form 'getelementptr sbyte*, long N
- // and we could convert this to an appropriate GEP for the new type.
- //
- if (GEP->getNumOperands() == 2 &&
- GEP->getType() == PointerType::get(Type::SByteTy)) {
-
- // Do not Check to see if our incoming pointer can be converted
- // to be a ptr to an array of the right type... because in more cases than
- // not, it is simply not analyzable because of pointer/array
- // discrepancies. To fix this, we will insert a cast before the GEP.
- //
-
- // Check to see if 'N' is an expression that can be converted to
- // the appropriate size... if so, allow it.
- //
- std::vector<Value*> Indices;
- const Type *ElTy = ConvertibleToGEP(PTy, I->getOperand(1), Indices, TD);
- if (ElTy == PVTy) {
- if (!ExpressionConvertibleToType(I->getOperand(0),
- PointerType::get(ElTy), CTMap, TD))
- return false; // Can't continue, ExConToTy might have polluted set!
- break;
- }
- }
-
// Otherwise, it could be that we have something like this:
// getelementptr [[sbyte] *] * %reg115, long %reg138 ; [sbyte]**
// and want to convert it into something like this:
@@ -459,32 +433,6 @@ Value *llvm::ConvertExpressionToType(Value *V, const Type *Ty,
}
}
- if (Res == 0 && GEP->getNumOperands() == 2 &&
- GEP->getType() == PointerType::get(Type::SByteTy)) {
-
- // Otherwise, we can convert a GEP from one form to the other iff the
- // current gep is of the form 'getelementptr sbyte*, unsigned N
- // and we could convert this to an appropriate GEP for the new type.
- //
- const PointerType *NewSrcTy = PointerType::get(PVTy);
- BasicBlock::iterator It = I;
-
- // Check to see if 'N' is an expression that can be converted to
- // the appropriate size... if so, allow it.
- //
- std::vector<Value*> Indices;
- const Type *ElTy = ConvertibleToGEP(NewSrcTy, I->getOperand(1),
- Indices, TD, &It);
- if (ElTy) {
- assert(ElTy == PVTy && "Internal error, setup wrong!");
- Res = new GetElementPtrInst(Constant::getNullValue(NewSrcTy),
- Indices, Name);
- VMC.ExprMap[I] = Res;
- Res->setOperand(0, ConvertExpressionToType(I->getOperand(0),
- NewSrcTy, VMC, TD));
- }
- }
-
// Otherwise, it could be that we have something like this:
// getelementptr [[sbyte] *] * %reg115, uint %reg138 ; [sbyte]**
// and want to convert it into something like this:
@@ -637,23 +585,6 @@ static bool OperandConvertibleToType(User *U, Value *V, const Type *Ty,
return true;
case Instruction::Add:
- if (isa<PointerType>(Ty)) {
- Value *IndexVal = I->getOperand(V == I->getOperand(0) ? 1 : 0);
- std::vector<Value*> Indices;
- if (const Type *ETy = ConvertibleToGEP(Ty, IndexVal, Indices, TD)) {
- const Type *RetTy = PointerType::get(ETy);
-
- // Only successful if we can convert this type to the required type
- if (ValueConvertibleToType(I, RetTy, CTMap, TD)) {
- CTMap[I] = RetTy;
- return true;
- }
- // We have to return failure here because ValueConvertibleToType could
- // have polluted our map
- return false;
- }
- }
- // FALLTHROUGH
case Instruction::Sub: {
if (!Ty->isInteger() && !Ty->isFloatingPoint()) return false;
@@ -780,47 +711,6 @@ static bool OperandConvertibleToType(User *U, Value *V, const Type *Ty,
return false;
}
- case Instruction::GetElementPtr:
- if (V != I->getOperand(0) || !isa<PointerType>(Ty)) return false;
-
- // If we have a two operand form of getelementptr, this is really little
- // more than a simple addition. As with addition, check to see if the
- // getelementptr instruction can be changed to index into the new type.
- //
- if (I->getNumOperands() == 2) {
- const Type *OldElTy = cast<PointerType>(I->getType())->getElementType();
- uint64_t DataSize = TD.getTypeSize(OldElTy);
- Value *Index = I->getOperand(1);
- Instruction *TempScale = 0;
-
- // If the old data element is not unit sized, we have to create a scale
- // instruction so that ConvertibleToGEP will know the REAL amount we are
- // indexing by. Note that this is never inserted into the instruction
- // stream, so we have to delete it when we're done.
- //
- if (DataSize != 1) {
- Value *CST;
- if (Index->getType()->isSigned())
- CST = ConstantSInt::get(Index->getType(), DataSize);
- else
- CST = ConstantUInt::get(Index->getType(), DataSize);
-
- TempScale = BinaryOperator::create(Instruction::Mul, Index, CST);
- Index = TempScale;
- }
-
- // Check to see if the second argument is an expression that can
- // be converted to the appropriate size... if so, allow it.
- //
- std::vector<Value*> Indices;
- const Type *ElTy = ConvertibleToGEP(Ty, Index, Indices, TD);
- delete TempScale; // Free our temporary multiply if we made it
-
- if (ElTy == 0) return false; // Cannot make conversion...
- return ValueConvertibleToType(I, PointerType::get(ElTy), CTMap, TD);
- }
- return false;
-
case Instruction::PHI: {
PHINode *PN = cast<PHINode>(I);
// Be conservative if we find a giant PHI node.
@@ -964,23 +854,6 @@ static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal,
break;
case Instruction::Add:
- if (isa<PointerType>(NewTy)) {
- Value *IndexVal = I->getOperand(OldVal == I->getOperand(0) ? 1 : 0);
- std::vector<Value*> Indices;
- BasicBlock::iterator It = I;
-
- if (const Type *ETy = ConvertibleToGEP(NewTy, IndexVal, Indices, TD,&It)){
- // If successful, convert the add to a GEP
- //const Type *RetTy = PointerType::get(ETy);
- // First operand is actually the given pointer...
- Res = new GetElementPtrInst(NewVal, Indices, Name);
- assert(cast<PointerType>(Res->getType())->getElementType() == ETy &&
- "ConvertibleToGEP broken!");
- break;
- }
- }
- // FALLTHROUGH
-
case Instruction::Sub:
case Instruction::SetEQ:
case Instruction::SetNE: {
@@ -1102,64 +975,6 @@ static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal,
break;
}
-
- case Instruction::GetElementPtr: {
- // Convert a one index getelementptr into just about anything that is
- // desired.
- //
- BasicBlock::iterator It = I;
- const Type *OldElTy = cast<PointerType>(I->getType())->getElementType();
- uint64_t DataSize = TD.getTypeSize(OldElTy);
- Value *Index = I->getOperand(1);
-
- if (DataSize != 1) {
- // Insert a multiply of the old element type is not a unit size...
- Value *CST;
- if (Index->getType()->isSigned())
- CST = ConstantSInt::get(Index->getType(), DataSize);
- else
- CST = ConstantUInt::get(Index->getType(), DataSize);
-
- Index = BinaryOperator::create(Instruction::Mul, Index, CST, "scale", It);
- }
-
- // Perform the conversion now...
- //
- std::vector<Value*> Indices;
- const Type *ElTy = ConvertibleToGEP(NewVal->getType(),Index,Indices,TD,&It);
- assert(ElTy != 0 && "GEP Conversion Failure!");
- Res = new GetElementPtrInst(NewVal, Indices, Name);
- assert(Res->getType() == PointerType::get(ElTy) &&
- "ConvertibleToGet failed!");
- }
-#if 0
- if (I->getType() == PointerType::get(Type::SByteTy)) {
- // Convert a getelementptr sbyte * %reg111, uint 16 freely back to
- // anything that is a pointer type...
- //
- BasicBlock::iterator It = I;
-
- // Check to see if the second argument is an expression that can
- // be converted to the appropriate size... if so, allow it.
- //
- std::vector<Value*> Indices;
- const Type *ElTy = ConvertibleToGEP(NewVal->getType(), I->getOperand(1),
- Indices, TD, &It);
- assert(ElTy != 0 && "GEP Conversion Failure!");
-
- Res = new GetElementPtrInst(NewVal, Indices, Name);
- } else {
- // Convert a getelementptr ulong * %reg123, uint %N
- // to getelementptr long * %reg123, uint %N
- // ... where the type must simply stay the same size...
- //
- GetElementPtrInst *GEP = cast<GetElementPtrInst>(I);
- std::vector<Value*> Indices(GEP->idx_begin(), GEP->idx_end());
- Res = new GetElementPtrInst(NewVal, Indices, Name);
- }
-#endif
- break;
-
case Instruction::PHI: {
PHINode *OldPN = cast<PHINode>(I);
PHINode *NewPN = new PHINode(NewTy, Name);