Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Side by Side Diff: tests_lit/llvm2ice_tests/fp.pnacl.ll

Issue 1148023003: Subzero: Use setcc for most fcmp conditions, instead of control flow. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Add an assert Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/IceTargetLoweringX8632.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/IceTargetLoweringX8632.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698