mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
remove two trunc xforms that are subsumed by EvaluateInDifferentType.
The only difference is that EvaluateInDifferentType checks to ensure they are profitable before doing them :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92788 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c04d3d37e4
commit
c0f79af143
@ -628,7 +628,6 @@ Instruction *InstCombiner::commonIntCastTransforms(CastInst &CI) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Instruction *InstCombiner::visitTrunc(TruncInst &CI) {
|
||||
if (Instruction *Result = commonIntCastTransforms(CI))
|
||||
return Result;
|
||||
@ -646,41 +645,6 @@ Instruction *InstCombiner::visitTrunc(TruncInst &CI) {
|
||||
return new ICmpInst(ICmpInst::ICMP_NE, Src, Zero);
|
||||
}
|
||||
|
||||
// Optimize trunc(lshr(x, c)) to pull the shift through the truncate.
|
||||
ConstantInt *ShAmtV = 0;
|
||||
Value *ShiftOp = 0;
|
||||
if (Src->hasOneUse() &&
|
||||
match(Src, m_LShr(m_Value(ShiftOp), m_ConstantInt(ShAmtV)))) {
|
||||
uint32_t ShAmt = ShAmtV->getLimitedValue(SrcBitWidth);
|
||||
|
||||
// Get a mask for the bits shifting in.
|
||||
APInt Mask(APInt::getLowBitsSet(SrcBitWidth, ShAmt).shl(DestBitWidth));
|
||||
if (MaskedValueIsZero(ShiftOp, Mask)) {
|
||||
if (ShAmt >= DestBitWidth) // All zeros.
|
||||
return ReplaceInstUsesWith(CI, Constant::getNullValue(DestTy));
|
||||
|
||||
// Okay, we can shrink this. Truncate the input, then return a new
|
||||
// shift.
|
||||
Value *V1 = Builder->CreateTrunc(ShiftOp, DestTy, ShiftOp->getName());
|
||||
Value *V2 = ConstantExpr::getTrunc(ShAmtV, DestTy);
|
||||
return BinaryOperator::CreateLShr(V1, V2);
|
||||
}
|
||||
}
|
||||
|
||||
// Transform trunc(shl(X, C)) -> shl(trunc(X), C)
|
||||
if (Src->hasOneUse() &&
|
||||
match(Src, m_Shl(m_Value(ShiftOp), m_ConstantInt(ShAmtV)))) {
|
||||
uint32_t ShAmt = ShAmtV->getLimitedValue(SrcBitWidth);
|
||||
if (ShAmt >= DestBitWidth) // All zeros.
|
||||
return ReplaceInstUsesWith(CI, Constant::getNullValue(DestTy));
|
||||
|
||||
// Okay, we can shrink this. Truncate the input, then return a new
|
||||
// shift.
|
||||
Value *V1 = Builder->CreateTrunc(ShiftOp, DestTy, ShiftOp->getName());
|
||||
Value *V2 = ConstantExpr::getTrunc(ShAmtV, DestTy);
|
||||
return BinaryOperator::CreateShl(V1, V2);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32"
|
||||
|
||||
; RUN: opt < %s -instcombine -S | \
|
||||
; RUN: grep {call.*llvm.bswap} | count 6
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user