[llvm-branch-commits] [llvm] 85f7923 - [ConstantFold] Remove unnecessary cast of zero gep fold (NFCI)
Nikita Popov via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Nov 3 13:40:56 PDT 2023
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);
}
}
More information about the llvm-branch-commits
mailing list