Author: Nikita Popov Date: 2023-11-03T11:25:40+01:00 New Revision: 85f79233286c78a1b79d01ca0677230658732b35
URL: https://github.com/llvm/llvm-project/commit/85f79233286c78a1b79d01ca0677230658732b35 DIFF: https://github.com/llvm/llvm-project/commit/85f79233286c78a1b79d01ca0677230658732b35.diff LOG: [ConstantFold] Remove unnecessary cast of zero gep fold (NFCI) Zero GEPs will be optimized away entirely, except in the cases which this transform also excludes (splat, inrange). Added: Modified: llvm/lib/IR/ConstantFold.cpp Removed: ################################################################################ diff --git a/llvm/lib/IR/ConstantFold.cpp b/llvm/lib/IR/ConstantFold.cpp index 4651767d0655a06..d69665bd6c56ae6 100644 --- a/llvm/lib/IR/ConstantFold.cpp +++ b/llvm/lib/IR/ConstantFold.cpp @@ -233,28 +233,6 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, Constant *V, // Try hard to fold cast of cast because they are often eliminable. if (unsigned newOpc = foldConstantCastPair(opc, CE, DestTy)) return foldMaybeUndesirableCast(newOpc, CE->getOperand(0), DestTy); - } else if (CE->getOpcode() == Instruction::GetElementPtr && - // Do not fold addrspacecast (gep 0, .., 0). It might make the - // addrspacecast uncanonicalized. - opc != Instruction::AddrSpaceCast && - // Do not fold bitcast (gep) with inrange index, as this loses - // information. - !cast<GEPOperator>(CE)->getInRangeIndex() && - // Do not fold if the gep type is a vector, as bitcasting - // operand 0 of a vector gep will result in a bitcast between - // diff erent sizes. - !CE->getType()->isVectorTy()) { - // If all of the indexes in the GEP are null values, there is no pointer - // adjustment going on. We might as well cast the source pointer. - bool isAllNull = true; - for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i) - if (!CE->getOperand(i)->isNullValue()) { - isAllNull = false; - break; - } - if (isAllNull) - // This is casting one pointer type to another, always BitCast - return ConstantExpr::getPointerCast(CE->getOperand(0), DestTy); } } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits