uint64_t Offset = TD->getIndexedOffset(Ptr->getType(),
(Value**)Ops+1, NumOps-1);
Constant *C = ConstantInt::get(TD->getIntPtrType(), Offset+BasePtr);
- return Context.getConstantExprIntToPtr(C, ResultTy);
+ return ConstantExpr::getIntToPtr(C, ResultTy);
}
/// FoldBitCast - Constant fold bitcast, symbolically evaluating it with
if (DstEltTy->isFloatingPoint()) {
// Fold to an vector of integers with same size as our FP type.
unsigned FPWidth = DstEltTy->getPrimitiveSizeInBits();
- const Type *DestIVTy = Context.getVectorType(
- Context.getIntegerType(FPWidth), NumDstElt);
+ const Type *DestIVTy = VectorType::get(
+ IntegerType::get(FPWidth), NumDstElt);
// Recursively handle this integer conversion, if possible.
C = FoldBitCast(C, DestIVTy, TD, Context);
if (!C) return 0;
// Finally, VMCore can handle this now that #elts line up.
- return Context.getConstantExprBitCast(C, DestTy);
+ return ConstantExpr::getBitCast(C, DestTy);
}
// Okay, we know the destination is integer, if the input is FP, convert
// it to integer first.
if (SrcEltTy->isFloatingPoint()) {
unsigned FPWidth = SrcEltTy->getPrimitiveSizeInBits();
- const Type *SrcIVTy = Context.getVectorType(
- Context.getIntegerType(FPWidth), NumSrcElt);
+ const Type *SrcIVTy = VectorType::get(
+ IntegerType::get(FPWidth), NumSrcElt);
// Ask VMCore to do the conversion now that #elts line up.
- C = Context.getConstantExprBitCast(C, SrcIVTy);
+ C = ConstantExpr::getBitCast(C, SrcIVTy);
CV = dyn_cast<ConstantVector>(C);
if (!CV) return 0; // If VMCore wasn't able to fold it, bail out.
}
SmallVector<Constant*, 32> Result;
if (NumDstElt < NumSrcElt) {
// Handle: bitcast (<4 x i32> <i32 0, i32 1, i32 2, i32 3> to <2 x i64>)
- Constant *Zero = Context.getNullValue(DstEltTy);
+ Constant *Zero = Constant::getNullValue(DstEltTy);
unsigned Ratio = NumSrcElt/NumDstElt;
unsigned SrcBitSize = SrcEltTy->getPrimitiveSizeInBits();
unsigned SrcElt = 0;
if (!Src) return 0; // Reject constantexpr elements.
// Zero extend the element to the right size.
- Src = Context.getConstantExprZExt(Src, Elt->getType());
+ Src = ConstantExpr::getZExt(Src, Elt->getType());
// Shift it to the right place, depending on endianness.
- Src = Context.getConstantExprShl(Src,
+ Src = ConstantExpr::getShl(Src,
ConstantInt::get(Src->getType(), ShiftAmt));
ShiftAmt += isLittleEndian ? SrcBitSize : -SrcBitSize;
// Mix it in.
- Elt = Context.getConstantExprOr(Elt, Src);
+ Elt = ConstantExpr::getOr(Elt, Src);
}
Result.push_back(Elt);
}
for (unsigned j = 0; j != Ratio; ++j) {
// Shift the piece of the value into the right place, depending on
// endianness.
- Constant *Elt = Context.getConstantExprLShr(Src,
+ Constant *Elt = ConstantExpr::getLShr(Src,
ConstantInt::get(Src->getType(), ShiftAmt));
ShiftAmt += isLittleEndian ? DstBitSize : -DstBitSize;
// Truncate and remember this piece.
- Result.push_back(Context.getConstantExprTrunc(Elt, DstEltTy));
+ Result.push_back(ConstantExpr::getTrunc(Elt, DstEltTy));
}
}
}
- return Context.getConstantVector(Result.data(), Result.size());
+ return ConstantVector::get(Result.data(), Result.size());
}
}
const TargetData *TD) {
if (PHINode *PN = dyn_cast<PHINode>(I)) {
if (PN->getNumIncomingValues() == 0)
- return Context.getUndef(PN->getType());
+ return UndefValue::get(PN->getType());
Constant *Result = dyn_cast<Constant>(PN->getIncomingValue(0));
if (Result == 0) return 0;
Context))
return C;
- return Context.getConstantExpr(Opcode, Ops[0], Ops[1]);
+ return ConstantExpr::get(Opcode, Ops[0], Ops[1]);
}
switch (Opcode) {
Constant *Mask =
ConstantInt::get(Context, APInt::getLowBitsSet(InWidth,
TD->getPointerSizeInBits()));
- Input = Context.getConstantExprAnd(Input, Mask);
+ Input = ConstantExpr::getAnd(Input, Mask);
}
// Do a zext or trunc to get to the dest size.
- return Context.getConstantExprIntegerCast(Input, DestTy, false);
+ return ConstantExpr::getIntegerCast(Input, DestTy, false);
}
}
- return Context.getConstantExprCast(Opcode, Ops[0], DestTy);
+ return ConstantExpr::getCast(Opcode, Ops[0], DestTy);
case Instruction::IntToPtr:
// If the input is a ptrtoint, turn the pair into a ptr to ptr bitcast if
// the int size is >= the ptr size. This requires knowing the width of a
if (CE->getOpcode() == Instruction::PtrToInt) {
Constant *Input = CE->getOperand(0);
Constant *C = FoldBitCast(Input, DestTy, *TD, Context);
- return C ? C : Context.getConstantExprBitCast(Input, DestTy);
+ return C ? C : ConstantExpr::getBitCast(Input, DestTy);
}
// If there's a constant offset added to the integer value before
// it is casted back to a pointer, see if the expression can be
if (ElemIdx.ult(APInt(ElemIdx.getBitWidth(),
AT->getNumElements()))) {
Constant *Index[] = {
- Context.getNullValue(CE->getType()),
+ Constant::getNullValue(CE->getType()),
ConstantInt::get(Context, ElemIdx)
};
return
- Context.getConstantExprGetElementPtr(GV, &Index[0], 2);
+ ConstantExpr::getGetElementPtr(GV, &Index[0], 2);
}
}
}
}
}
}
- return Context.getConstantExprCast(Opcode, Ops[0], DestTy);
+ return ConstantExpr::getCast(Opcode, Ops[0], DestTy);
case Instruction::Trunc:
case Instruction::ZExt:
case Instruction::SExt:
case Instruction::SIToFP:
case Instruction::FPToUI:
case Instruction::FPToSI:
- return Context.getConstantExprCast(Opcode, Ops[0], DestTy);
+ return ConstantExpr::getCast(Opcode, Ops[0], DestTy);
case Instruction::BitCast:
if (TD)
if (Constant *C = FoldBitCast(Ops[0], DestTy, *TD, Context))
return C;
- return Context.getConstantExprBitCast(Ops[0], DestTy);
+ return ConstantExpr::getBitCast(Ops[0], DestTy);
case Instruction::Select:
- return Context.getConstantExprSelect(Ops[0], Ops[1], Ops[2]);
+ return ConstantExpr::getSelect(Ops[0], Ops[1], Ops[2]);
case Instruction::ExtractElement:
- return Context.getConstantExprExtractElement(Ops[0], Ops[1]);
+ return ConstantExpr::getExtractElement(Ops[0], Ops[1]);
case Instruction::InsertElement:
- return Context.getConstantExprInsertElement(Ops[0], Ops[1], Ops[2]);
+ return ConstantExpr::getInsertElement(Ops[0], Ops[1], Ops[2]);
case Instruction::ShuffleVector:
- return Context.getConstantExprShuffleVector(Ops[0], Ops[1], Ops[2]);
+ return ConstantExpr::getShuffleVector(Ops[0], Ops[1], Ops[2]);
case Instruction::GetElementPtr:
if (Constant *C = SymbolicallyEvaluateGEP(Ops, NumOps, DestTy, Context, TD))
return C;
- return Context.getConstantExprGetElementPtr(Ops[0], Ops+1, NumOps-1);
+ return ConstantExpr::getGetElementPtr(Ops[0], Ops+1, NumOps-1);
}
}
if (CE0->getOpcode() == Instruction::IntToPtr) {
// Convert the integer value to the right size to ensure we get the
// proper extension or truncation.
- Constant *C = Context.getConstantExprIntegerCast(CE0->getOperand(0),
+ Constant *C = ConstantExpr::getIntegerCast(CE0->getOperand(0),
IntPtrTy, false);
- Constant *NewOps[] = { C, Context.getNullValue(C->getType()) };
+ Constant *NewOps[] = { C, Constant::getNullValue(C->getType()) };
return ConstantFoldCompareInstOperands(Predicate, NewOps, 2,
Context, TD);
}
if (CE0->getOpcode() == Instruction::PtrToInt &&
CE0->getType() == IntPtrTy) {
Constant *C = CE0->getOperand(0);
- Constant *NewOps[] = { C, Context.getNullValue(C->getType()) };
+ Constant *NewOps[] = { C, Constant::getNullValue(C->getType()) };
// FIXME!
return ConstantFoldCompareInstOperands(Predicate, NewOps, 2,
Context, TD);
if (CE0->getOpcode() == Instruction::IntToPtr) {
// Convert the integer value to the right size to ensure we get the
// proper extension or truncation.
- Constant *C0 = Context.getConstantExprIntegerCast(CE0->getOperand(0),
+ Constant *C0 = ConstantExpr::getIntegerCast(CE0->getOperand(0),
IntPtrTy, false);
- Constant *C1 = Context.getConstantExprIntegerCast(CE1->getOperand(0),
+ Constant *C1 = ConstantExpr::getIntegerCast(CE1->getOperand(0),
IntPtrTy, false);
Constant *NewOps[] = { C0, C1 };
return ConstantFoldCompareInstOperands(Predicate, NewOps, 2,
}
}
}
- return Context.getConstantExprCompare(Predicate, Ops[0], Ops[1]);
+ return ConstantExpr::getCompare(Predicate, Ops[0], Ops[1]);
}
Constant *llvm::ConstantFoldLoadThroughGEPConstantExpr(Constant *C,
ConstantExpr *CE,
LLVMContext &Context) {
- if (CE->getOperand(1) != Context.getNullValue(CE->getOperand(1)->getType()))
+ if (CE->getOperand(1) != Constant::getNullValue(CE->getOperand(1)->getType()))
return 0; // Do not allow stepping over the value!
// Loop over all of the operands, tracking down which value we are
if (ConstantStruct *CS = dyn_cast<ConstantStruct>(C)) {
C = CS->getOperand(El);
} else if (isa<ConstantAggregateZero>(C)) {
- C = Context.getNullValue(STy->getElementType(El));
+ C = Constant::getNullValue(STy->getElementType(El));
} else if (isa<UndefValue>(C)) {
- C = Context.getUndef(STy->getElementType(El));
+ C = UndefValue::get(STy->getElementType(El));
} else {
return 0;
}
if (ConstantArray *CA = dyn_cast<ConstantArray>(C))
C = CA->getOperand(CI->getZExtValue());
else if (isa<ConstantAggregateZero>(C))
- C = Context.getNullValue(ATy->getElementType());
+ C = Constant::getNullValue(ATy->getElementType());
else if (isa<UndefValue>(C))
- C = Context.getUndef(ATy->getElementType());
+ C = UndefValue::get(ATy->getElementType());
else
return 0;
} else if (const VectorType *PTy = dyn_cast<VectorType>(*I)) {
if (ConstantVector *CP = dyn_cast<ConstantVector>(C))
C = CP->getOperand(CI->getZExtValue());
else if (isa<ConstantAggregateZero>(C))
- C = Context.getNullValue(PTy->getElementType());
+ C = Constant::getNullValue(PTy->getElementType());
else if (isa<UndefValue>(C))
- C = Context.getUndef(PTy->getElementType());
+ C = UndefValue::get(PTy->getElementType());
else
return 0;
} else {
}
if (Ty == Type::FloatTy)
- return Context.getConstantFP(APFloat((float)V));
+ return ConstantFP::get(Context, APFloat((float)V));
if (Ty == Type::DoubleTy)
- return Context.getConstantFP(APFloat(V));
+ return ConstantFP::get(Context, APFloat(V));
llvm_unreachable("Can only constant fold float/double");
return 0; // dummy return to suppress warning
}
}
if (Ty == Type::FloatTy)
- return Context.getConstantFP(APFloat((float)V));
+ return ConstantFP::get(Context, APFloat((float)V));
if (Ty == Type::DoubleTy)
- return Context.getConstantFP(APFloat(V));
+ return ConstantFP::get(Context, APFloat(V));
llvm_unreachable("Can only constant fold float/double");
return 0; // dummy return to suppress warning
}
if (V >= -0.0)
return ConstantFoldFP(sqrt, V, Ty, Context);
else // Undefined
- return Context.getNullValue(Ty);
+ return Constant::getNullValue(Ty);
}
break;
case 's':
}
} else if (ConstantInt *Op2C = dyn_cast<ConstantInt>(Operands[1])) {
if (Name == "llvm.powi.f32") {
- return Context.getConstantFP(APFloat((float)std::pow((float)Op1V,
+ return ConstantFP::get(Context, APFloat((float)std::pow((float)Op1V,
(int)Op2C->getZExtValue())));
} else if (Name == "llvm.powi.f64") {
- return Context.getConstantFP(APFloat((double)std::pow((double)Op1V,
+ return ConstantFP::get(Context, APFloat((double)std::pow((double)Op1V,
(int)Op2C->getZExtValue())));
}
}