mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +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:
@@ -56,7 +56,7 @@ static bool AddWithOverflow(Constant *&Result, Constant *In1,
|
||||
Constant *In2, bool IsSigned = false) {
|
||||
Result = ConstantExpr::getAdd(In1, In2);
|
||||
|
||||
if (const VectorType *VTy = dyn_cast<VectorType>(In1->getType())) {
|
||||
if (VectorType *VTy = dyn_cast<VectorType>(In1->getType())) {
|
||||
for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
|
||||
Constant *Idx = ConstantInt::get(Type::getInt32Ty(In1->getContext()), i);
|
||||
if (HasAddOverflow(ExtractElement(Result, Idx),
|
||||
@@ -91,7 +91,7 @@ static bool SubWithOverflow(Constant *&Result, Constant *In1,
|
||||
Constant *In2, bool IsSigned = false) {
|
||||
Result = ConstantExpr::getSub(In1, In2);
|
||||
|
||||
if (const VectorType *VTy = dyn_cast<VectorType>(In1->getType())) {
|
||||
if (VectorType *VTy = dyn_cast<VectorType>(In1->getType())) {
|
||||
for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
|
||||
Constant *Idx = ConstantInt::get(Type::getInt32Ty(In1->getContext()), i);
|
||||
if (HasSubOverflow(ExtractElement(Result, Idx),
|
||||
@@ -220,7 +220,7 @@ FoldCmpLoadFromIndexedGlobal(GetElementPtrInst *GEP, GlobalVariable *GV,
|
||||
// structs.
|
||||
SmallVector<unsigned, 4> LaterIndices;
|
||||
|
||||
const Type *EltTy = cast<ArrayType>(Init->getType())->getElementType();
|
||||
Type *EltTy = cast<ArrayType>(Init->getType())->getElementType();
|
||||
for (unsigned i = 3, e = GEP->getNumOperands(); i != e; ++i) {
|
||||
ConstantInt *Idx = dyn_cast<ConstantInt>(GEP->getOperand(i));
|
||||
if (Idx == 0) return 0; // Variable index.
|
||||
@@ -228,9 +228,9 @@ FoldCmpLoadFromIndexedGlobal(GetElementPtrInst *GEP, GlobalVariable *GV,
|
||||
uint64_t IdxVal = Idx->getZExtValue();
|
||||
if ((unsigned)IdxVal != IdxVal) return 0; // Too large array index.
|
||||
|
||||
if (const StructType *STy = dyn_cast<StructType>(EltTy))
|
||||
if (StructType *STy = dyn_cast<StructType>(EltTy))
|
||||
EltTy = STy->getElementType(IdxVal);
|
||||
else if (const ArrayType *ATy = dyn_cast<ArrayType>(EltTy)) {
|
||||
else if (ArrayType *ATy = dyn_cast<ArrayType>(EltTy)) {
|
||||
if (IdxVal >= ATy->getNumElements()) return 0;
|
||||
EltTy = ATy->getElementType();
|
||||
} else {
|
||||
@@ -441,7 +441,7 @@ FoldCmpLoadFromIndexedGlobal(GetElementPtrInst *GEP, GlobalVariable *GV,
|
||||
// ((magic_cst >> i) & 1) != 0
|
||||
if (Init->getNumOperands() <= 32 ||
|
||||
(TD && Init->getNumOperands() <= 64 && TD->isLegalInteger(64))) {
|
||||
const Type *Ty;
|
||||
Type *Ty;
|
||||
if (Init->getNumOperands() <= 32)
|
||||
Ty = Type::getInt32Ty(Init->getContext());
|
||||
else
|
||||
@@ -483,7 +483,7 @@ static Value *EvaluateGEPOffsetExpression(User *GEP, InstCombiner &IC) {
|
||||
if (CI->isZero()) continue;
|
||||
|
||||
// Handle a struct index, which adds its field offset to the pointer.
|
||||
if (const StructType *STy = dyn_cast<StructType>(*GTI)) {
|
||||
if (StructType *STy = dyn_cast<StructType>(*GTI)) {
|
||||
Offset += TD.getStructLayout(STy)->getElementOffset(CI->getZExtValue());
|
||||
} else {
|
||||
uint64_t Size = TD.getTypeAllocSize(GTI.getIndexedType());
|
||||
@@ -513,7 +513,7 @@ static Value *EvaluateGEPOffsetExpression(User *GEP, InstCombiner &IC) {
|
||||
if (CI->isZero()) continue;
|
||||
|
||||
// Handle a struct index, which adds its field offset to the pointer.
|
||||
if (const StructType *STy = dyn_cast<StructType>(*GTI)) {
|
||||
if (StructType *STy = dyn_cast<StructType>(*GTI)) {
|
||||
Offset += TD.getStructLayout(STy)->getElementOffset(CI->getZExtValue());
|
||||
} else {
|
||||
uint64_t Size = TD.getTypeAllocSize(GTI.getIndexedType());
|
||||
@@ -530,7 +530,7 @@ static Value *EvaluateGEPOffsetExpression(User *GEP, InstCombiner &IC) {
|
||||
// we don't need to bother extending: the extension won't affect where the
|
||||
// computation crosses zero.
|
||||
if (VariableIdx->getType()->getPrimitiveSizeInBits() > IntPtrWidth) {
|
||||
const Type *IntPtrTy = TD.getIntPtrType(VariableIdx->getContext());
|
||||
Type *IntPtrTy = TD.getIntPtrType(VariableIdx->getContext());
|
||||
VariableIdx = IC.Builder->CreateTrunc(VariableIdx, IntPtrTy);
|
||||
}
|
||||
return VariableIdx;
|
||||
@@ -552,7 +552,7 @@ static Value *EvaluateGEPOffsetExpression(User *GEP, InstCombiner &IC) {
|
||||
return 0;
|
||||
|
||||
// Okay, we can do this evaluation. Start by converting the index to intptr.
|
||||
const Type *IntPtrTy = TD.getIntPtrType(VariableIdx->getContext());
|
||||
Type *IntPtrTy = TD.getIntPtrType(VariableIdx->getContext());
|
||||
if (VariableIdx->getType() != IntPtrTy)
|
||||
VariableIdx = IC.Builder->CreateIntCast(VariableIdx, IntPtrTy,
|
||||
true /*Signed*/);
|
||||
@@ -1098,7 +1098,7 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
|
||||
// If the LHS is an AND of a zext, and we have an equality compare, we can
|
||||
// shrink the and/compare to the smaller type, eliminating the cast.
|
||||
if (ZExtInst *Cast = dyn_cast<ZExtInst>(LHSI->getOperand(0))) {
|
||||
const IntegerType *Ty = cast<IntegerType>(Cast->getSrcTy());
|
||||
IntegerType *Ty = cast<IntegerType>(Cast->getSrcTy());
|
||||
// Make sure we don't compare the upper bits, SimplifyDemandedBits
|
||||
// should fold the icmp to true/false in that case.
|
||||
if (ICI.isEquality() && RHSV.getActiveBits() <= Ty->getBitWidth()) {
|
||||
@@ -1121,8 +1121,8 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
|
||||
|
||||
ConstantInt *ShAmt;
|
||||
ShAmt = Shift ? dyn_cast<ConstantInt>(Shift->getOperand(1)) : 0;
|
||||
const Type *Ty = Shift ? Shift->getType() : 0; // Type of the shift.
|
||||
const Type *AndTy = AndCST->getType(); // Type of the and.
|
||||
Type *Ty = Shift ? Shift->getType() : 0; // Type of the shift.
|
||||
Type *AndTy = AndCST->getType(); // Type of the and.
|
||||
|
||||
// We can fold this as long as we can't shift unknown bits
|
||||
// into the mask. This can only happen with signed shift
|
||||
@@ -1517,8 +1517,8 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
|
||||
Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) {
|
||||
const CastInst *LHSCI = cast<CastInst>(ICI.getOperand(0));
|
||||
Value *LHSCIOp = LHSCI->getOperand(0);
|
||||
const Type *SrcTy = LHSCIOp->getType();
|
||||
const Type *DestTy = LHSCI->getType();
|
||||
Type *SrcTy = LHSCIOp->getType();
|
||||
Type *DestTy = LHSCI->getType();
|
||||
Value *RHSCIOp;
|
||||
|
||||
// Turn icmp (ptrtoint x), (ptrtoint/c) into a compare of the input if the
|
||||
@@ -1786,7 +1786,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
if (Value *V = SimplifyICmpInst(I.getPredicate(), Op0, Op1, TD))
|
||||
return ReplaceInstUsesWith(I, V);
|
||||
|
||||
const Type *Ty = Op0->getType();
|
||||
Type *Ty = Op0->getType();
|
||||
|
||||
// icmp's with boolean values can always be turned into bitwise operations
|
||||
if (Ty->isIntegerTy(1)) {
|
||||
@@ -2637,7 +2637,7 @@ Instruction *InstCombiner::FoldFCmp_IntToFP_Cst(FCmpInst &I,
|
||||
return ReplaceInstUsesWith(I, ConstantInt::getFalse(I.getContext()));
|
||||
}
|
||||
|
||||
const IntegerType *IntTy = cast<IntegerType>(LHSI->getOperand(0)->getType());
|
||||
IntegerType *IntTy = cast<IntegerType>(LHSI->getOperand(0)->getType());
|
||||
|
||||
// Now we know that the APFloat is a normal number, zero or inf.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user