mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-08 18:31:23 +00:00
Implement Regression/Transforms/InstCombine/bswap-fold.ll,
folding seteq (bswap(x)), c -> seteq(x,bswap(c)) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32006 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5b4c958100
commit
458cf462ef
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user