@@ -76,11 +76,11 @@ Constant *llvm::getPredForFCmpCode(unsigned Code, Type *OpTy,
7676std::optional<DecomposedBitTest>
7777llvm::decomposeBitTestICmp (Value *LHS, Value *RHS, CmpInst::Predicate Pred,
7878 bool LookThruTrunc, bool AllowNonZeroC,
79- bool DecomposeBitMask ) {
79+ bool DecomposeAnd ) {
8080 using namespace PatternMatch ;
8181
8282 const APInt *OrigC;
83- if ((ICmpInst::isEquality (Pred) && !DecomposeBitMask ) ||
83+ if ((ICmpInst::isEquality (Pred) && !DecomposeAnd ) ||
8484 !match (RHS, m_APIntAllowPoison (OrigC)))
8585 return std::nullopt ;
8686
@@ -102,7 +102,7 @@ llvm::decomposeBitTestICmp(Value *LHS, Value *RHS, CmpInst::Predicate Pred,
102102
103103 switch (Pred) {
104104 default :
105- return std:: nullopt ;
105+ llvm_unreachable ( " Unexpected predicate " ) ;
106106 case ICmpInst::ICMP_SLT: {
107107 // X < 0 is equivalent to (X & SignMask) != 0.
108108 if (C.isZero ()) {
@@ -152,11 +152,14 @@ llvm::decomposeBitTestICmp(Value *LHS, Value *RHS, CmpInst::Predicate Pred,
152152 }
153153 case ICmpInst::ICMP_EQ:
154154 case ICmpInst::ICMP_NE: {
155- assert (DecomposeBitMask );
155+ assert (DecomposeAnd );
156156 const APInt *AndC;
157157 Value *AndVal;
158158 if (match (LHS, m_And (m_Value (AndVal), m_APIntAllowPoison (AndC)))) {
159- Result = {AndVal /* X*/ , Pred /* Pred*/ , *AndC /* Mask*/ , *OrigC /* C*/ };
159+ LHS = AndVal;
160+ Result.Mask = *AndC;
161+ Result.C = C;
162+ Result.Pred = Pred;
160163 break ;
161164 }
162165
@@ -175,25 +178,24 @@ llvm::decomposeBitTestICmp(Value *LHS, Value *RHS, CmpInst::Predicate Pred,
175178 Result.X = X;
176179 Result.Mask = Result.Mask .zext (X->getType ()->getScalarSizeInBits ());
177180 Result.C = Result.C .zext (X->getType ()->getScalarSizeInBits ());
178- } else if (!Result. X ) {
181+ } else
179182 Result.X = LHS;
180- }
181183
182184 return Result;
183185}
184186
185187std::optional<DecomposedBitTest> llvm::decomposeBitTest (Value *Cond,
186188 bool LookThruTrunc,
187189 bool AllowNonZeroC,
188- bool DecomposeBitMask ) {
190+ bool DecomposeAnd ) {
189191 using namespace PatternMatch ;
190192 if (auto *ICmp = dyn_cast<ICmpInst>(Cond)) {
191193 // Don't allow pointers. Splat vectors are fine.
192194 if (!ICmp->getOperand (0 )->getType ()->isIntOrIntVectorTy ())
193195 return std::nullopt ;
194196 return decomposeBitTestICmp (ICmp->getOperand (0 ), ICmp->getOperand (1 ),
195197 ICmp->getPredicate (), LookThruTrunc,
196- AllowNonZeroC, DecomposeBitMask );
198+ AllowNonZeroC, DecomposeAnd );
197199 }
198200 Value *X;
199201 if (Cond->getType ()->isIntOrIntVectorTy (1 ) &&
0 commit comments