mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
[IR] Make use of Type::isPtrOrPtrVectorTy/isIntOrIntVectorTy/isFPOrFPVectorTy to shorten code. NFC
llvm-svn: 307491
This commit is contained in:
parent
36d9dcb3f0
commit
86739c18e2
@ -428,7 +428,7 @@ public:
|
||||
|
||||
std::pair<unsigned, MVT> LT = TLI->getTypeLegalizationCost(DL, Ty);
|
||||
|
||||
bool IsFloat = Ty->getScalarType()->isFloatingPointTy();
|
||||
bool IsFloat = Ty->isFPOrFPVectorTy();
|
||||
// Assume that floating point arithmetic operations cost twice as much as
|
||||
// integer operations.
|
||||
unsigned OpCost = (IsFloat ? 2 : 1);
|
||||
|
@ -1517,11 +1517,9 @@ public:
|
||||
const Twine &Name = "") {
|
||||
if (V->getType() == DestTy)
|
||||
return V;
|
||||
if (V->getType()->getScalarType()->isPointerTy() &&
|
||||
DestTy->getScalarType()->isIntegerTy())
|
||||
if (V->getType()->isPtrOrPtrVectorTy() && DestTy->isIntOrIntVectorTy())
|
||||
return CreatePtrToInt(V, DestTy, Name);
|
||||
if (V->getType()->getScalarType()->isIntegerTy() &&
|
||||
DestTy->getScalarType()->isPointerTy())
|
||||
if (V->getType()->isIntOrIntVectorTy() && DestTy->isPtrOrPtrVectorTy())
|
||||
return CreateIntToPtr(V, DestTy, Name);
|
||||
|
||||
return CreateBitCast(V, DestTy, Name);
|
||||
|
@ -598,7 +598,7 @@ Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
|
||||
/// folding.
|
||||
static Constant *stripAndComputeConstantOffsets(const DataLayout &DL, Value *&V,
|
||||
bool AllowNonInbounds = false) {
|
||||
assert(V->getType()->getScalarType()->isPointerTy());
|
||||
assert(V->getType()->isPtrOrPtrVectorTy());
|
||||
|
||||
Type *IntPtrTy = DL.getIntPtrType(V->getType())->getScalarType();
|
||||
APInt Offset = APInt::getNullValue(IntPtrTy->getIntegerBitWidth());
|
||||
@ -627,8 +627,7 @@ static Constant *stripAndComputeConstantOffsets(const DataLayout &DL, Value *&V,
|
||||
}
|
||||
break;
|
||||
}
|
||||
assert(V->getType()->getScalarType()->isPointerTy() &&
|
||||
"Unexpected operand type!");
|
||||
assert(V->getType()->isPtrOrPtrVectorTy() && "Unexpected operand type!");
|
||||
} while (Visited.insert(V).second);
|
||||
|
||||
Constant *OffsetIntPtr = ConstantInt::get(IntPtrTy, Offset);
|
||||
|
@ -1501,7 +1501,7 @@ void computeKnownBits(const Value *V, KnownBits &Known, unsigned Depth,
|
||||
unsigned BitWidth = Known.getBitWidth();
|
||||
|
||||
assert((V->getType()->isIntOrIntVectorTy() ||
|
||||
V->getType()->getScalarType()->isPointerTy()) &&
|
||||
V->getType()->isPtrOrPtrVectorTy()) &&
|
||||
"Not integer or pointer type!");
|
||||
assert((Q.DL.getTypeSizeInBits(V->getType()->getScalarType()) == BitWidth) &&
|
||||
(!V->getType()->isIntOrIntVectorTy() ||
|
||||
|
@ -3061,7 +3061,7 @@ bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) {
|
||||
} else {
|
||||
assert(Opc == Instruction::ICmp && "Unexpected opcode for CmpInst!");
|
||||
if (!Val0->getType()->isIntOrIntVectorTy() &&
|
||||
!Val0->getType()->getScalarType()->isPointerTy())
|
||||
!Val0->getType()->isPtrOrPtrVectorTy())
|
||||
return Error(ID.Loc, "icmp requires pointer or integer operands");
|
||||
ID.ConstantVal = ConstantExpr::getICmp(Pred, Val0, Val1);
|
||||
}
|
||||
@ -3210,7 +3210,7 @@ bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) {
|
||||
|
||||
if (Opc == Instruction::GetElementPtr) {
|
||||
if (Elts.size() == 0 ||
|
||||
!Elts[0]->getType()->getScalarType()->isPointerTy())
|
||||
!Elts[0]->getType()->isPtrOrPtrVectorTy())
|
||||
return Error(ID.Loc, "base of getelementptr must be a pointer");
|
||||
|
||||
Type *BaseType = Elts[0]->getType();
|
||||
@ -3226,7 +3226,7 @@ bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) {
|
||||
ArrayRef<Constant *> Indices(Elts.begin() + 1, Elts.end());
|
||||
for (Constant *Val : Indices) {
|
||||
Type *ValTy = Val->getType();
|
||||
if (!ValTy->getScalarType()->isIntegerTy())
|
||||
if (!ValTy->isIntOrIntVectorTy())
|
||||
return Error(ID.Loc, "getelementptr index must be an integer");
|
||||
if (ValTy->isVectorTy()) {
|
||||
unsigned ValNumEl = ValTy->getVectorNumElements();
|
||||
@ -5697,7 +5697,7 @@ bool LLParser::ParseCompare(Instruction *&Inst, PerFunctionState &PFS,
|
||||
} else {
|
||||
assert(Opc == Instruction::ICmp && "Unknown opcode for CmpInst!");
|
||||
if (!LHS->getType()->isIntOrIntVectorTy() &&
|
||||
!LHS->getType()->getScalarType()->isPointerTy())
|
||||
!LHS->getType()->isPtrOrPtrVectorTy())
|
||||
return Error(Loc, "icmp requires integer operands");
|
||||
Inst = new ICmpInst(CmpInst::Predicate(Pred), LHS, RHS);
|
||||
}
|
||||
@ -6349,7 +6349,7 @@ int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
break;
|
||||
}
|
||||
if (ParseTypeAndValue(Val, EltLoc, PFS)) return true;
|
||||
if (!Val->getType()->getScalarType()->isIntegerTy())
|
||||
if (!Val->getType()->isIntOrIntVectorTy())
|
||||
return Error(EltLoc, "getelementptr index must be an integer");
|
||||
|
||||
if (Val->getType()->isVectorTy()) {
|
||||
|
@ -1635,9 +1635,9 @@ Constant *ConstantExpr::getFPToSI(Constant *C, Type *Ty, bool OnlyIfReduced) {
|
||||
|
||||
Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy,
|
||||
bool OnlyIfReduced) {
|
||||
assert(C->getType()->getScalarType()->isPointerTy() &&
|
||||
assert(C->getType()->isPtrOrPtrVectorTy() &&
|
||||
"PtrToInt source must be pointer or pointer vector");
|
||||
assert(DstTy->getScalarType()->isIntegerTy() &&
|
||||
assert(DstTy->isIntOrIntVectorTy() &&
|
||||
"PtrToInt destination must be integer or integer vector");
|
||||
assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy));
|
||||
if (isa<VectorType>(C->getType()))
|
||||
@ -1648,9 +1648,9 @@ Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy,
|
||||
|
||||
Constant *ConstantExpr::getIntToPtr(Constant *C, Type *DstTy,
|
||||
bool OnlyIfReduced) {
|
||||
assert(C->getType()->getScalarType()->isIntegerTy() &&
|
||||
assert(C->getType()->isIntOrIntVectorTy() &&
|
||||
"IntToPtr source must be integer or integer vector");
|
||||
assert(DstTy->getScalarType()->isPointerTy() &&
|
||||
assert(DstTy->isPtrOrPtrVectorTy() &&
|
||||
"IntToPtr destination must be a pointer or pointer vector");
|
||||
assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy));
|
||||
if (isa<VectorType>(C->getType()))
|
||||
|
@ -3064,16 +3064,14 @@ CastInst::castIsValid(Instruction::CastOps op, Value *S, Type *DstTy) {
|
||||
if (VectorType *VT = dyn_cast<VectorType>(SrcTy))
|
||||
if (VT->getNumElements() != cast<VectorType>(DstTy)->getNumElements())
|
||||
return false;
|
||||
return SrcTy->getScalarType()->isPointerTy() &&
|
||||
DstTy->getScalarType()->isIntegerTy();
|
||||
return SrcTy->isPtrOrPtrVectorTy() && DstTy->isIntOrIntVectorTy();
|
||||
case Instruction::IntToPtr:
|
||||
if (isa<VectorType>(SrcTy) != isa<VectorType>(DstTy))
|
||||
return false;
|
||||
if (VectorType *VT = dyn_cast<VectorType>(SrcTy))
|
||||
if (VT->getNumElements() != cast<VectorType>(DstTy)->getNumElements())
|
||||
return false;
|
||||
return SrcTy->getScalarType()->isIntegerTy() &&
|
||||
DstTy->getScalarType()->isPointerTy();
|
||||
return SrcTy->isIntOrIntVectorTy() && DstTy->isPtrOrPtrVectorTy();
|
||||
case Instruction::BitCast: {
|
||||
PointerType *SrcPtrTy = dyn_cast<PointerType>(SrcTy->getScalarType());
|
||||
PointerType *DstPtrTy = dyn_cast<PointerType>(DstTy->getScalarType());
|
||||
|
@ -2504,15 +2504,13 @@ void Verifier::visitPtrToIntInst(PtrToIntInst &I) {
|
||||
Type *SrcTy = I.getOperand(0)->getType();
|
||||
Type *DestTy = I.getType();
|
||||
|
||||
Assert(SrcTy->getScalarType()->isPointerTy(),
|
||||
"PtrToInt source must be pointer", &I);
|
||||
Assert(SrcTy->isPtrOrPtrVectorTy(), "PtrToInt source must be pointer", &I);
|
||||
|
||||
if (auto *PTy = dyn_cast<PointerType>(SrcTy->getScalarType()))
|
||||
Assert(!DL.isNonIntegralPointerType(PTy),
|
||||
"ptrtoint not supported for non-integral pointers");
|
||||
|
||||
Assert(DestTy->getScalarType()->isIntegerTy(),
|
||||
"PtrToInt result must be integral", &I);
|
||||
Assert(DestTy->isIntOrIntVectorTy(), "PtrToInt result must be integral", &I);
|
||||
Assert(SrcTy->isVectorTy() == DestTy->isVectorTy(), "PtrToInt type mismatch",
|
||||
&I);
|
||||
|
||||
@ -2531,10 +2529,9 @@ void Verifier::visitIntToPtrInst(IntToPtrInst &I) {
|
||||
Type *SrcTy = I.getOperand(0)->getType();
|
||||
Type *DestTy = I.getType();
|
||||
|
||||
Assert(SrcTy->getScalarType()->isIntegerTy(),
|
||||
Assert(SrcTy->isIntOrIntVectorTy(),
|
||||
"IntToPtr source must be an integral", &I);
|
||||
Assert(DestTy->getScalarType()->isPointerTy(),
|
||||
"IntToPtr result must be a pointer", &I);
|
||||
Assert(DestTy->isPtrOrPtrVectorTy(), "IntToPtr result must be a pointer", &I);
|
||||
|
||||
if (auto *PTy = dyn_cast<PointerType>(DestTy->getScalarType()))
|
||||
Assert(!DL.isNonIntegralPointerType(PTy),
|
||||
@ -2952,7 +2949,7 @@ void Verifier::visitICmpInst(ICmpInst &IC) {
|
||||
Assert(Op0Ty == Op1Ty,
|
||||
"Both operands to ICmp instruction are not of the same type!", &IC);
|
||||
// Check that the operands are the right type
|
||||
Assert(Op0Ty->isIntOrIntVectorTy() || Op0Ty->getScalarType()->isPointerTy(),
|
||||
Assert(Op0Ty->isIntOrIntVectorTy() || Op0Ty->isPtrOrPtrVectorTy(),
|
||||
"Invalid operand types for ICmp instruction", &IC);
|
||||
// Check that the predicate is valid.
|
||||
Assert(IC.isIntPredicate(),
|
||||
@ -3009,7 +3006,7 @@ void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
GetElementPtrInst::getIndexedType(GEP.getSourceElementType(), Idxs);
|
||||
Assert(ElTy, "Invalid indices for GEP pointer type!", &GEP);
|
||||
|
||||
Assert(GEP.getType()->getScalarType()->isPointerTy() &&
|
||||
Assert(GEP.getType()->isPtrOrPtrVectorTy() &&
|
||||
GEP.getResultElementType() == ElTy,
|
||||
"GEP is not of right type for indices!", &GEP, ElTy);
|
||||
|
||||
@ -3025,7 +3022,7 @@ void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
unsigned IndexWidth = IndexTy->getVectorNumElements();
|
||||
Assert(IndexWidth == GEPWidth, "Invalid GEP index vector width", &GEP);
|
||||
}
|
||||
Assert(IndexTy->getScalarType()->isIntegerTy(),
|
||||
Assert(IndexTy->isIntOrIntVectorTy(),
|
||||
"All GEP indices should be of integer type");
|
||||
}
|
||||
}
|
||||
@ -4251,7 +4248,7 @@ void Verifier::visitIntrinsicCallSite(Intrinsic::ID ID, CallSite CS) {
|
||||
// relocated pointer. It can be casted to the correct type later if it's
|
||||
// desired. However, they must have the same address space and 'vectorness'
|
||||
GCRelocateInst &Relocate = cast<GCRelocateInst>(*CS.getInstruction());
|
||||
Assert(Relocate.getDerivedPtr()->getType()->getScalarType()->isPointerTy(),
|
||||
Assert(Relocate.getDerivedPtr()->getType()->isPtrOrPtrVectorTy(),
|
||||
"gc.relocate: relocated value must be a gc pointer", CS);
|
||||
|
||||
auto ResultType = CS.getType();
|
||||
|
@ -787,7 +787,7 @@ getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index) {
|
||||
int Cost = ((Val->getScalarSizeInBits() == 1) ? 2 /*+test-under-mask*/ : 1);
|
||||
|
||||
// Give a slight penalty for moving out of vector pipeline to FXU unit.
|
||||
if (Index == 0 && Val->getScalarType()->isIntegerTy())
|
||||
if (Index == 0 && Val->isIntOrIntVectorTy())
|
||||
Cost += 1;
|
||||
|
||||
return Cost;
|
||||
|
@ -1866,7 +1866,7 @@ static Instruction *foldBitCastBitwiseLogic(BitCastInst &BitCast,
|
||||
InstCombiner::BuilderTy &Builder) {
|
||||
Type *DestTy = BitCast.getType();
|
||||
BinaryOperator *BO;
|
||||
if (!DestTy->getScalarType()->isIntegerTy() ||
|
||||
if (!DestTy->isIntOrIntVectorTy() ||
|
||||
!match(BitCast.getOperand(0), m_OneUse(m_BinOp(BO))) ||
|
||||
!BO->isBitwiseLogicOp())
|
||||
return nullptr;
|
||||
|
@ -1202,7 +1202,7 @@ bool GVN::PerformLoadPRE(LoadInst *LI, AvailValInBlkVect &ValuesPerBlock,
|
||||
V->takeName(LI);
|
||||
if (Instruction *I = dyn_cast<Instruction>(V))
|
||||
I->setDebugLoc(LI->getDebugLoc());
|
||||
if (V->getType()->getScalarType()->isPointerTy())
|
||||
if (V->getType()->isPtrOrPtrVectorTy())
|
||||
MD->invalidateCachedPointerInfo(V);
|
||||
markInstructionForDeletion(LI);
|
||||
ORE->emit(OptimizationRemark(DEBUG_TYPE, "LoadPRE", LI)
|
||||
@ -1289,7 +1289,7 @@ bool GVN::processNonLocalLoad(LoadInst *LI) {
|
||||
// to propagate LI's DebugLoc because LI may not post-dominate I.
|
||||
if (LI->getDebugLoc() && LI->getParent() == I->getParent())
|
||||
I->setDebugLoc(LI->getDebugLoc());
|
||||
if (V->getType()->getScalarType()->isPointerTy())
|
||||
if (V->getType()->isPtrOrPtrVectorTy())
|
||||
MD->invalidateCachedPointerInfo(V);
|
||||
markInstructionForDeletion(LI);
|
||||
++NumGVNLoad;
|
||||
@ -1443,7 +1443,7 @@ bool GVN::processLoad(LoadInst *L) {
|
||||
reportLoadElim(L, AvailableValue, ORE);
|
||||
// Tell MDA to rexamine the reused pointer since we might have more
|
||||
// information after forwarding it.
|
||||
if (MD && AvailableValue->getType()->getScalarType()->isPointerTy())
|
||||
if (MD && AvailableValue->getType()->isPtrOrPtrVectorTy())
|
||||
MD->invalidateCachedPointerInfo(AvailableValue);
|
||||
return true;
|
||||
}
|
||||
@ -1698,7 +1698,7 @@ bool GVN::processInstruction(Instruction *I) {
|
||||
Changed = true;
|
||||
}
|
||||
if (Changed) {
|
||||
if (MD && V->getType()->getScalarType()->isPointerTy())
|
||||
if (MD && V->getType()->isPtrOrPtrVectorTy())
|
||||
MD->invalidateCachedPointerInfo(V);
|
||||
++NumGVNSimpl;
|
||||
return true;
|
||||
@ -1809,7 +1809,7 @@ bool GVN::processInstruction(Instruction *I) {
|
||||
|
||||
// Remove it!
|
||||
patchAndReplaceAllUsesWith(I, Repl);
|
||||
if (MD && Repl->getType()->getScalarType()->isPointerTy())
|
||||
if (MD && Repl->getType()->isPtrOrPtrVectorTy())
|
||||
MD->invalidateCachedPointerInfo(Repl);
|
||||
markInstructionForDeletion(I);
|
||||
return true;
|
||||
@ -2083,7 +2083,7 @@ bool GVN::performScalarPRE(Instruction *CurInst) {
|
||||
addToLeaderTable(ValNo, Phi, CurrentBlock);
|
||||
Phi->setDebugLoc(CurInst->getDebugLoc());
|
||||
CurInst->replaceAllUsesWith(Phi);
|
||||
if (MD && Phi->getType()->getScalarType()->isPointerTy())
|
||||
if (MD && Phi->getType()->isPtrOrPtrVectorTy())
|
||||
MD->invalidateCachedPointerInfo(Phi);
|
||||
VN.erase(CurInst);
|
||||
removeFromLeaderTable(ValNo, CurInst, CurrentBlock);
|
||||
|
@ -238,7 +238,7 @@ PHINode *MergedLoadStoreMotion::getPHIOperand(BasicBlock *BB, StoreInst *S0,
|
||||
&BB->front());
|
||||
NewPN->addIncoming(Opd1, S0->getParent());
|
||||
NewPN->addIncoming(Opd2, S1->getParent());
|
||||
if (MD && NewPN->getType()->getScalarType()->isPointerTy())
|
||||
if (MD && NewPN->getType()->isPtrOrPtrVectorTy())
|
||||
MD->invalidateCachedPointerInfo(NewPN);
|
||||
return NewPN;
|
||||
}
|
||||
|
@ -1673,8 +1673,7 @@ static Value *convertValue(const DataLayout &DL, IRBuilderTy &IRB, Value *V,
|
||||
|
||||
// See if we need inttoptr for this type pair. A cast involving both scalars
|
||||
// and vectors requires and additional bitcast.
|
||||
if (OldTy->getScalarType()->isIntegerTy() &&
|
||||
NewTy->getScalarType()->isPointerTy()) {
|
||||
if (OldTy->isIntOrIntVectorTy() && NewTy->isPtrOrPtrVectorTy()) {
|
||||
// Expand <2 x i32> to i8* --> <2 x i32> to i64 to i8*
|
||||
if (OldTy->isVectorTy() && !NewTy->isVectorTy())
|
||||
return IRB.CreateIntToPtr(IRB.CreateBitCast(V, DL.getIntPtrType(NewTy)),
|
||||
@ -1690,8 +1689,7 @@ static Value *convertValue(const DataLayout &DL, IRBuilderTy &IRB, Value *V,
|
||||
|
||||
// See if we need ptrtoint for this type pair. A cast involving both scalars
|
||||
// and vectors requires and additional bitcast.
|
||||
if (OldTy->getScalarType()->isPointerTy() &&
|
||||
NewTy->getScalarType()->isIntegerTy()) {
|
||||
if (OldTy->isPtrOrPtrVectorTy() && NewTy->isIntOrIntVectorTy()) {
|
||||
// Expand <2 x i8*> to i128 --> <2 x i8*> to <2 x i64> to i128
|
||||
if (OldTy->isVectorTy() && !NewTy->isVectorTy())
|
||||
return IRB.CreateBitCast(IRB.CreatePtrToInt(V, DL.getIntPtrType(OldTy)),
|
||||
|
@ -51,25 +51,24 @@ static T *coerceAvailableValueToLoadTypeHelper(T *StoredVal, Type *LoadedTy,
|
||||
// If the store and reload are the same size, we can always reuse it.
|
||||
if (StoredValSize == LoadedValSize) {
|
||||
// Pointer to Pointer -> use bitcast.
|
||||
if (StoredValTy->getScalarType()->isPointerTy() &&
|
||||
LoadedTy->getScalarType()->isPointerTy()) {
|
||||
if (StoredValTy->isPtrOrPtrVectorTy() && LoadedTy->isPtrOrPtrVectorTy()) {
|
||||
StoredVal = Helper.CreateBitCast(StoredVal, LoadedTy);
|
||||
} else {
|
||||
// Convert source pointers to integers, which can be bitcast.
|
||||
if (StoredValTy->getScalarType()->isPointerTy()) {
|
||||
if (StoredValTy->isPtrOrPtrVectorTy()) {
|
||||
StoredValTy = DL.getIntPtrType(StoredValTy);
|
||||
StoredVal = Helper.CreatePtrToInt(StoredVal, StoredValTy);
|
||||
}
|
||||
|
||||
Type *TypeToCastTo = LoadedTy;
|
||||
if (TypeToCastTo->getScalarType()->isPointerTy())
|
||||
if (TypeToCastTo->isPtrOrPtrVectorTy())
|
||||
TypeToCastTo = DL.getIntPtrType(TypeToCastTo);
|
||||
|
||||
if (StoredValTy != TypeToCastTo)
|
||||
StoredVal = Helper.CreateBitCast(StoredVal, TypeToCastTo);
|
||||
|
||||
// Cast to pointer if the load needs a pointer type.
|
||||
if (LoadedTy->getScalarType()->isPointerTy())
|
||||
if (LoadedTy->isPtrOrPtrVectorTy())
|
||||
StoredVal = Helper.CreateIntToPtr(StoredVal, LoadedTy);
|
||||
}
|
||||
|
||||
@ -86,7 +85,7 @@ static T *coerceAvailableValueToLoadTypeHelper(T *StoredVal, Type *LoadedTy,
|
||||
"canCoerceMustAliasedValueToLoad fail");
|
||||
|
||||
// Convert source pointers to integers, which can be manipulated.
|
||||
if (StoredValTy->getScalarType()->isPointerTy()) {
|
||||
if (StoredValTy->isPtrOrPtrVectorTy()) {
|
||||
StoredValTy = DL.getIntPtrType(StoredValTy);
|
||||
StoredVal = Helper.CreatePtrToInt(StoredVal, StoredValTy);
|
||||
}
|
||||
@ -112,7 +111,7 @@ static T *coerceAvailableValueToLoadTypeHelper(T *StoredVal, Type *LoadedTy,
|
||||
|
||||
if (LoadedTy != NewIntTy) {
|
||||
// If the result is a pointer, inttoptr.
|
||||
if (LoadedTy->getScalarType()->isPointerTy())
|
||||
if (LoadedTy->isPtrOrPtrVectorTy())
|
||||
StoredVal = Helper.CreateIntToPtr(StoredVal, LoadedTy);
|
||||
else
|
||||
// Otherwise, bitcast.
|
||||
@ -316,7 +315,7 @@ static T *getStoreValueForLoadHelper(T *SrcVal, unsigned Offset, Type *LoadTy,
|
||||
uint64_t LoadSize = (DL.getTypeSizeInBits(LoadTy) + 7) / 8;
|
||||
// Compute which bits of the stored value are being used by the load. Convert
|
||||
// to an integer type to start with.
|
||||
if (SrcVal->getType()->getScalarType()->isPointerTy())
|
||||
if (SrcVal->getType()->isPtrOrPtrVectorTy())
|
||||
SrcVal = Helper.CreatePtrToInt(SrcVal, DL.getIntPtrType(SrcVal->getType()));
|
||||
if (!SrcVal->getType()->isIntegerTy())
|
||||
SrcVal = Helper.CreateBitCast(SrcVal, IntegerType::get(Ctx, StoreSize * 8));
|
||||
|
@ -385,10 +385,10 @@ struct ConstModifier: public Modifier {
|
||||
|
||||
if (Ty->isVectorTy()) {
|
||||
switch (getRandom() % 2) {
|
||||
case 0: if (Ty->getScalarType()->isIntegerTy())
|
||||
case 0: if (Ty->isIntOrIntVectorTy())
|
||||
return PT->push_back(ConstantVector::getAllOnesValue(Ty));
|
||||
break;
|
||||
case 1: if (Ty->getScalarType()->isIntegerTy())
|
||||
case 1: if (Ty->isIntOrIntVectorTy())
|
||||
return PT->push_back(ConstantVector::getNullValue(Ty));
|
||||
}
|
||||
}
|
||||
@ -531,8 +531,7 @@ struct CastModifier: public Modifier {
|
||||
}
|
||||
|
||||
// Both types are integers:
|
||||
if (VTy->getScalarType()->isIntegerTy() &&
|
||||
DestTy->getScalarType()->isIntegerTy()) {
|
||||
if (VTy->isIntOrIntVectorTy() && DestTy->isIntOrIntVectorTy()) {
|
||||
if (VSize > DestSize) {
|
||||
return PT->push_back(
|
||||
new TruncInst(V, DestTy, "Tr", BB->getTerminator()));
|
||||
@ -546,8 +545,7 @@ struct CastModifier: public Modifier {
|
||||
}
|
||||
|
||||
// Fp to int.
|
||||
if (VTy->getScalarType()->isFloatingPointTy() &&
|
||||
DestTy->getScalarType()->isIntegerTy()) {
|
||||
if (VTy->isFPOrFPVectorTy() && DestTy->isIntOrIntVectorTy()) {
|
||||
if (getRandom() & 1)
|
||||
return PT->push_back(
|
||||
new FPToSIInst(V, DestTy, "FC", BB->getTerminator()));
|
||||
@ -555,8 +553,7 @@ struct CastModifier: public Modifier {
|
||||
}
|
||||
|
||||
// Int to fp.
|
||||
if (VTy->getScalarType()->isIntegerTy() &&
|
||||
DestTy->getScalarType()->isFloatingPointTy()) {
|
||||
if (VTy->isIntOrIntVectorTy() && DestTy->isFPOrFPVectorTy()) {
|
||||
if (getRandom() & 1)
|
||||
return PT->push_back(
|
||||
new SIToFPInst(V, DestTy, "FC", BB->getTerminator()));
|
||||
@ -565,8 +562,7 @@ struct CastModifier: public Modifier {
|
||||
}
|
||||
|
||||
// Both floats.
|
||||
if (VTy->getScalarType()->isFloatingPointTy() &&
|
||||
DestTy->getScalarType()->isFloatingPointTy()) {
|
||||
if (VTy->isFPOrFPVectorTy() && DestTy->isFPOrFPVectorTy()) {
|
||||
if (VSize > DestSize) {
|
||||
return PT->push_back(
|
||||
new FPTruncInst(V, DestTy, "Tr", BB->getTerminator()));
|
||||
|
Loading…
Reference in New Issue
Block a user