| 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 |