[llvm] be6d7cc - [InstCombine] reduce code duplication for checking types; NFC
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Wed May 18 06:17:36 PDT 2022
Author: Sanjay Patel
Date: 2022-05-18T09:16:30-04:00
New Revision: be6d7cc93c45fff4c891c4b4952a7acca2439bc2
URL: https://github.com/llvm/llvm-project/commit/be6d7cc93c45fff4c891c4b4952a7acca2439bc2
DIFF: https://github.com/llvm/llvm-project/commit/be6d7cc93c45fff4c891c4b4952a7acca2439bc2.diff
LOG: [InstCombine] reduce code duplication for checking types; NFC
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
index 70785dafb0472..96845aee4c8e5 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -2872,10 +2872,11 @@ Instruction *InstCombinerImpl::foldICmpBitCast(ICmpInst &Cmp) {
ICmpInst::Predicate Pred = Cmp.getPredicate();
Value *Op1 = Cmp.getOperand(1);
Value *BCSrcOp = Bitcast->getOperand(0);
+ Type *SrcType = Bitcast->getSrcTy();
+ Type *DstType = Bitcast->getType();
// Make sure the bitcast doesn't change the number of vector elements.
- if (Bitcast->getSrcTy()->getScalarSizeInBits() ==
- Bitcast->getDestTy()->getScalarSizeInBits()) {
+ if (SrcType->getScalarSizeInBits() == DstType->getScalarSizeInBits()) {
// Zero-equality and sign-bit checks are preserved through sitofp + bitcast.
Value *X;
if (match(BCSrcOp, m_SIToFP(m_Value(X)))) {
@@ -2920,8 +2921,7 @@ Instruction *InstCombinerImpl::foldICmpBitCast(ICmpInst &Cmp) {
Type *XType = X->getType();
// We can't currently handle Power style floating point operations here.
- if (!(XType->isPPC_FP128Ty() || BCSrcOp->getType()->isPPC_FP128Ty())) {
-
+ if (!(XType->isPPC_FP128Ty() || SrcType->isPPC_FP128Ty())) {
Type *NewType = Builder.getIntNTy(XType->getScalarSizeInBits());
if (auto *XVTy = dyn_cast<VectorType>(XType))
NewType = VectorType::get(NewType, XVTy->getElementCount());
@@ -2939,21 +2939,19 @@ Instruction *InstCombinerImpl::foldICmpBitCast(ICmpInst &Cmp) {
// Test to see if the operands of the icmp are casted versions of other
// values. If the ptr->ptr cast can be stripped off both arguments, do so.
- if (Bitcast->getType()->isPointerTy() &&
- (isa<Constant>(Op1) || isa<BitCastInst>(Op1))) {
+ if (DstType->isPointerTy() && (isa<Constant>(Op1) || isa<BitCastInst>(Op1))) {
// If operand #1 is a bitcast instruction, it must also be a ptr->ptr cast
// so eliminate it as well.
if (auto *BC2 = dyn_cast<BitCastInst>(Op1))
Op1 = BC2->getOperand(0);
- Op1 = Builder.CreateBitCast(Op1, BCSrcOp->getType());
+ Op1 = Builder.CreateBitCast(Op1, SrcType);
return new ICmpInst(Pred, BCSrcOp, Op1);
}
const APInt *C;
- if (!match(Cmp.getOperand(1), m_APInt(C)) ||
- !Bitcast->getType()->isIntegerTy() ||
- !Bitcast->getSrcTy()->isIntOrIntVectorTy())
+ if (!match(Cmp.getOperand(1), m_APInt(C)) || !DstType->isIntegerTy() ||
+ !SrcType->isIntOrIntVectorTy())
return nullptr;
// If this is checking if all elements of a vector compare are set or not,
@@ -2965,9 +2963,8 @@ Instruction *InstCombinerImpl::foldICmpBitCast(ICmpInst &Cmp) {
// TODO: Try harder to reduce compare of 2 freely invertible operands?
if (Cmp.isEquality() && C->isAllOnes() && Bitcast->hasOneUse() &&
isFreeToInvert(BCSrcOp, BCSrcOp->hasOneUse())) {
- Type *ScalarTy = Bitcast->getType();
- Value *Cast = Builder.CreateBitCast(Builder.CreateNot(BCSrcOp), ScalarTy);
- return new ICmpInst(Pred, Cast, ConstantInt::getNullValue(ScalarTy));
+ Value *Cast = Builder.CreateBitCast(Builder.CreateNot(BCSrcOp), DstType);
+ return new ICmpInst(Pred, Cast, ConstantInt::getNullValue(DstType));
}
// If this is checking if all elements of an extended vector are clear or not,
@@ -2995,7 +2992,7 @@ Instruction *InstCombinerImpl::foldICmpBitCast(ICmpInst &Cmp) {
if (match(BCSrcOp, m_Shuffle(m_Value(Vec), m_Undef(), m_Mask(Mask)))) {
// Check whether every element of Mask is the same constant
if (is_splat(Mask)) {
- auto *VecTy = cast<VectorType>(BCSrcOp->getType());
+ auto *VecTy = cast<VectorType>(SrcType);
auto *EltTy = cast<IntegerType>(VecTy->getElementType());
if (C->isSplat(EltTy->getBitWidth())) {
// Fold the icmp based on the value of C
More information about the llvm-commits
mailing list