@@ -694,3 +694,166 @@ bb0:
694
694
return %0
695
695
}
696
696
697
+ // CHECK-LABEL: sil @invert_comparison_eq :
698
+ // CHECK: %2 = builtin "cmp_ne_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
699
+ // CHECK: return %2
700
+ // CHECK: } // end sil function 'invert_comparison_eq'
701
+ sil @invert_comparison_eq : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
702
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
703
+ %2 = builtin "cmp_eq_Int64"(%0, %1) : $Builtin.Int1
704
+ %3 = integer_literal $Builtin.Int1, -1
705
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
706
+ return %4
707
+ }
708
+
709
+ // CHECK-LABEL: sil @invert_comparison_ne :
710
+ // CHECK: %2 = builtin "cmp_eq_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
711
+ // CHECK: return %2
712
+ // CHECK: } // end sil function 'invert_comparison_ne'
713
+ sil @invert_comparison_ne : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
714
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
715
+ %2 = builtin "cmp_ne_Int64"(%0, %1) : $Builtin.Int1
716
+ %3 = integer_literal $Builtin.Int1, -1
717
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
718
+ return %4
719
+ }
720
+
721
+ // CHECK-LABEL: sil @invert_comparison_sle :
722
+ // CHECK: %2 = builtin "cmp_sgt_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
723
+ // CHECK: return %2
724
+ // CHECK: } // end sil function 'invert_comparison_sle'
725
+ sil @invert_comparison_sle : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
726
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
727
+ %2 = builtin "cmp_sle_Int64"(%0, %1) : $Builtin.Int1
728
+ %3 = integer_literal $Builtin.Int1, -1
729
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
730
+ return %4
731
+ }
732
+
733
+ // CHECK-LABEL: sil @invert_comparison_slt :
734
+ // CHECK: %2 = builtin "cmp_sge_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
735
+ // CHECK: return %2
736
+ // CHECK: } // end sil function 'invert_comparison_slt'
737
+ sil @invert_comparison_slt : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
738
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
739
+ %2 = builtin "cmp_slt_Int64"(%0, %1) : $Builtin.Int1
740
+ %3 = integer_literal $Builtin.Int1, -1
741
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
742
+ return %4
743
+ }
744
+
745
+ // CHECK-LABEL: sil @invert_comparison_sge :
746
+ // CHECK: %2 = builtin "cmp_slt_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
747
+ // CHECK: return %2
748
+ // CHECK: } // end sil function 'invert_comparison_sge'
749
+ sil @invert_comparison_sge : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
750
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
751
+ %2 = builtin "cmp_sge_Int64"(%0, %1) : $Builtin.Int1
752
+ %3 = integer_literal $Builtin.Int1, -1
753
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
754
+ return %4
755
+ }
756
+
757
+ // CHECK-LABEL: sil @invert_comparison_sgt :
758
+ // CHECK: %2 = builtin "cmp_sle_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
759
+ // CHECK: return %2
760
+ // CHECK: } // end sil function 'invert_comparison_sgt'
761
+ sil @invert_comparison_sgt : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
762
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
763
+ %2 = builtin "cmp_sgt_Int64"(%0, %1) : $Builtin.Int1
764
+ %3 = integer_literal $Builtin.Int1, -1
765
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
766
+ return %4
767
+ }
768
+
769
+ // CHECK-LABEL: sil @invert_comparison_ule :
770
+ // CHECK: %2 = builtin "cmp_ugt_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
771
+ // CHECK: return %2
772
+ // CHECK: } // end sil function 'invert_comparison_ule'
773
+ sil @invert_comparison_ule : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
774
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
775
+ %2 = builtin "cmp_ule_Int64"(%0, %1) : $Builtin.Int1
776
+ %3 = integer_literal $Builtin.Int1, -1
777
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
778
+ return %4
779
+ }
780
+
781
+ // CHECK-LABEL: sil @invert_comparison_ult :
782
+ // CHECK: %2 = builtin "cmp_uge_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
783
+ // CHECK: return %2
784
+ // CHECK: } // end sil function 'invert_comparison_ult'
785
+ sil @invert_comparison_ult : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
786
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
787
+ %2 = builtin "cmp_ult_Int64"(%0, %1) : $Builtin.Int1
788
+ %3 = integer_literal $Builtin.Int1, -1
789
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
790
+ return %4
791
+ }
792
+
793
+ // CHECK-LABEL: sil @invert_comparison_uge :
794
+ // CHECK: %2 = builtin "cmp_ult_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
795
+ // CHECK: return %2
796
+ // CHECK: } // end sil function 'invert_comparison_uge'
797
+ sil @invert_comparison_uge : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
798
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
799
+ %2 = builtin "cmp_uge_Int64"(%0, %1) : $Builtin.Int1
800
+ %3 = integer_literal $Builtin.Int1, -1
801
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
802
+ return %4
803
+ }
804
+
805
+ // CHECK-LABEL: sil @invert_comparison_ugt :
806
+ // CHECK: %2 = builtin "cmp_ule_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64)
807
+ // CHECK: return %2
808
+ // CHECK: } // end sil function 'invert_comparison_ugt'
809
+ sil @invert_comparison_ugt : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
810
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
811
+ %2 = builtin "cmp_ugt_Int64"(%0, %1) : $Builtin.Int1
812
+ %3 = integer_literal $Builtin.Int1, -1
813
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
814
+ return %4
815
+ }
816
+
817
+ // CHECK-LABEL: sil @no_invert_wrong_literal :
818
+ // CHECK: builtin "cmp_ugt_Int64"
819
+ // CHECK: } // end sil function 'no_invert_wrong_literal'
820
+ sil @no_invert_wrong_literal : $@convention(thin) (Builtin.Int64, Builtin.Int64) -> Builtin.Int1 {
821
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
822
+ %2 = builtin "cmp_ugt_Int64"(%0, %1) : $Builtin.Int1
823
+ %3 = integer_literal $Builtin.Int1, 0
824
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
825
+ return %4
826
+ }
827
+
828
+ // CHECK-LABEL: sil @no_invert_unknown_rhs :
829
+ // CHECK: builtin "cmp_ugt_Int64"
830
+ // CHECK: } // end sil function 'no_invert_unknown_rhs'
831
+ sil @no_invert_unknown_rhs : $@convention(thin) (Builtin.Int64, Builtin.Int64, Builtin.Int1) -> Builtin.Int1 {
832
+ bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64, %2 : $Builtin.Int1):
833
+ %3 = builtin "cmp_ugt_Int64"(%0, %1) : $Builtin.Int1
834
+ %4 = builtin "xor_Int1"(%3, %2) : $Builtin.Int1
835
+ return %4
836
+ }
837
+
838
+ // CHECK-LABEL: sil @no_invert_no_comparison :
839
+ // CHECK: %2 = builtin "xor_Int1"
840
+ // CHECK: return %2
841
+ // CHECK: } // end sil function 'no_invert_no_comparison'
842
+ sil @no_invert_no_comparison : $@convention(thin) (Builtin.Int1) -> Builtin.Int1 {
843
+ bb0(%0 : $Builtin.Int1):
844
+ %1 = integer_literal $Builtin.Int1, -1
845
+ %2 = builtin "xor_Int1"(%0, %1) : $Builtin.Int1
846
+ return %2
847
+ }
848
+
849
+ // CHECK-LABEL: sil @no_invert_wrong_comparison :
850
+ // CHECK: builtin "fcmp_ord_FPIEEE32"
851
+ // CHECK: } // end sil function 'no_invert_wrong_comparison'
852
+ sil @no_invert_wrong_comparison : $@convention(thin) (Builtin.FPIEEE32, Builtin.FPIEEE32) -> Builtin.Int1 {
853
+ bb0(%0 : $Builtin.FPIEEE32, %1 : $Builtin.FPIEEE32):
854
+ %2 = builtin "fcmp_ord_FPIEEE32"(%0 : $Builtin.FPIEEE32, %1 : $Builtin.FPIEEE32) : $Builtin.Int1
855
+ %3 = integer_literal $Builtin.Int1, -1
856
+ %4 = builtin "xor_Int1"(%2, %3) : $Builtin.Int1
857
+ return %4
858
+ }
859
+
0 commit comments