forked from OSchip/llvm-project
parent
f91a992c30
commit
8a8ad7d8e8
|
@ -126,4 +126,3 @@ namespace llvm {
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -208,7 +208,7 @@ static Constant *SymbolicallyEvaluateGEP(Constant* const* Ops, unsigned NumOps,
|
||||||
"Computed GetElementPtr has unexpected type!");
|
"Computed GetElementPtr has unexpected type!");
|
||||||
|
|
||||||
// If we ended up indexing a member with a type that doesn't match
|
// If we ended up indexing a member with a type that doesn't match
|
||||||
// type type of what the original indices indexed, add a cast.
|
// the type of what the original indices indexed, add a cast.
|
||||||
if (Ty != cast<PointerType>(ResultTy)->getElementType())
|
if (Ty != cast<PointerType>(ResultTy)->getElementType())
|
||||||
C = ConstantExpr::getBitCast(C, ResultTy);
|
C = ConstantExpr::getBitCast(C, ResultTy);
|
||||||
|
|
||||||
|
|
|
@ -3533,8 +3533,8 @@ ScalarEvolution::ComputeBackedgeTakenCountFromExitCondICmp(const Loop *L,
|
||||||
if (!isa<SCEVCouldNotCompute>(TC)) return TC;
|
if (!isa<SCEVCouldNotCompute>(TC)) return TC;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ICmpInst::ICMP_EQ: {
|
case ICmpInst::ICMP_EQ: { // while (X == Y)
|
||||||
// Convert to: while (X-Y == 0) // while (X == Y)
|
// Convert to: while (X-Y == 0)
|
||||||
const SCEV *TC = HowFarToNonZero(getMinusSCEV(LHS, RHS), L);
|
const SCEV *TC = HowFarToNonZero(getMinusSCEV(LHS, RHS), L);
|
||||||
if (!isa<SCEVCouldNotCompute>(TC)) return TC;
|
if (!isa<SCEVCouldNotCompute>(TC)) return TC;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -53,7 +53,6 @@ Value *SCEVExpander::InsertNoopCastOfTo(Value *V, const Type *Ty) {
|
||||||
return CE->getOperand(0);
|
return CE->getOperand(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: keep track of the cast instruction.
|
|
||||||
if (Constant *C = dyn_cast<Constant>(V))
|
if (Constant *C = dyn_cast<Constant>(V))
|
||||||
return ConstantExpr::getCast(Op, C, Ty);
|
return ConstantExpr::getCast(Op, C, Ty);
|
||||||
|
|
||||||
|
@ -317,13 +316,17 @@ static void SplitAddRecs(SmallVectorImpl<const SCEV *> &Ops,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// expandAddToGEP - Expand a SCEVAddExpr with a pointer type into a GEP
|
/// expandAddToGEP - Expand an addition expression with a pointer type into
|
||||||
/// instead of using ptrtoint+arithmetic+inttoptr. This helps
|
/// a GEP instead of using ptrtoint+arithmetic+inttoptr. This helps
|
||||||
/// BasicAliasAnalysis and other passes analyze the result.
|
/// BasicAliasAnalysis and other passes analyze the result. See the rules
|
||||||
|
/// for getelementptr vs. inttoptr in
|
||||||
|
/// http://llvm.org/docs/LangRef.html#pointeraliasing
|
||||||
|
/// for details.
|
||||||
///
|
///
|
||||||
/// Design note: This depends on ScalarEvolution not recognizing inttoptr
|
/// Design note: The correctness of using getelmeentptr here depends on
|
||||||
/// and ptrtoint operators, as they may introduce pointer arithmetic
|
/// ScalarEvolution not recognizing inttoptr and ptrtoint operators, as
|
||||||
/// which may not be safely converted into getelementptr.
|
/// they may introduce pointer arithmetic which may not be safely converted
|
||||||
|
/// into getelementptr.
|
||||||
///
|
///
|
||||||
/// Design note: It might seem desirable for this function to be more
|
/// Design note: It might seem desirable for this function to be more
|
||||||
/// loop-aware. If some of the indices are loop-invariant while others
|
/// loop-aware. If some of the indices are loop-invariant while others
|
||||||
|
|
Loading…
Reference in New Issue