mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 04:09:45 +00:00
[InstCombine] use 'match' to reduce code; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295991 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dae323db22
commit
8add37f8a7
@ -1167,17 +1167,15 @@ Instruction *InstCombiner::visitSExt(SExtInst &CI) {
|
||||
ShAmt);
|
||||
}
|
||||
|
||||
// If this input is a trunc from our destination, then turn sext(trunc(x))
|
||||
// If the input is a trunc from the destination type, then turn sext(trunc(x))
|
||||
// into shifts.
|
||||
if (TruncInst *TI = dyn_cast<TruncInst>(Src))
|
||||
if (TI->hasOneUse() && TI->getOperand(0)->getType() == DestTy) {
|
||||
uint32_t SrcBitSize = SrcTy->getScalarSizeInBits();
|
||||
uint32_t DestBitSize = DestTy->getScalarSizeInBits();
|
||||
|
||||
// We need to emit a shl + ashr to do the sign extend.
|
||||
Value *ShAmt = ConstantInt::get(DestTy, DestBitSize-SrcBitSize);
|
||||
Value *Res = Builder->CreateShl(TI->getOperand(0), ShAmt, "sext");
|
||||
return BinaryOperator::CreateAShr(Res, ShAmt);
|
||||
Value *X;
|
||||
if (match(Src, m_OneUse(m_Trunc(m_Value(X)))) && X->getType() == DestTy) {
|
||||
// sext(trunc(X)) --> ashr(shl(X, C), C)
|
||||
unsigned SrcBitSize = SrcTy->getScalarSizeInBits();
|
||||
unsigned DestBitSize = DestTy->getScalarSizeInBits();
|
||||
Constant *ShAmt = ConstantInt::get(DestTy, DestBitSize - SrcBitSize);
|
||||
return BinaryOperator::CreateAShr(Builder->CreateShl(X, ShAmt), ShAmt);
|
||||
}
|
||||
|
||||
if (ICmpInst *ICI = dyn_cast<ICmpInst>(Src))
|
||||
|
Loading…
Reference in New Issue
Block a user