Simplify code. No functionality changes, name changes aside.

llvm-svn: 132896
This commit is contained in:
Benjamin Kramer 2011-06-12 22:47:53 +00:00
parent 820a947fe1
commit 35159c114c
2 changed files with 8 additions and 13 deletions

View File

@ -1087,19 +1087,14 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
// have its sign bit set or if it is an equality comparison.
// Extending a relational comparison when we're checking the sign
// bit would not work.
if (Cast->hasOneUse() &&
(ICI.isEquality() ||
(AndCST->getValue().isNonNegative() && RHSV.isNonNegative()))) {
uint32_t BitWidth =
cast<IntegerType>(Cast->getOperand(0)->getType())->getBitWidth();
APInt NewCST = AndCST->getValue().zext(BitWidth);
APInt NewCI = RHSV.zext(BitWidth);
Value *NewAnd =
if (ICI.isEquality() ||
(AndCST->getValue().isNonNegative() && RHSV.isNonNegative())) {
Value *NewAnd =
Builder->CreateAnd(Cast->getOperand(0),
ConstantInt::get(ICI.getContext(), NewCST),
LHSI->getName());
ConstantExpr::getZExt(AndCST, Cast->getSrcTy()));
NewAnd->takeName(LHSI);
return new ICmpInst(ICI.getPredicate(), NewAnd,
ConstantInt::get(ICI.getContext(), NewCI));
ConstantExpr::getZExt(RHS, Cast->getSrcTy()));
}
}

View File

@ -265,8 +265,8 @@ define i1 @test31(i64 %A) {
%C = and i32 %B, 42 ; <i32> [#uses=1]
%D = icmp eq i32 %C, 10 ; <i1> [#uses=1]
ret i1 %D
; CHECK: %C1 = and i64 %A, 42
; CHECK: %D = icmp eq i64 %C1, 10
; CHECK: %C = and i64 %A, 42
; CHECK: %D = icmp eq i64 %C, 10
; CHECK: ret i1 %D
}