OLD | NEW |
1 ; This tries to be a comprehensive test of f32 and f64 operations. | 1 ; This tries to be a comprehensive test of f32 and f64 operations. |
2 ; The CHECK lines are only checking for basic instruction patterns | 2 ; The CHECK lines are only checking for basic instruction patterns |
3 ; that should be present regardless of the optimization level, so | 3 ; that should be present regardless of the optimization level, so |
4 ; there are no special OPTM1 match lines. | 4 ; there are no special OPTM1 match lines. |
5 | 5 |
6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s | 6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s |
7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s | 7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s |
8 | 8 |
9 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 9 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
10 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 10 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 | 683 |
684 if.then2: ; preds = %if.end | 684 if.then2: ; preds = %if.end |
685 call void @func() | 685 call void @func() |
686 br label %if.end3 | 686 br label %if.end3 |
687 | 687 |
688 if.end3: ; preds = %if.then2, %if.end | 688 if.end3: ; preds = %if.then2, %if.end |
689 ret void | 689 ret void |
690 } | 690 } |
691 ; CHECK-LABEL: fcmpGt | 691 ; CHECK-LABEL: fcmpGt |
692 ; CHECK: ucomiss | 692 ; CHECK: ucomiss |
693 ; CHECK: ja | 693 ; CHECK: seta |
694 ; CHECK: call {{.*}} R_{{.*}} func | 694 ; CHECK: call {{.*}} R_{{.*}} func |
695 ; CHECK: ucomisd | 695 ; CHECK: ucomisd |
696 ; CHECK: ja | 696 ; CHECK: seta |
697 ; CHECK: call {{.*}} R_{{.*}} func | 697 ; CHECK: call {{.*}} R_{{.*}} func |
698 | 698 |
699 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { | 699 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { |
700 entry: | 700 entry: |
701 %cmp = fcmp ult float %a, %b | 701 %cmp = fcmp ult float %a, %b |
702 br i1 %cmp, label %if.end, label %if.then | 702 br i1 %cmp, label %if.end, label %if.then |
703 | 703 |
704 if.then: ; preds = %entry | 704 if.then: ; preds = %entry |
705 call void @func() | 705 call void @func() |
706 br label %if.end | 706 br label %if.end |
707 | 707 |
708 if.end: ; preds = %entry, %if.then | 708 if.end: ; preds = %entry, %if.then |
709 %cmp1 = fcmp ult double %c, %d | 709 %cmp1 = fcmp ult double %c, %d |
710 br i1 %cmp1, label %if.end3, label %if.then2 | 710 br i1 %cmp1, label %if.end3, label %if.then2 |
711 | 711 |
712 if.then2: ; preds = %if.end | 712 if.then2: ; preds = %if.end |
713 call void @func() | 713 call void @func() |
714 br label %if.end3 | 714 br label %if.end3 |
715 | 715 |
716 if.end3: ; preds = %if.end, %if.then2 | 716 if.end3: ; preds = %if.end, %if.then2 |
717 ret void | 717 ret void |
718 } | 718 } |
719 ; CHECK-LABEL: fcmpGe | 719 ; CHECK-LABEL: fcmpGe |
720 ; CHECK: ucomiss | 720 ; CHECK: ucomiss |
721 ; CHECK: jb | 721 ; CHECK: setb |
722 ; CHECK: call {{.*}} R_{{.*}} func | 722 ; CHECK: call {{.*}} R_{{.*}} func |
723 ; CHECK: ucomisd | 723 ; CHECK: ucomisd |
724 ; CHECK: jb | 724 ; CHECK: setb |
725 ; CHECK: call {{.*}} R_{{.*}} func | 725 ; CHECK: call {{.*}} R_{{.*}} func |
726 | 726 |
727 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { | 727 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { |
728 entry: | 728 entry: |
729 %cmp = fcmp olt float %a, %b | 729 %cmp = fcmp olt float %a, %b |
730 br i1 %cmp, label %if.then, label %if.end | 730 br i1 %cmp, label %if.then, label %if.end |
731 | 731 |
732 if.then: ; preds = %entry | 732 if.then: ; preds = %entry |
733 call void @func() | 733 call void @func() |
734 br label %if.end | 734 br label %if.end |
735 | 735 |
736 if.end: ; preds = %if.then, %entry | 736 if.end: ; preds = %if.then, %entry |
737 %cmp1 = fcmp olt double %c, %d | 737 %cmp1 = fcmp olt double %c, %d |
738 br i1 %cmp1, label %if.then2, label %if.end3 | 738 br i1 %cmp1, label %if.then2, label %if.end3 |
739 | 739 |
740 if.then2: ; preds = %if.end | 740 if.then2: ; preds = %if.end |
741 call void @func() | 741 call void @func() |
742 br label %if.end3 | 742 br label %if.end3 |
743 | 743 |
744 if.end3: ; preds = %if.then2, %if.end | 744 if.end3: ; preds = %if.then2, %if.end |
745 ret void | 745 ret void |
746 } | 746 } |
747 ; CHECK-LABEL: fcmpLt | 747 ; CHECK-LABEL: fcmpLt |
748 ; CHECK: ucomiss | 748 ; CHECK: ucomiss |
749 ; CHECK: ja | 749 ; CHECK: seta |
750 ; CHECK: call {{.*}} R_{{.*}} func | 750 ; CHECK: call {{.*}} R_{{.*}} func |
751 ; CHECK: ucomisd | 751 ; CHECK: ucomisd |
752 ; CHECK: ja | 752 ; CHECK: seta |
753 ; CHECK: call {{.*}} R_{{.*}} func | 753 ; CHECK: call {{.*}} R_{{.*}} func |
754 | 754 |
755 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { | 755 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { |
756 entry: | 756 entry: |
757 %cmp = fcmp ugt float %a, %b | 757 %cmp = fcmp ugt float %a, %b |
758 br i1 %cmp, label %if.end, label %if.then | 758 br i1 %cmp, label %if.end, label %if.then |
759 | 759 |
760 if.then: ; preds = %entry | 760 if.then: ; preds = %entry |
761 call void @func() | 761 call void @func() |
762 br label %if.end | 762 br label %if.end |
763 | 763 |
764 if.end: ; preds = %entry, %if.then | 764 if.end: ; preds = %entry, %if.then |
765 %cmp1 = fcmp ugt double %c, %d | 765 %cmp1 = fcmp ugt double %c, %d |
766 br i1 %cmp1, label %if.end3, label %if.then2 | 766 br i1 %cmp1, label %if.end3, label %if.then2 |
767 | 767 |
768 if.then2: ; preds = %if.end | 768 if.then2: ; preds = %if.end |
769 call void @func() | 769 call void @func() |
770 br label %if.end3 | 770 br label %if.end3 |
771 | 771 |
772 if.end3: ; preds = %if.end, %if.then2 | 772 if.end3: ; preds = %if.end, %if.then2 |
773 ret void | 773 ret void |
774 } | 774 } |
775 ; CHECK-LABEL: fcmpLe | 775 ; CHECK-LABEL: fcmpLe |
776 ; CHECK: ucomiss | 776 ; CHECK: ucomiss |
777 ; CHECK: jb | 777 ; CHECK: setb |
778 ; CHECK: call {{.*}} R_{{.*}} func | 778 ; CHECK: call {{.*}} R_{{.*}} func |
779 ; CHECK: ucomisd | 779 ; CHECK: ucomisd |
780 ; CHECK: jb | 780 ; CHECK: setb |
781 ; CHECK: call {{.*}} R_{{.*}} func | 781 ; CHECK: call {{.*}} R_{{.*}} func |
782 | 782 |
783 define internal i32 @fcmpFalseFloat(float %a, float %b) { | 783 define internal i32 @fcmpFalseFloat(float %a, float %b) { |
784 entry: | 784 entry: |
785 %cmp = fcmp false float %a, %b | 785 %cmp = fcmp false float %a, %b |
786 %cmp.ret_ext = zext i1 %cmp to i32 | 786 %cmp.ret_ext = zext i1 %cmp to i32 |
787 ret i32 %cmp.ret_ext | 787 ret i32 %cmp.ret_ext |
788 } | 788 } |
789 ; CHECK-LABEL: fcmpFalseFloat | 789 ; CHECK-LABEL: fcmpFalseFloat |
790 ; CHECK: mov {{.*}},0x0 | 790 ; CHECK: mov {{.*}},0x0 |
(...skipping 30 matching lines...) Expand all Loading... |
821 ; CHECK: jp | 821 ; CHECK: jp |
822 | 822 |
823 define internal i32 @fcmpOgtFloat(float %a, float %b) { | 823 define internal i32 @fcmpOgtFloat(float %a, float %b) { |
824 entry: | 824 entry: |
825 %cmp = fcmp ogt float %a, %b | 825 %cmp = fcmp ogt float %a, %b |
826 %cmp.ret_ext = zext i1 %cmp to i32 | 826 %cmp.ret_ext = zext i1 %cmp to i32 |
827 ret i32 %cmp.ret_ext | 827 ret i32 %cmp.ret_ext |
828 } | 828 } |
829 ; CHECK-LABEL: fcmpOgtFloat | 829 ; CHECK-LABEL: fcmpOgtFloat |
830 ; CHECK: ucomiss | 830 ; CHECK: ucomiss |
831 ; CHECK: ja | 831 ; CHECK: seta |
832 | 832 |
833 define internal i32 @fcmpOgtDouble(double %a, double %b) { | 833 define internal i32 @fcmpOgtDouble(double %a, double %b) { |
834 entry: | 834 entry: |
835 %cmp = fcmp ogt double %a, %b | 835 %cmp = fcmp ogt double %a, %b |
836 %cmp.ret_ext = zext i1 %cmp to i32 | 836 %cmp.ret_ext = zext i1 %cmp to i32 |
837 ret i32 %cmp.ret_ext | 837 ret i32 %cmp.ret_ext |
838 } | 838 } |
839 ; CHECK-LABEL: fcmpOgtDouble | 839 ; CHECK-LABEL: fcmpOgtDouble |
840 ; CHECK: ucomisd | 840 ; CHECK: ucomisd |
841 ; CHECK: ja | 841 ; CHECK: seta |
842 | 842 |
843 define internal i32 @fcmpOgeFloat(float %a, float %b) { | 843 define internal i32 @fcmpOgeFloat(float %a, float %b) { |
844 entry: | 844 entry: |
845 %cmp = fcmp oge float %a, %b | 845 %cmp = fcmp oge float %a, %b |
846 %cmp.ret_ext = zext i1 %cmp to i32 | 846 %cmp.ret_ext = zext i1 %cmp to i32 |
847 ret i32 %cmp.ret_ext | 847 ret i32 %cmp.ret_ext |
848 } | 848 } |
849 ; CHECK-LABEL: fcmpOgeFloat | 849 ; CHECK-LABEL: fcmpOgeFloat |
850 ; CHECK: ucomiss | 850 ; CHECK: ucomiss |
851 ; CHECK: jae | 851 ; CHECK: setae |
852 | 852 |
853 define internal i32 @fcmpOgeDouble(double %a, double %b) { | 853 define internal i32 @fcmpOgeDouble(double %a, double %b) { |
854 entry: | 854 entry: |
855 %cmp = fcmp oge double %a, %b | 855 %cmp = fcmp oge double %a, %b |
856 %cmp.ret_ext = zext i1 %cmp to i32 | 856 %cmp.ret_ext = zext i1 %cmp to i32 |
857 ret i32 %cmp.ret_ext | 857 ret i32 %cmp.ret_ext |
858 } | 858 } |
859 ; CHECK-LABEL: fcmpOgeDouble | 859 ; CHECK-LABEL: fcmpOgeDouble |
860 ; CHECK: ucomisd | 860 ; CHECK: ucomisd |
861 ; CHECK: jae | 861 ; CHECK: setae |
862 | 862 |
863 define internal i32 @fcmpOltFloat(float %a, float %b) { | 863 define internal i32 @fcmpOltFloat(float %a, float %b) { |
864 entry: | 864 entry: |
865 %cmp = fcmp olt float %a, %b | 865 %cmp = fcmp olt float %a, %b |
866 %cmp.ret_ext = zext i1 %cmp to i32 | 866 %cmp.ret_ext = zext i1 %cmp to i32 |
867 ret i32 %cmp.ret_ext | 867 ret i32 %cmp.ret_ext |
868 } | 868 } |
869 ; CHECK-LABEL: fcmpOltFloat | 869 ; CHECK-LABEL: fcmpOltFloat |
870 ; CHECK: ucomiss | 870 ; CHECK: ucomiss |
871 ; CHECK: ja | 871 ; CHECK: seta |
872 | 872 |
873 define internal i32 @fcmpOltDouble(double %a, double %b) { | 873 define internal i32 @fcmpOltDouble(double %a, double %b) { |
874 entry: | 874 entry: |
875 %cmp = fcmp olt double %a, %b | 875 %cmp = fcmp olt double %a, %b |
876 %cmp.ret_ext = zext i1 %cmp to i32 | 876 %cmp.ret_ext = zext i1 %cmp to i32 |
877 ret i32 %cmp.ret_ext | 877 ret i32 %cmp.ret_ext |
878 } | 878 } |
879 ; CHECK-LABEL: fcmpOltDouble | 879 ; CHECK-LABEL: fcmpOltDouble |
880 ; CHECK: ucomisd | 880 ; CHECK: ucomisd |
881 ; CHECK: ja | 881 ; CHECK: seta |
882 | 882 |
883 define internal i32 @fcmpOleFloat(float %a, float %b) { | 883 define internal i32 @fcmpOleFloat(float %a, float %b) { |
884 entry: | 884 entry: |
885 %cmp = fcmp ole float %a, %b | 885 %cmp = fcmp ole float %a, %b |
886 %cmp.ret_ext = zext i1 %cmp to i32 | 886 %cmp.ret_ext = zext i1 %cmp to i32 |
887 ret i32 %cmp.ret_ext | 887 ret i32 %cmp.ret_ext |
888 } | 888 } |
889 ; CHECK-LABEL: fcmpOleFloat | 889 ; CHECK-LABEL: fcmpOleFloat |
890 ; CHECK: ucomiss | 890 ; CHECK: ucomiss |
891 ; CHECK: jae | 891 ; CHECK: setae |
892 | 892 |
893 define internal i32 @fcmpOleDouble(double %a, double %b) { | 893 define internal i32 @fcmpOleDouble(double %a, double %b) { |
894 entry: | 894 entry: |
895 %cmp = fcmp ole double %a, %b | 895 %cmp = fcmp ole double %a, %b |
896 %cmp.ret_ext = zext i1 %cmp to i32 | 896 %cmp.ret_ext = zext i1 %cmp to i32 |
897 ret i32 %cmp.ret_ext | 897 ret i32 %cmp.ret_ext |
898 } | 898 } |
899 ; CHECK-LABEL: fcmpOleDouble | 899 ; CHECK-LABEL: fcmpOleDouble |
900 ; CHECK: ucomisd | 900 ; CHECK: ucomisd |
901 ; CHECK: jae | 901 ; CHECK: setae |
902 | 902 |
903 define internal i32 @fcmpOneFloat(float %a, float %b) { | 903 define internal i32 @fcmpOneFloat(float %a, float %b) { |
904 entry: | 904 entry: |
905 %cmp = fcmp one float %a, %b | 905 %cmp = fcmp one float %a, %b |
906 %cmp.ret_ext = zext i1 %cmp to i32 | 906 %cmp.ret_ext = zext i1 %cmp to i32 |
907 ret i32 %cmp.ret_ext | 907 ret i32 %cmp.ret_ext |
908 } | 908 } |
909 ; CHECK-LABEL: fcmpOneFloat | 909 ; CHECK-LABEL: fcmpOneFloat |
910 ; CHECK: ucomiss | 910 ; CHECK: ucomiss |
911 ; CHECK: jne | 911 ; CHECK: setne |
912 | 912 |
913 define internal i32 @fcmpOneDouble(double %a, double %b) { | 913 define internal i32 @fcmpOneDouble(double %a, double %b) { |
914 entry: | 914 entry: |
915 %cmp = fcmp one double %a, %b | 915 %cmp = fcmp one double %a, %b |
916 %cmp.ret_ext = zext i1 %cmp to i32 | 916 %cmp.ret_ext = zext i1 %cmp to i32 |
917 ret i32 %cmp.ret_ext | 917 ret i32 %cmp.ret_ext |
918 } | 918 } |
919 ; CHECK-LABEL: fcmpOneDouble | 919 ; CHECK-LABEL: fcmpOneDouble |
920 ; CHECK: ucomisd | 920 ; CHECK: ucomisd |
921 ; CHECK: jne | 921 ; CHECK: setne |
922 | 922 |
923 define internal i32 @fcmpOrdFloat(float %a, float %b) { | 923 define internal i32 @fcmpOrdFloat(float %a, float %b) { |
924 entry: | 924 entry: |
925 %cmp = fcmp ord float %a, %b | 925 %cmp = fcmp ord float %a, %b |
926 %cmp.ret_ext = zext i1 %cmp to i32 | 926 %cmp.ret_ext = zext i1 %cmp to i32 |
927 ret i32 %cmp.ret_ext | 927 ret i32 %cmp.ret_ext |
928 } | 928 } |
929 ; CHECK-LABEL: fcmpOrdFloat | 929 ; CHECK-LABEL: fcmpOrdFloat |
930 ; CHECK: ucomiss | 930 ; CHECK: ucomiss |
931 ; CHECK: jnp | 931 ; CHECK: setnp |
932 | 932 |
933 define internal i32 @fcmpOrdDouble(double %a, double %b) { | 933 define internal i32 @fcmpOrdDouble(double %a, double %b) { |
934 entry: | 934 entry: |
935 %cmp = fcmp ord double %a, %b | 935 %cmp = fcmp ord double %a, %b |
936 %cmp.ret_ext = zext i1 %cmp to i32 | 936 %cmp.ret_ext = zext i1 %cmp to i32 |
937 ret i32 %cmp.ret_ext | 937 ret i32 %cmp.ret_ext |
938 } | 938 } |
939 ; CHECK-LABEL: fcmpOrdDouble | 939 ; CHECK-LABEL: fcmpOrdDouble |
940 ; CHECK: ucomisd | 940 ; CHECK: ucomisd |
941 ; CHECK: jnp | 941 ; CHECK: setnp |
942 | 942 |
943 define internal i32 @fcmpUeqFloat(float %a, float %b) { | 943 define internal i32 @fcmpUeqFloat(float %a, float %b) { |
944 entry: | 944 entry: |
945 %cmp = fcmp ueq float %a, %b | 945 %cmp = fcmp ueq float %a, %b |
946 %cmp.ret_ext = zext i1 %cmp to i32 | 946 %cmp.ret_ext = zext i1 %cmp to i32 |
947 ret i32 %cmp.ret_ext | 947 ret i32 %cmp.ret_ext |
948 } | 948 } |
949 ; CHECK-LABEL: fcmpUeqFloat | 949 ; CHECK-LABEL: fcmpUeqFloat |
950 ; CHECK: ucomiss | 950 ; CHECK: ucomiss |
951 ; CHECK: je | 951 ; CHECK: sete |
952 | 952 |
953 define internal i32 @fcmpUeqDouble(double %a, double %b) { | 953 define internal i32 @fcmpUeqDouble(double %a, double %b) { |
954 entry: | 954 entry: |
955 %cmp = fcmp ueq double %a, %b | 955 %cmp = fcmp ueq double %a, %b |
956 %cmp.ret_ext = zext i1 %cmp to i32 | 956 %cmp.ret_ext = zext i1 %cmp to i32 |
957 ret i32 %cmp.ret_ext | 957 ret i32 %cmp.ret_ext |
958 } | 958 } |
959 ; CHECK-LABEL: fcmpUeqDouble | 959 ; CHECK-LABEL: fcmpUeqDouble |
960 ; CHECK: ucomisd | 960 ; CHECK: ucomisd |
961 ; CHECK: je | 961 ; CHECK: sete |
962 | 962 |
963 define internal i32 @fcmpUgtFloat(float %a, float %b) { | 963 define internal i32 @fcmpUgtFloat(float %a, float %b) { |
964 entry: | 964 entry: |
965 %cmp = fcmp ugt float %a, %b | 965 %cmp = fcmp ugt float %a, %b |
966 %cmp.ret_ext = zext i1 %cmp to i32 | 966 %cmp.ret_ext = zext i1 %cmp to i32 |
967 ret i32 %cmp.ret_ext | 967 ret i32 %cmp.ret_ext |
968 } | 968 } |
969 ; CHECK-LABEL: fcmpUgtFloat | 969 ; CHECK-LABEL: fcmpUgtFloat |
970 ; CHECK: ucomiss | 970 ; CHECK: ucomiss |
971 ; CHECK: jb | 971 ; CHECK: setb |
972 | 972 |
973 define internal i32 @fcmpUgtDouble(double %a, double %b) { | 973 define internal i32 @fcmpUgtDouble(double %a, double %b) { |
974 entry: | 974 entry: |
975 %cmp = fcmp ugt double %a, %b | 975 %cmp = fcmp ugt double %a, %b |
976 %cmp.ret_ext = zext i1 %cmp to i32 | 976 %cmp.ret_ext = zext i1 %cmp to i32 |
977 ret i32 %cmp.ret_ext | 977 ret i32 %cmp.ret_ext |
978 } | 978 } |
979 ; CHECK-LABEL: fcmpUgtDouble | 979 ; CHECK-LABEL: fcmpUgtDouble |
980 ; CHECK: ucomisd | 980 ; CHECK: ucomisd |
981 ; CHECK: jb | 981 ; CHECK: setb |
982 | 982 |
983 define internal i32 @fcmpUgeFloat(float %a, float %b) { | 983 define internal i32 @fcmpUgeFloat(float %a, float %b) { |
984 entry: | 984 entry: |
985 %cmp = fcmp uge float %a, %b | 985 %cmp = fcmp uge float %a, %b |
986 %cmp.ret_ext = zext i1 %cmp to i32 | 986 %cmp.ret_ext = zext i1 %cmp to i32 |
987 ret i32 %cmp.ret_ext | 987 ret i32 %cmp.ret_ext |
988 } | 988 } |
989 ; CHECK-LABEL: fcmpUgeFloat | 989 ; CHECK-LABEL: fcmpUgeFloat |
990 ; CHECK: ucomiss | 990 ; CHECK: ucomiss |
991 ; CHECK: jbe | 991 ; CHECK: setbe |
992 | 992 |
993 define internal i32 @fcmpUgeDouble(double %a, double %b) { | 993 define internal i32 @fcmpUgeDouble(double %a, double %b) { |
994 entry: | 994 entry: |
995 %cmp = fcmp uge double %a, %b | 995 %cmp = fcmp uge double %a, %b |
996 %cmp.ret_ext = zext i1 %cmp to i32 | 996 %cmp.ret_ext = zext i1 %cmp to i32 |
997 ret i32 %cmp.ret_ext | 997 ret i32 %cmp.ret_ext |
998 } | 998 } |
999 ; CHECK-LABEL: fcmpUgeDouble | 999 ; CHECK-LABEL: fcmpUgeDouble |
1000 ; CHECK: ucomisd | 1000 ; CHECK: ucomisd |
1001 ; CHECK: jbe | 1001 ; CHECK: setbe |
1002 | 1002 |
1003 define internal i32 @fcmpUltFloat(float %a, float %b) { | 1003 define internal i32 @fcmpUltFloat(float %a, float %b) { |
1004 entry: | 1004 entry: |
1005 %cmp = fcmp ult float %a, %b | 1005 %cmp = fcmp ult float %a, %b |
1006 %cmp.ret_ext = zext i1 %cmp to i32 | 1006 %cmp.ret_ext = zext i1 %cmp to i32 |
1007 ret i32 %cmp.ret_ext | 1007 ret i32 %cmp.ret_ext |
1008 } | 1008 } |
1009 ; CHECK-LABEL: fcmpUltFloat | 1009 ; CHECK-LABEL: fcmpUltFloat |
1010 ; CHECK: ucomiss | 1010 ; CHECK: ucomiss |
1011 ; CHECK: jb | 1011 ; CHECK: setb |
1012 | 1012 |
1013 define internal i32 @fcmpUltDouble(double %a, double %b) { | 1013 define internal i32 @fcmpUltDouble(double %a, double %b) { |
1014 entry: | 1014 entry: |
1015 %cmp = fcmp ult double %a, %b | 1015 %cmp = fcmp ult double %a, %b |
1016 %cmp.ret_ext = zext i1 %cmp to i32 | 1016 %cmp.ret_ext = zext i1 %cmp to i32 |
1017 ret i32 %cmp.ret_ext | 1017 ret i32 %cmp.ret_ext |
1018 } | 1018 } |
1019 ; CHECK-LABEL: fcmpUltDouble | 1019 ; CHECK-LABEL: fcmpUltDouble |
1020 ; CHECK: ucomisd | 1020 ; CHECK: ucomisd |
1021 ; CHECK: jb | 1021 ; CHECK: setb |
1022 | 1022 |
1023 define internal i32 @fcmpUleFloat(float %a, float %b) { | 1023 define internal i32 @fcmpUleFloat(float %a, float %b) { |
1024 entry: | 1024 entry: |
1025 %cmp = fcmp ule float %a, %b | 1025 %cmp = fcmp ule float %a, %b |
1026 %cmp.ret_ext = zext i1 %cmp to i32 | 1026 %cmp.ret_ext = zext i1 %cmp to i32 |
1027 ret i32 %cmp.ret_ext | 1027 ret i32 %cmp.ret_ext |
1028 } | 1028 } |
1029 ; CHECK-LABEL: fcmpUleFloat | 1029 ; CHECK-LABEL: fcmpUleFloat |
1030 ; CHECK: ucomiss | 1030 ; CHECK: ucomiss |
1031 ; CHECK: jbe | 1031 ; CHECK: setbe |
1032 | 1032 |
1033 define internal i32 @fcmpUleDouble(double %a, double %b) { | 1033 define internal i32 @fcmpUleDouble(double %a, double %b) { |
1034 entry: | 1034 entry: |
1035 %cmp = fcmp ule double %a, %b | 1035 %cmp = fcmp ule double %a, %b |
1036 %cmp.ret_ext = zext i1 %cmp to i32 | 1036 %cmp.ret_ext = zext i1 %cmp to i32 |
1037 ret i32 %cmp.ret_ext | 1037 ret i32 %cmp.ret_ext |
1038 } | 1038 } |
1039 ; CHECK-LABEL: fcmpUleDouble | 1039 ; CHECK-LABEL: fcmpUleDouble |
1040 ; CHECK: ucomisd | 1040 ; CHECK: ucomisd |
1041 ; CHECK: jbe | 1041 ; CHECK: setbe |
1042 | 1042 |
1043 define internal i32 @fcmpUneFloat(float %a, float %b) { | 1043 define internal i32 @fcmpUneFloat(float %a, float %b) { |
1044 entry: | 1044 entry: |
1045 %cmp = fcmp une float %a, %b | 1045 %cmp = fcmp une float %a, %b |
1046 %cmp.ret_ext = zext i1 %cmp to i32 | 1046 %cmp.ret_ext = zext i1 %cmp to i32 |
1047 ret i32 %cmp.ret_ext | 1047 ret i32 %cmp.ret_ext |
1048 } | 1048 } |
1049 ; CHECK-LABEL: fcmpUneFloat | 1049 ; CHECK-LABEL: fcmpUneFloat |
1050 ; CHECK: ucomiss | 1050 ; CHECK: ucomiss |
1051 ; CHECK: jne | 1051 ; CHECK: jne |
(...skipping 11 matching lines...) Expand all Loading... |
1063 ; CHECK: jp | 1063 ; CHECK: jp |
1064 | 1064 |
1065 define internal i32 @fcmpUnoFloat(float %a, float %b) { | 1065 define internal i32 @fcmpUnoFloat(float %a, float %b) { |
1066 entry: | 1066 entry: |
1067 %cmp = fcmp uno float %a, %b | 1067 %cmp = fcmp uno float %a, %b |
1068 %cmp.ret_ext = zext i1 %cmp to i32 | 1068 %cmp.ret_ext = zext i1 %cmp to i32 |
1069 ret i32 %cmp.ret_ext | 1069 ret i32 %cmp.ret_ext |
1070 } | 1070 } |
1071 ; CHECK-LABEL: fcmpUnoFloat | 1071 ; CHECK-LABEL: fcmpUnoFloat |
1072 ; CHECK: ucomiss | 1072 ; CHECK: ucomiss |
1073 ; CHECK: jp | 1073 ; CHECK: setp |
1074 | 1074 |
1075 define internal i32 @fcmpUnoDouble(double %a, double %b) { | 1075 define internal i32 @fcmpUnoDouble(double %a, double %b) { |
1076 entry: | 1076 entry: |
1077 %cmp = fcmp uno double %a, %b | 1077 %cmp = fcmp uno double %a, %b |
1078 %cmp.ret_ext = zext i1 %cmp to i32 | 1078 %cmp.ret_ext = zext i1 %cmp to i32 |
1079 ret i32 %cmp.ret_ext | 1079 ret i32 %cmp.ret_ext |
1080 } | 1080 } |
1081 ; CHECK-LABEL: fcmpUnoDouble | 1081 ; CHECK-LABEL: fcmpUnoDouble |
1082 ; CHECK: ucomisd | 1082 ; CHECK: ucomisd |
1083 ; CHECK: jp | 1083 ; CHECK: setp |
1084 | 1084 |
1085 define internal i32 @fcmpTrueFloat(float %a, float %b) { | 1085 define internal i32 @fcmpTrueFloat(float %a, float %b) { |
1086 entry: | 1086 entry: |
1087 %cmp = fcmp true float %a, %b | 1087 %cmp = fcmp true float %a, %b |
1088 %cmp.ret_ext = zext i1 %cmp to i32 | 1088 %cmp.ret_ext = zext i1 %cmp to i32 |
1089 ret i32 %cmp.ret_ext | 1089 ret i32 %cmp.ret_ext |
1090 } | 1090 } |
1091 ; CHECK-LABEL: fcmpTrueFloat | 1091 ; CHECK-LABEL: fcmpTrueFloat |
1092 ; CHECK: mov {{.*}},0x1 | 1092 ; CHECK: mov {{.*}},0x1 |
1093 | 1093 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1161 ; CHECK: movsd | 1161 ; CHECK: movsd |
1162 | 1162 |
1163 define internal float @selectFloatVarVar(float %a, float %b) { | 1163 define internal float @selectFloatVarVar(float %a, float %b) { |
1164 entry: | 1164 entry: |
1165 %cmp = fcmp olt float %a, %b | 1165 %cmp = fcmp olt float %a, %b |
1166 %cond = select i1 %cmp, float %a, float %b | 1166 %cond = select i1 %cmp, float %a, float %b |
1167 ret float %cond | 1167 ret float %cond |
1168 } | 1168 } |
1169 ; CHECK-LABEL: selectFloatVarVar | 1169 ; CHECK-LABEL: selectFloatVarVar |
1170 ; CHECK: ucomiss | 1170 ; CHECK: ucomiss |
1171 ; CHECK: ja | 1171 ; CHECK: seta |
1172 ; CHECK: fld | 1172 ; CHECK: fld |
1173 | 1173 |
1174 define internal double @selectDoubleVarVar(double %a, double %b) { | 1174 define internal double @selectDoubleVarVar(double %a, double %b) { |
1175 entry: | 1175 entry: |
1176 %cmp = fcmp olt double %a, %b | 1176 %cmp = fcmp olt double %a, %b |
1177 %cond = select i1 %cmp, double %a, double %b | 1177 %cond = select i1 %cmp, double %a, double %b |
1178 ret double %cond | 1178 ret double %cond |
1179 } | 1179 } |
1180 ; CHECK-LABEL: selectDoubleVarVar | 1180 ; CHECK-LABEL: selectDoubleVarVar |
1181 ; CHECK: ucomisd | 1181 ; CHECK: ucomisd |
1182 ; CHECK: ja | 1182 ; CHECK: seta |
1183 ; CHECK: fld | 1183 ; CHECK: fld |
OLD | NEW |