Skip to content

Commit 1d424ee

Browse files
committed
[NFC][ValueTracking] Hoist isValidAssumeForContext out of switch
There is a lot of copy-paste-ish checks while this can be done once. Differential Revision: https://reviews.llvm.org/D149939 Reviewed By: nikic
1 parent aa4f921 commit 1d424ee

File tree

1 file changed

+21
-32
lines changed

1 file changed

+21
-32
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,9 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
698698
if (!Cmp)
699699
continue;
700700

701+
if (!isValidAssumeForContext(I, Q.CxtI, Q.DT))
702+
continue;
703+
701704
// We are attempting to compute known bits for the operands of an assume.
702705
// Do not try to use other assumptions for those recursive calls because
703706
// that can lead to mutual recursion and a compile-time explosion.
@@ -718,16 +721,14 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
718721
break;
719722
case ICmpInst::ICMP_EQ:
720723
// assume(v = a)
721-
if (match(Cmp, m_c_ICmp(Pred, m_V, m_Value(A))) &&
722-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
724+
if (match(Cmp, m_c_ICmp(Pred, m_V, m_Value(A)))) {
723725
KnownBits RHSKnown =
724726
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
725727
Known.Zero |= RHSKnown.Zero;
726728
Known.One |= RHSKnown.One;
727729
// assume(v & b = a)
728730
} else if (match(Cmp,
729-
m_c_ICmp(Pred, m_c_And(m_V, m_Value(B)), m_Value(A))) &&
730-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
731+
m_c_ICmp(Pred, m_c_And(m_V, m_Value(B)), m_Value(A)))) {
731732
KnownBits RHSKnown =
732733
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
733734
KnownBits MaskKnown =
@@ -739,8 +740,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
739740
Known.One |= RHSKnown.One & MaskKnown.One;
740741
// assume(~(v & b) = a)
741742
} else if (match(Cmp, m_c_ICmp(Pred, m_Not(m_c_And(m_V, m_Value(B))),
742-
m_Value(A))) &&
743-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
743+
m_Value(A)))) {
744744
KnownBits RHSKnown =
745745
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
746746
KnownBits MaskKnown =
@@ -752,8 +752,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
752752
Known.One |= RHSKnown.Zero & MaskKnown.One;
753753
// assume(v | b = a)
754754
} else if (match(Cmp,
755-
m_c_ICmp(Pred, m_c_Or(m_V, m_Value(B)), m_Value(A))) &&
756-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
755+
m_c_ICmp(Pred, m_c_Or(m_V, m_Value(B)), m_Value(A)))) {
757756
KnownBits RHSKnown =
758757
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
759758
KnownBits BKnown =
@@ -765,8 +764,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
765764
Known.One |= RHSKnown.One & BKnown.Zero;
766765
// assume(~(v | b) = a)
767766
} else if (match(Cmp, m_c_ICmp(Pred, m_Not(m_c_Or(m_V, m_Value(B))),
768-
m_Value(A))) &&
769-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
767+
m_Value(A)))) {
770768
KnownBits RHSKnown =
771769
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
772770
KnownBits BKnown =
@@ -778,8 +776,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
778776
Known.One |= RHSKnown.Zero & BKnown.Zero;
779777
// assume(v ^ b = a)
780778
} else if (match(Cmp,
781-
m_c_ICmp(Pred, m_c_Xor(m_V, m_Value(B)), m_Value(A))) &&
782-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
779+
m_c_ICmp(Pred, m_c_Xor(m_V, m_Value(B)), m_Value(A)))) {
783780
KnownBits RHSKnown =
784781
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
785782
KnownBits BKnown =
@@ -794,8 +791,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
794791
Known.One |= RHSKnown.Zero & BKnown.One;
795792
// assume(~(v ^ b) = a)
796793
} else if (match(Cmp, m_c_ICmp(Pred, m_Not(m_c_Xor(m_V, m_Value(B))),
797-
m_Value(A))) &&
798-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
794+
m_Value(A)))) {
799795
KnownBits RHSKnown =
800796
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
801797
KnownBits BKnown =
@@ -811,7 +807,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
811807
// assume(v << c = a)
812808
} else if (match(Cmp, m_c_ICmp(Pred, m_Shl(m_V, m_ConstantInt(C)),
813809
m_Value(A))) &&
814-
isValidAssumeForContext(I, Q.CxtI, Q.DT) && C < BitWidth) {
810+
C < BitWidth) {
815811
KnownBits RHSKnown =
816812
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
817813

@@ -824,7 +820,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
824820
// assume(~(v << c) = a)
825821
} else if (match(Cmp, m_c_ICmp(Pred, m_Not(m_Shl(m_V, m_ConstantInt(C))),
826822
m_Value(A))) &&
827-
isValidAssumeForContext(I, Q.CxtI, Q.DT) && C < BitWidth) {
823+
C < BitWidth) {
828824
KnownBits RHSKnown =
829825
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
830826
// For those bits in RHS that are known, we can propagate them inverted
@@ -836,7 +832,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
836832
// assume(v >> c = a)
837833
} else if (match(Cmp, m_c_ICmp(Pred, m_Shr(m_V, m_ConstantInt(C)),
838834
m_Value(A))) &&
839-
isValidAssumeForContext(I, Q.CxtI, Q.DT) && C < BitWidth) {
835+
C < BitWidth) {
840836
KnownBits RHSKnown =
841837
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
842838
// For those bits in RHS that are known, we can propagate them to known
@@ -846,7 +842,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
846842
// assume(~(v >> c) = a)
847843
} else if (match(Cmp, m_c_ICmp(Pred, m_Not(m_Shr(m_V, m_ConstantInt(C))),
848844
m_Value(A))) &&
849-
isValidAssumeForContext(I, Q.CxtI, Q.DT) && C < BitWidth) {
845+
C < BitWidth) {
850846
KnownBits RHSKnown =
851847
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
852848
// For those bits in RHS that are known, we can propagate them inverted
@@ -857,8 +853,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
857853
break;
858854
case ICmpInst::ICMP_SGE:
859855
// assume(v >=_s c) where c is non-negative
860-
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
861-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
856+
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A)))) {
862857
KnownBits RHSKnown =
863858
computeKnownBits(A, Depth + 1, QueryNoAC).anyextOrTrunc(BitWidth);
864859

@@ -870,8 +865,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
870865
break;
871866
case ICmpInst::ICMP_SGT:
872867
// assume(v >_s c) where c is at least -1.
873-
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
874-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
868+
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A)))) {
875869
KnownBits RHSKnown =
876870
computeKnownBits(A, Depth + 1, QueryNoAC).anyextOrTrunc(BitWidth);
877871

@@ -883,8 +877,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
883877
break;
884878
case ICmpInst::ICMP_SLE:
885879
// assume(v <=_s c) where c is negative
886-
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
887-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
880+
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A)))) {
888881
KnownBits RHSKnown =
889882
computeKnownBits(A, Depth + 1, QueryNoAC).anyextOrTrunc(BitWidth);
890883

@@ -896,8 +889,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
896889
break;
897890
case ICmpInst::ICMP_SLT:
898891
// assume(v <_s c) where c is non-positive
899-
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
900-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
892+
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A)))) {
901893
KnownBits RHSKnown =
902894
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
903895

@@ -909,8 +901,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
909901
break;
910902
case ICmpInst::ICMP_ULE:
911903
// assume(v <=_u c)
912-
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
913-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
904+
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A)))) {
914905
KnownBits RHSKnown =
915906
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
916907

@@ -920,8 +911,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
920911
break;
921912
case ICmpInst::ICMP_ULT:
922913
// assume(v <_u c)
923-
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A))) &&
924-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
914+
if (match(Cmp, m_ICmp(Pred, m_V, m_Value(A)))) {
925915
KnownBits RHSKnown =
926916
computeKnownBits(A, Depth+1, QueryNoAC).anyextOrTrunc(BitWidth);
927917

@@ -944,8 +934,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
944934
case ICmpInst::ICMP_NE: {
945935
// assume (v & b != 0) where b is a power of 2
946936
const APInt *BPow2;
947-
if (match(Cmp, m_ICmp(Pred, m_c_And(m_V, m_Power2(BPow2)), m_Zero())) &&
948-
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
937+
if (match(Cmp, m_ICmp(Pred, m_c_And(m_V, m_Power2(BPow2)), m_Zero()))) {
949938
Known.One |= BPow2->zextOrTrunc(BitWidth);
950939
}
951940
} break;

0 commit comments

Comments
 (0)