@@ -698,6 +698,9 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
698
698
if (!Cmp)
699
699
continue ;
700
700
701
+ if (!isValidAssumeForContext (I, Q.CxtI , Q.DT ))
702
+ continue ;
703
+
701
704
// We are attempting to compute known bits for the operands of an assume.
702
705
// Do not try to use other assumptions for those recursive calls because
703
706
// that can lead to mutual recursion and a compile-time explosion.
@@ -718,16 +721,14 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
718
721
break ;
719
722
case ICmpInst::ICMP_EQ:
720
723
// 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)))) {
723
725
KnownBits RHSKnown =
724
726
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
725
727
Known.Zero |= RHSKnown.Zero ;
726
728
Known.One |= RHSKnown.One ;
727
729
// assume(v & b = a)
728
730
} 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)))) {
731
732
KnownBits RHSKnown =
732
733
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
733
734
KnownBits MaskKnown =
@@ -739,8 +740,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
739
740
Known.One |= RHSKnown.One & MaskKnown.One ;
740
741
// assume(~(v & b) = a)
741
742
} 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)))) {
744
744
KnownBits RHSKnown =
745
745
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
746
746
KnownBits MaskKnown =
@@ -752,8 +752,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
752
752
Known.One |= RHSKnown.Zero & MaskKnown.One ;
753
753
// assume(v | b = a)
754
754
} 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)))) {
757
756
KnownBits RHSKnown =
758
757
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
759
758
KnownBits BKnown =
@@ -765,8 +764,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
765
764
Known.One |= RHSKnown.One & BKnown.Zero ;
766
765
// assume(~(v | b) = a)
767
766
} 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)))) {
770
768
KnownBits RHSKnown =
771
769
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
772
770
KnownBits BKnown =
@@ -778,8 +776,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
778
776
Known.One |= RHSKnown.Zero & BKnown.Zero ;
779
777
// assume(v ^ b = a)
780
778
} 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)))) {
783
780
KnownBits RHSKnown =
784
781
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
785
782
KnownBits BKnown =
@@ -794,8 +791,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
794
791
Known.One |= RHSKnown.Zero & BKnown.One ;
795
792
// assume(~(v ^ b) = a)
796
793
} 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)))) {
799
795
KnownBits RHSKnown =
800
796
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
801
797
KnownBits BKnown =
@@ -811,7 +807,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
811
807
// assume(v << c = a)
812
808
} else if (match (Cmp, m_c_ICmp (Pred, m_Shl (m_V, m_ConstantInt (C)),
813
809
m_Value (A))) &&
814
- isValidAssumeForContext (I, Q. CxtI , Q. DT ) && C < BitWidth) {
810
+ C < BitWidth) {
815
811
KnownBits RHSKnown =
816
812
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
817
813
@@ -824,7 +820,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
824
820
// assume(~(v << c) = a)
825
821
} else if (match (Cmp, m_c_ICmp (Pred, m_Not (m_Shl (m_V, m_ConstantInt (C))),
826
822
m_Value (A))) &&
827
- isValidAssumeForContext (I, Q. CxtI , Q. DT ) && C < BitWidth) {
823
+ C < BitWidth) {
828
824
KnownBits RHSKnown =
829
825
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
830
826
// 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,
836
832
// assume(v >> c = a)
837
833
} else if (match (Cmp, m_c_ICmp (Pred, m_Shr (m_V, m_ConstantInt (C)),
838
834
m_Value (A))) &&
839
- isValidAssumeForContext (I, Q. CxtI , Q. DT ) && C < BitWidth) {
835
+ C < BitWidth) {
840
836
KnownBits RHSKnown =
841
837
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
842
838
// 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,
846
842
// assume(~(v >> c) = a)
847
843
} else if (match (Cmp, m_c_ICmp (Pred, m_Not (m_Shr (m_V, m_ConstantInt (C))),
848
844
m_Value (A))) &&
849
- isValidAssumeForContext (I, Q. CxtI , Q. DT ) && C < BitWidth) {
845
+ C < BitWidth) {
850
846
KnownBits RHSKnown =
851
847
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
852
848
// 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,
857
853
break ;
858
854
case ICmpInst::ICMP_SGE:
859
855
// 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)))) {
862
857
KnownBits RHSKnown =
863
858
computeKnownBits (A, Depth + 1 , QueryNoAC).anyextOrTrunc (BitWidth);
864
859
@@ -870,8 +865,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
870
865
break ;
871
866
case ICmpInst::ICMP_SGT:
872
867
// 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)))) {
875
869
KnownBits RHSKnown =
876
870
computeKnownBits (A, Depth + 1 , QueryNoAC).anyextOrTrunc (BitWidth);
877
871
@@ -883,8 +877,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
883
877
break ;
884
878
case ICmpInst::ICMP_SLE:
885
879
// 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)))) {
888
881
KnownBits RHSKnown =
889
882
computeKnownBits (A, Depth + 1 , QueryNoAC).anyextOrTrunc (BitWidth);
890
883
@@ -896,8 +889,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
896
889
break ;
897
890
case ICmpInst::ICMP_SLT:
898
891
// 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)))) {
901
893
KnownBits RHSKnown =
902
894
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
903
895
@@ -909,8 +901,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
909
901
break ;
910
902
case ICmpInst::ICMP_ULE:
911
903
// 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)))) {
914
905
KnownBits RHSKnown =
915
906
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
916
907
@@ -920,8 +911,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
920
911
break ;
921
912
case ICmpInst::ICMP_ULT:
922
913
// 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)))) {
925
915
KnownBits RHSKnown =
926
916
computeKnownBits (A, Depth+1 , QueryNoAC).anyextOrTrunc (BitWidth);
927
917
@@ -944,8 +934,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
944
934
case ICmpInst::ICMP_NE: {
945
935
// assume (v & b != 0) where b is a power of 2
946
936
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 ()))) {
949
938
Known.One |= BPow2->zextOrTrunc (BitWidth);
950
939
}
951
940
} break ;
0 commit comments