mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Transform (sub 0, (zext bool to A)) to (sext bool to A) and
(sub 0, (sext bool to A)) to (zext bool to A). Patch by Muhammad Ahmad Reviewed by Duncan Sands git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173093 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e4b1efef8a
commit
8e528100d2
@ -1250,6 +1250,16 @@ Instruction *InstCombiner::visitSub(BinaryOperator &I) {
|
||||
|
||||
if (SimplifyDemandedInstructionBits(I))
|
||||
return &I;
|
||||
|
||||
// Fold (sub 0, (zext bool to B)) --> (sext bool to B)
|
||||
if (C->isZero() && match(Op1, m_ZExt(m_Value(X))))
|
||||
if (X->getType()->isIntegerTy(1))
|
||||
return CastInst::CreateSExtOrBitCast(X, Op1->getType());
|
||||
|
||||
// Fold (sub 0, (sext bool to B)) --> (zext bool to B)
|
||||
if (C->isZero() && match(Op1, m_SExt(m_Value(X))))
|
||||
if (X->getType()->isIntegerTy(1))
|
||||
return CastInst::CreateZExtOrBitCast(X, Op1->getType());
|
||||
}
|
||||
|
||||
|
||||
|
@ -138,8 +138,7 @@ define i32 @test16(i32 %b, i1 %c) {
|
||||
; e = b & (a >> 31)
|
||||
%e = mul i32 %d, %b ; <i32> [#uses=1]
|
||||
ret i32 %e
|
||||
; CHECK: [[TEST16:%.*]] = zext i1 %c to i32
|
||||
; CHECK-NEXT: %1 = sub i32 0, [[TEST16]]
|
||||
; CHECK: [[TEST16:%.*]] = sext i1 %c to i32
|
||||
; CHECK-NEXT: %e = and i32 %1, %b
|
||||
; CHECK-NEXT: ret i32 %e
|
||||
}
|
||||
|
@ -184,3 +184,12 @@ define i32 @test16(i16 %x) nounwind {
|
||||
; CHECK-NEXT: %ext = sext i16 %sext to i32
|
||||
; CHECK-NEXT: ret i32 %ext
|
||||
}
|
||||
|
||||
define i32 @test17(i1 %x) nounwind {
|
||||
%c1 = sext i1 %x to i32
|
||||
%c2 = sub i32 0, %c1
|
||||
ret i32 %c2
|
||||
; CHECK: @test17
|
||||
; CHECK-NEXT: [[TEST17:%.*]] = zext i1 %x to i32
|
||||
; CHECK-NEXT: ret i32 [[TEST17]]
|
||||
}
|
||||
|
@ -4,9 +4,9 @@
|
||||
define i32 @a(i1 zeroext %x, i1 zeroext %y) {
|
||||
entry:
|
||||
; CHECK: @a
|
||||
; CHECK: [[TMP1:%.*]] = zext i1 %y to i32
|
||||
; CHECK: [[TMP1:%.*]] = sext i1 %y to i32
|
||||
; CHECK: [[TMP2:%.*]] = select i1 %x, i32 2, i32 1
|
||||
; CHECK-NEXT: sub i32 [[TMP2]], [[TMP1]]
|
||||
; CHECK-NEXT: add i32 [[TMP2]], [[TMP1]]
|
||||
%conv = zext i1 %x to i32
|
||||
%conv3 = zext i1 %y to i32
|
||||
%conv3.neg = sub i32 0, %conv3
|
||||
|
Loading…
Reference in New Issue
Block a user