mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-28 07:05:03 +00:00
Remove check which is duplicated in
InstCombiner::visitSelectInstWithICmp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75409 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a6d16ae432
commit
6db1495558
@ -9474,26 +9474,6 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
|
||||
}
|
||||
|
||||
if (ICmpInst *IC = dyn_cast<ICmpInst>(SI.getCondition())) {
|
||||
|
||||
// (x <s 0) ? -1 : 0 -> ashr x, 31
|
||||
if (TrueValC->isAllOnesValue() && FalseValC->isZero())
|
||||
if (ConstantInt *CmpCst = dyn_cast<ConstantInt>(IC->getOperand(1))) {
|
||||
if (IC->getPredicate() == ICmpInst::ICMP_SLT && CmpCst->isZero()) {
|
||||
// The comparison constant and the result are not neccessarily the
|
||||
// same width. Make an all-ones value by inserting a AShr.
|
||||
Value *X = IC->getOperand(0);
|
||||
uint32_t Bits = X->getType()->getScalarSizeInBits();
|
||||
Constant *ShAmt = Context->getConstantInt(X->getType(), Bits-1);
|
||||
Instruction *SRA = BinaryOperator::Create(Instruction::AShr, X,
|
||||
ShAmt, "ones");
|
||||
InsertNewInstBefore(SRA, SI);
|
||||
|
||||
// Then cast to the appropriate width.
|
||||
return CastInst::CreateIntegerCast(SRA, SI.getType(), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// If one of the constants is zero (we know they can't both be) and we
|
||||
// have an icmp instruction with zero, and we have an 'and' with the
|
||||
// non-constant value, eliminate this whole mess. This corresponds to
|
||||
|
Loading…
Reference in New Issue
Block a user