Home | History | Annotate | Download | only in opt

Lines Matching refs:Signedness

664       case Signedness::kPositiveOrNegative: {
667 case Signedness::kStrictlyNegative: {
671 case Signedness::kNegative: {
678 case Signedness::kStrictlyPositive: {
682 case Signedness::kPositive: {
694 enum class Signedness {
702 // Combine the signedness according to arithmetic rules of a given operator.
703 using Combiner = std::function<Signedness(Signedness, Signedness)>;
705 // Returns a functor to interpret the signedness of 2 expressions as if they
708 return [](Signedness lhs, Signedness rhs) {
710 case Signedness::kPositiveOrNegative:
712 case Signedness::kStrictlyNegative:
713 if (rhs == Signedness::kStrictlyNegative ||
714 rhs == Signedness::kNegative)
717 case Signedness::kNegative: {
718 if (rhs == Signedness::kStrictlyNegative)
719 return Signedness::kStrictlyNegative;
720 if (rhs == Signedness::kNegative) return Signedness::kNegative;
723 case Signedness::kStrictlyPositive: {
724 if (rhs == Signedness::kStrictlyPositive ||
725 rhs == Signedness::kPositive) {
726 return Signedness::kStrictlyPositive;
730 case Signedness::kPositive: {
731 if (rhs == Signedness::kStrictlyPositive)
732 return Signedness::kStrictlyPositive;
733 if (rhs == Signedness::kPositive) return Signedness::kPositive;
737 return Signedness::kPositiveOrNegative;
741 // Returns a functor to interpret the signedness of 2 expressions as if they
744 return [](Signedness lhs, Signedness rhs) {
746 case Signedness::kPositiveOrNegative:
748 case Signedness::kStrictlyNegative: {
750 case Signedness::kPositiveOrNegative: {
753 case Signedness::kStrictlyNegative: {
754 return Signedness::kStrictlyPositive;
756 case Signedness::kNegative: {
757 return Signedness::kPositive;
759 case Signedness::kStrictlyPositive: {
760 return Signedness::kStrictlyNegative;
762 case Signedness::kPositive: {
763 return Signedness::kNegative;
768 case Signedness::kNegative: {
770 case Signedness::kPositiveOrNegative: {
773 case Signedness::kStrictlyNegative:
774 case Signedness::kNegative: {
775 return Signedness::kPositive;
777 case Signedness::kStrictlyPositive:
778 case Signedness::kPositive: {
779 return Signedness::kNegative;
784 case Signedness::kStrictlyPositive: {
787 case Signedness::kPositive: {
789 case Signedness::kPositiveOrNegative: {
792 case Signedness::kStrictlyNegative:
793 case Signedness::kNegative: {
794 return Signedness::kNegative;
796 case Signedness::kStrictlyPositive:
797 case Signedness::kPositive: {
798 return Signedness::kPositive;
804 return Signedness::kPositiveOrNegative;
808 Signedness Visit(const SENode* node) {
832 return Signedness::kPositiveOrNegative;
835 // Returns the signedness of a constant |node|.
836 Signedness Visit(const SEConstantNode* node) {
837 if (0 == node->FoldToSingleValue()) return Signedness::kPositive;
838 if (0 < node->FoldToSingleValue()) return Signedness::kStrictlyPositive;
839 if (0 > node->FoldToSingleValue()) return Signedness::kStrictlyNegative;
840 return Signedness::kPositiveOrNegative;
843 // Returns the signedness of an unknown |node| based on its type.
844 Signedness Visit(const SEValueUnknown* node) {
850 return int_type->IsSigned() ? Signedness::kPositiveOrNegative
851 : Signedness::kPositive;
854 // Returns the signedness of a recurring expression.
855 Signedness Visit(const SERecurrentNode* node) {
856 Signedness coeff_sign = Visit(node->GetCoefficient());
862 case Signedness::kStrictlyNegative:
863 coeff_sign = Signedness::kNegative;
865 case Signedness::kStrictlyPositive:
866 coeff_sign = Signedness::kPositive;
872 // Returns the signedness of a negation |node|.
873 Signedness Visit(const SENegative* node) {
875 case Signedness::kPositiveOrNegative: {
876 return Signedness::kPositiveOrNegative;
878 case Signedness::kStrictlyNegative: {
879 return Signedness::kStrictlyPositive;
881 case Signedness::kNegative: {
882 return Signedness::kPositive;
884 case Signedness::kStrictlyPositive: {
885 return Signedness::kStrictlyNegative;
887 case Signedness::kPositive: {
888 return Signedness::kNegative;
891 return Signedness::kPositiveOrNegative;
894 Signedness Visit(const SECantCompute*) {
895 return Signedness::kPositiveOrNegative;
898 // Returns the signedness of a binary expression by using the combiner
900 Signedness VisitExpr(
902 std::function<Signedness(Signedness, Signedness)> reduce) {
903 Signedness result = Visit(*node->begin());
905 if (result == Signedness::kPositiveOrNegative) {
906 return Signedness::kPositiveOrNegative;