Implement Regression/Transforms/InstCombine/bswap-fold.ll,

folding   seteq (bswap(x)), c -> seteq(x,bswap(c))

llvm-svn: 32006
This commit is contained in:
Chris Lattner 2006-11-29 05:02:16 +00:00
parent e7f83dcf4b
commit a7942b7bbd
1 changed files with 24 additions and 1 deletions

View File

@ -4664,7 +4664,7 @@ Instruction *InstCombiner::visitSetCondInst(SetCondInst &I) {
break;
}
// Simplify seteq and setne instructions...
// Simplify seteq and setne instructions with integer constant RHS.
if (I.isEquality()) {
bool isSetNE = I.getOpcode() == Instruction::SetNE;
@ -4780,6 +4780,29 @@ Instruction *InstCombiner::visitSetCondInst(SetCondInst &I) {
}
default: break;
}
} else if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Op0)) {
// Handle set{eq|ne} <intrinsic>, intcst.
switch (II->getIntrinsicID()) {
default: break;
case Intrinsic::bswap_i16: // seteq (bswap(x)), c -> seteq(x,bswap(c))
WorkList.push_back(II); // Dead?
I.setOperand(0, II->getOperand(1));
I.setOperand(1, ConstantInt::get(Type::UShortTy,
ByteSwap_16(CI->getZExtValue())));
return &I;
case Intrinsic::bswap_i32: // seteq (bswap(x)), c -> seteq(x,bswap(c))
WorkList.push_back(II); // Dead?
I.setOperand(0, II->getOperand(1));
I.setOperand(1, ConstantInt::get(Type::UIntTy,
ByteSwap_32(CI->getZExtValue())));
return &I;
case Intrinsic::bswap_i64: // seteq (bswap(x)), c -> seteq(x,bswap(c))
WorkList.push_back(II); // Dead?
I.setOperand(0, II->getOperand(1));
I.setOperand(1, ConstantInt::get(Type::ULongTy,
ByteSwap_64(CI->getZExtValue())));
return &I;
}
}
} else { // Not a SetEQ/SetNE
// If the LHS is a cast from an integral value of the same size,