| OLD | NEW |
| 1 ; This tries to be a comprehensive test of i64 operations, in | 1 ; This tries to be a comprehensive test of i64 operations, in |
| 2 ; particular the patterns for lowering i64 operations into constituent | 2 ; particular the patterns for lowering i64 operations into constituent |
| 3 ; i32 operations on x86-32. | 3 ; i32 operations on x86-32. |
| 4 | 4 |
| 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ | 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
| 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 8 | 8 |
| 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ | 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ |
| (...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 792 } | 792 } |
| 793 ; CHECK-LABEL: trunc64To32Signed | 793 ; CHECK-LABEL: trunc64To32Signed |
| 794 ; CHECK: mov eax,DWORD PTR [esp+0xc] | 794 ; CHECK: mov eax,DWORD PTR [esp+0xc] |
| 795 ; | 795 ; |
| 796 ; OPTM1-LABEL: trunc64To32Signed | 796 ; OPTM1-LABEL: trunc64To32Signed |
| 797 ; OPTM1: mov eax,DWORD PTR [esp+ | 797 ; OPTM1: mov eax,DWORD PTR [esp+ |
| 798 | 798 |
| 799 ; ARM32-LABEL: trunc64To32Signed | 799 ; ARM32-LABEL: trunc64To32Signed |
| 800 ; ARM32: mov r0, r2 | 800 ; ARM32: mov r0, r2 |
| 801 | 801 |
| 802 ; MIPS32-LABEL: trunc64To32Signed |
| 803 ; MIPS32: move v0,a2 |
| 804 |
| 802 define internal i32 @trunc64To16Signed(i64 %a) { | 805 define internal i32 @trunc64To16Signed(i64 %a) { |
| 803 entry: | 806 entry: |
| 804 %conv = trunc i64 %a to i16 | 807 %conv = trunc i64 %a to i16 |
| 805 %conv.ret_ext = sext i16 %conv to i32 | 808 %conv.ret_ext = sext i16 %conv to i32 |
| 806 ret i32 %conv.ret_ext | 809 ret i32 %conv.ret_ext |
| 807 } | 810 } |
| 808 ; CHECK-LABEL: trunc64To16Signed | 811 ; CHECK-LABEL: trunc64To16Signed |
| 809 ; CHECK: mov eax,DWORD PTR [esp+0x4] | 812 ; CHECK: mov eax,DWORD PTR [esp+0x4] |
| 810 ; CHECK-NEXT: movsx eax,ax | 813 ; CHECK-NEXT: movsx eax,ax |
| 811 ; | 814 ; |
| 812 ; OPTM1-LABEL: trunc64To16Signed | 815 ; OPTM1-LABEL: trunc64To16Signed |
| 813 ; OPTM1: mov ax,WORD PTR [esp+ | 816 ; OPTM1: mov ax,WORD PTR [esp+ |
| 814 ; OPTM1: movsx eax, | 817 ; OPTM1: movsx eax, |
| 815 | 818 |
| 816 ; ARM32-LABEL: trunc64To16Signed | 819 ; ARM32-LABEL: trunc64To16Signed |
| 817 ; ARM32: sxth r0, r0 | 820 ; ARM32: sxth r0, r0 |
| 818 | 821 |
| 822 ; MIPS32-LABEL: trunc64To16Signed |
| 823 ; MIPS32: sll a0,a0,0x10 |
| 824 ; MIPS32: sra a0,a0,0x10 |
| 825 ; MIPS32: move v0,a0 |
| 826 |
| 819 define internal i32 @trunc64To8Signed(i64 %a) { | 827 define internal i32 @trunc64To8Signed(i64 %a) { |
| 820 entry: | 828 entry: |
| 821 %conv = trunc i64 %a to i8 | 829 %conv = trunc i64 %a to i8 |
| 822 %conv.ret_ext = sext i8 %conv to i32 | 830 %conv.ret_ext = sext i8 %conv to i32 |
| 823 ret i32 %conv.ret_ext | 831 ret i32 %conv.ret_ext |
| 824 } | 832 } |
| 825 ; CHECK-LABEL: trunc64To8Signed | 833 ; CHECK-LABEL: trunc64To8Signed |
| 826 ; CHECK: mov eax,DWORD PTR [esp+0x4] | 834 ; CHECK: mov eax,DWORD PTR [esp+0x4] |
| 827 ; CHECK-NEXT: movsx eax,al | 835 ; CHECK-NEXT: movsx eax,al |
| 828 ; | 836 ; |
| 829 ; OPTM1-LABEL: trunc64To8Signed | 837 ; OPTM1-LABEL: trunc64To8Signed |
| 830 ; OPTM1: mov eax,DWORD PTR [esp+ | 838 ; OPTM1: mov eax,DWORD PTR [esp+ |
| 831 ; OPTM1: movsx eax, | 839 ; OPTM1: movsx eax, |
| 832 | 840 |
| 833 ; ARM32-LABEL: trunc64To8Signed | 841 ; ARM32-LABEL: trunc64To8Signed |
| 834 ; ARM32: sxtb r0, r0 | 842 ; ARM32: sxtb r0, r0 |
| 835 | 843 |
| 844 ; MIPS32-LABEL: trunc64To8Signed |
| 845 ; MIPS32: sll a0,a0,0x18 |
| 846 ; MIPS32: sra a0,a0,0x18 |
| 847 ; MIPS32: move v0,a0 |
| 848 |
| 836 define internal i32 @trunc64To32SignedConst() { | 849 define internal i32 @trunc64To32SignedConst() { |
| 837 entry: | 850 entry: |
| 838 %conv = trunc i64 12345678901234 to i32 | 851 %conv = trunc i64 12345678901234 to i32 |
| 839 ret i32 %conv | 852 ret i32 %conv |
| 840 } | 853 } |
| 841 ; CHECK-LABEL: trunc64To32SignedConst | 854 ; CHECK-LABEL: trunc64To32SignedConst |
| 842 ; CHECK: mov eax,0x73ce2ff2 | 855 ; CHECK: mov eax,0x73ce2ff2 |
| 843 ; | 856 ; |
| 844 ; OPTM1-LABEL: trunc64To32SignedConst | 857 ; OPTM1-LABEL: trunc64To32SignedConst |
| 845 ; OPTM1: mov eax,0x73ce2ff2 | 858 ; OPTM1: mov eax,0x73ce2ff2 |
| 846 | 859 |
| 847 ; ARM32-LABEL: trunc64To32SignedConst | 860 ; ARM32-LABEL: trunc64To32SignedConst |
| 848 ; ARM32: movw r0, #12274 ; 0x2ff2 | 861 ; ARM32: movw r0, #12274 ; 0x2ff2 |
| 849 ; ARM32: movt r0, #29646 ; 0x73ce | 862 ; ARM32: movt r0, #29646 ; 0x73ce |
| 850 | 863 |
| 864 ; MIPS32-LABEL: trunc64To32SignedConst |
| 865 ; MIPS32: lui v0,0x73ce |
| 866 ; MIPS32: ori v0,v0,0x2ff2 |
| 867 |
| 851 define internal i32 @trunc64To16SignedConst() { | 868 define internal i32 @trunc64To16SignedConst() { |
| 852 entry: | 869 entry: |
| 853 %conv = trunc i64 12345678901234 to i16 | 870 %conv = trunc i64 12345678901234 to i16 |
| 854 %conv.ret_ext = sext i16 %conv to i32 | 871 %conv.ret_ext = sext i16 %conv to i32 |
| 855 ret i32 %conv.ret_ext | 872 ret i32 %conv.ret_ext |
| 856 } | 873 } |
| 857 ; CHECK-LABEL: trunc64To16SignedConst | 874 ; CHECK-LABEL: trunc64To16SignedConst |
| 858 ; CHECK: mov eax,0x73ce2ff2 | 875 ; CHECK: mov eax,0x73ce2ff2 |
| 859 ; CHECK: movsx eax,ax | 876 ; CHECK: movsx eax,ax |
| 860 ; | 877 ; |
| 861 ; OPTM1-LABEL: trunc64To16SignedConst | 878 ; OPTM1-LABEL: trunc64To16SignedConst |
| 862 ; OPTM1: mov eax,0x73ce2ff2 | 879 ; OPTM1: mov eax,0x73ce2ff2 |
| 863 ; OPTM1: movsx eax, | 880 ; OPTM1: movsx eax, |
| 864 | 881 |
| 865 ; ARM32-LABEL: trunc64To16SignedConst | 882 ; ARM32-LABEL: trunc64To16SignedConst |
| 866 ; ARM32: movw r0, #12274 ; 0x2ff2 | 883 ; ARM32: movw r0, #12274 ; 0x2ff2 |
| 867 ; ARM32: movt r0, #29646 ; 0x73ce | 884 ; ARM32: movt r0, #29646 ; 0x73ce |
| 868 ; ARM32: sxth r0, r0 | 885 ; ARM32: sxth r0, r0 |
| 869 | 886 |
| 887 ; MIPS32-LABEL: trunc64To16SignedConst |
| 888 ; MIPS32: lui v0,0x73ce |
| 889 ; MIPS32: ori v0,v0,0x2ff2 |
| 890 ; MIPS32: sll v0,v0,0x10 |
| 891 ; MIPS32: sra v0,v0,0x10 |
| 892 |
| 870 define internal i32 @trunc64To32Unsigned(i64 %padding, i64 %a) { | 893 define internal i32 @trunc64To32Unsigned(i64 %padding, i64 %a) { |
| 871 entry: | 894 entry: |
| 872 %conv = trunc i64 %a to i32 | 895 %conv = trunc i64 %a to i32 |
| 873 ret i32 %conv | 896 ret i32 %conv |
| 874 } | 897 } |
| 875 ; CHECK-LABEL: trunc64To32Unsigned | 898 ; CHECK-LABEL: trunc64To32Unsigned |
| 876 ; CHECK: mov eax,DWORD PTR [esp+0xc] | 899 ; CHECK: mov eax,DWORD PTR [esp+0xc] |
| 877 ; | 900 ; |
| 878 ; OPTM1-LABEL: trunc64To32Unsigned | 901 ; OPTM1-LABEL: trunc64To32Unsigned |
| 879 ; OPTM1: mov eax,DWORD PTR [esp+ | 902 ; OPTM1: mov eax,DWORD PTR [esp+ |
| 880 | 903 |
| 881 ; ARM32-LABEL: trunc64To32Unsigned | 904 ; ARM32-LABEL: trunc64To32Unsigned |
| 882 ; ARM32: mov r0, r2 | 905 ; ARM32: mov r0, r2 |
| 883 | 906 |
| 907 ; MIPS32-LABEL: trunc64To32Unsigned |
| 908 ; MIPS32: move v0,a2 |
| 909 |
| 884 define internal i32 @trunc64To16Unsigned(i64 %a) { | 910 define internal i32 @trunc64To16Unsigned(i64 %a) { |
| 885 entry: | 911 entry: |
| 886 %conv = trunc i64 %a to i16 | 912 %conv = trunc i64 %a to i16 |
| 887 %conv.ret_ext = zext i16 %conv to i32 | 913 %conv.ret_ext = zext i16 %conv to i32 |
| 888 ret i32 %conv.ret_ext | 914 ret i32 %conv.ret_ext |
| 889 } | 915 } |
| 890 ; CHECK-LABEL: trunc64To16Unsigned | 916 ; CHECK-LABEL: trunc64To16Unsigned |
| 891 ; CHECK: mov eax,DWORD PTR [esp+0x4] | 917 ; CHECK: mov eax,DWORD PTR [esp+0x4] |
| 892 ; CHECK-NEXT: movzx eax,ax | 918 ; CHECK-NEXT: movzx eax,ax |
| 893 ; | 919 ; |
| 894 ; OPTM1-LABEL: trunc64To16Unsigned | 920 ; OPTM1-LABEL: trunc64To16Unsigned |
| 895 ; OPTM1: mov ax,WORD PTR [esp+ | 921 ; OPTM1: mov ax,WORD PTR [esp+ |
| 896 ; OPTM1: movzx eax, | 922 ; OPTM1: movzx eax, |
| 897 | 923 |
| 898 ; ARM32-LABEL: trunc64To16Unsigned | 924 ; ARM32-LABEL: trunc64To16Unsigned |
| 899 ; ARM32: uxth | 925 ; ARM32: uxth |
| 900 | 926 |
| 927 ; MIPS32-LABEL: trunc64To16Unsigned |
| 928 ; MIPS32: andi a0,a0,0xffff |
| 929 ; MIPS32: move v0,a0 |
| 930 |
| 901 define internal i32 @trunc64To8Unsigned(i64 %a) { | 931 define internal i32 @trunc64To8Unsigned(i64 %a) { |
| 902 entry: | 932 entry: |
| 903 %conv = trunc i64 %a to i8 | 933 %conv = trunc i64 %a to i8 |
| 904 %conv.ret_ext = zext i8 %conv to i32 | 934 %conv.ret_ext = zext i8 %conv to i32 |
| 905 ret i32 %conv.ret_ext | 935 ret i32 %conv.ret_ext |
| 906 } | 936 } |
| 907 ; CHECK-LABEL: trunc64To8Unsigned | 937 ; CHECK-LABEL: trunc64To8Unsigned |
| 908 ; CHECK: mov eax,DWORD PTR [esp+0x4] | 938 ; CHECK: mov eax,DWORD PTR [esp+0x4] |
| 909 ; CHECK-NEXT: movzx eax,al | 939 ; CHECK-NEXT: movzx eax,al |
| 910 ; | 940 ; |
| 911 ; OPTM1-LABEL: trunc64To8Unsigned | 941 ; OPTM1-LABEL: trunc64To8Unsigned |
| 912 ; OPTM1: mov eax,DWORD PTR [esp+ | 942 ; OPTM1: mov eax,DWORD PTR [esp+ |
| 913 ; OPTM1: movzx eax, | 943 ; OPTM1: movzx eax, |
| 914 | 944 |
| 915 ; ARM32-LABEL: trunc64To8Unsigned | 945 ; ARM32-LABEL: trunc64To8Unsigned |
| 916 ; ARM32: uxtb | 946 ; ARM32: uxtb |
| 917 | 947 |
| 948 ; MIPS32-LABEL: trunc64To8Unsigned |
| 949 ; MIPS32: andi a0,a0,0xff |
| 950 ; MIPS32: move v0,a0 |
| 951 |
| 918 define internal i32 @trunc64To1(i64 %a) { | 952 define internal i32 @trunc64To1(i64 %a) { |
| 919 entry: | 953 entry: |
| 920 ; %tobool = icmp ne i64 %a, 0 | 954 ; %tobool = icmp ne i64 %a, 0 |
| 921 %tobool = trunc i64 %a to i1 | 955 %tobool = trunc i64 %a to i1 |
| 922 %tobool.ret_ext = zext i1 %tobool to i32 | 956 %tobool.ret_ext = zext i1 %tobool to i32 |
| 923 ret i32 %tobool.ret_ext | 957 ret i32 %tobool.ret_ext |
| 924 } | 958 } |
| 925 ; CHECK-LABEL: trunc64To1 | 959 ; CHECK-LABEL: trunc64To1 |
| 926 ; CHECK: mov eax,DWORD PTR [esp+0x4] | 960 ; CHECK: mov eax,DWORD PTR [esp+0x4] |
| 927 ; CHECK: and al,0x1 | 961 ; CHECK: and al,0x1 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 945 ; CHECK: mov | 979 ; CHECK: mov |
| 946 ; CHECK: sar {{.*}},0x1f | 980 ; CHECK: sar {{.*}},0x1f |
| 947 ; | 981 ; |
| 948 ; OPTM1-LABEL: sext32To64 | 982 ; OPTM1-LABEL: sext32To64 |
| 949 ; OPTM1: mov | 983 ; OPTM1: mov |
| 950 ; OPTM1: sar {{.*}},0x1f | 984 ; OPTM1: sar {{.*}},0x1f |
| 951 | 985 |
| 952 ; ARM32-LABEL: sext32To64 | 986 ; ARM32-LABEL: sext32To64 |
| 953 ; ARM32: asr {{.*}}, #31 | 987 ; ARM32: asr {{.*}}, #31 |
| 954 | 988 |
| 989 ; MIPS32-LABEL: sext32To64 |
| 990 ; MIPS32-LABEL: sra v1,a0,0x1f |
| 991 ; MIPS32-LABEL: move v0,a0 |
| 992 |
| 955 define internal i64 @sext16To64(i32 %a) { | 993 define internal i64 @sext16To64(i32 %a) { |
| 956 entry: | 994 entry: |
| 957 %a.arg_trunc = trunc i32 %a to i16 | 995 %a.arg_trunc = trunc i32 %a to i16 |
| 958 %conv = sext i16 %a.arg_trunc to i64 | 996 %conv = sext i16 %a.arg_trunc to i64 |
| 959 ret i64 %conv | 997 ret i64 %conv |
| 960 } | 998 } |
| 961 ; CHECK-LABEL: sext16To64 | 999 ; CHECK-LABEL: sext16To64 |
| 962 ; CHECK: movsx | 1000 ; CHECK: movsx |
| 963 ; CHECK: sar {{.*}},0x1f | 1001 ; CHECK: sar {{.*}},0x1f |
| 964 ; | 1002 ; |
| 965 ; OPTM1-LABEL: sext16To64 | 1003 ; OPTM1-LABEL: sext16To64 |
| 966 ; OPTM1: movsx | 1004 ; OPTM1: movsx |
| 967 ; OPTM1: sar {{.*}},0x1f | 1005 ; OPTM1: sar {{.*}},0x1f |
| 968 | 1006 |
| 969 ; ARM32-LABEL: sext16To64 | 1007 ; ARM32-LABEL: sext16To64 |
| 970 ; ARM32: sxth | 1008 ; ARM32: sxth |
| 971 ; ARM32: asr {{.*}}, #31 | 1009 ; ARM32: asr {{.*}}, #31 |
| 972 | 1010 |
| 1011 ; MIPS32-LABEL: sext16To64 |
| 1012 ; MIPS32: sll a0,a0,0x10 |
| 1013 ; MIPS32: sra a0,a0,0x10 |
| 1014 ; MIPS32: sra v1,a0,0x1f |
| 1015 ; MIPS32: move v0,a0 |
| 1016 |
| 973 define internal i64 @sext8To64(i32 %a) { | 1017 define internal i64 @sext8To64(i32 %a) { |
| 974 entry: | 1018 entry: |
| 975 %a.arg_trunc = trunc i32 %a to i8 | 1019 %a.arg_trunc = trunc i32 %a to i8 |
| 976 %conv = sext i8 %a.arg_trunc to i64 | 1020 %conv = sext i8 %a.arg_trunc to i64 |
| 977 ret i64 %conv | 1021 ret i64 %conv |
| 978 } | 1022 } |
| 979 ; CHECK-LABEL: sext8To64 | 1023 ; CHECK-LABEL: sext8To64 |
| 980 ; CHECK: movsx | 1024 ; CHECK: movsx |
| 981 ; CHECK: sar {{.*}},0x1f | 1025 ; CHECK: sar {{.*}},0x1f |
| 982 ; | 1026 ; |
| 983 ; OPTM1-LABEL: sext8To64 | 1027 ; OPTM1-LABEL: sext8To64 |
| 984 ; OPTM1: movsx | 1028 ; OPTM1: movsx |
| 985 ; OPTM1: sar {{.*}},0x1f | 1029 ; OPTM1: sar {{.*}},0x1f |
| 986 | 1030 |
| 987 ; ARM32-LABEL: sext8To64 | 1031 ; ARM32-LABEL: sext8To64 |
| 988 ; ARM32: sxtb | 1032 ; ARM32: sxtb |
| 989 ; ARM32: asr {{.*}}, #31 | 1033 ; ARM32: asr {{.*}}, #31 |
| 990 | 1034 |
| 1035 ; MIPS32-LABEL: sext8To64 |
| 1036 ; MIPS32: sll a0,a0,0x18 |
| 1037 ; MIPS32: sra a0,a0,0x18 |
| 1038 ; MIPS32: sra v1,a0,0x1f |
| 1039 ; MIPS32: move v0,a0 |
| 1040 |
| 991 define internal i64 @sext1To64(i32 %a) { | 1041 define internal i64 @sext1To64(i32 %a) { |
| 992 entry: | 1042 entry: |
| 993 %a.arg_trunc = trunc i32 %a to i1 | 1043 %a.arg_trunc = trunc i32 %a to i1 |
| 994 %conv = sext i1 %a.arg_trunc to i64 | 1044 %conv = sext i1 %a.arg_trunc to i64 |
| 995 ret i64 %conv | 1045 ret i64 %conv |
| 996 } | 1046 } |
| 997 ; CHECK-LABEL: sext1To64 | 1047 ; CHECK-LABEL: sext1To64 |
| 998 ; CHECK: mov | 1048 ; CHECK: mov |
| 999 ; CHECK: shl {{.*}},0x1f | 1049 ; CHECK: shl {{.*}},0x1f |
| 1000 ; CHECK: sar {{.*}},0x1f | 1050 ; CHECK: sar {{.*}},0x1f |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1019 ; CHECK: mov | 1069 ; CHECK: mov |
| 1020 ; CHECK: mov {{.*}},0x0 | 1070 ; CHECK: mov {{.*}},0x0 |
| 1021 ; | 1071 ; |
| 1022 ; OPTM1-LABEL: zext32To64 | 1072 ; OPTM1-LABEL: zext32To64 |
| 1023 ; OPTM1: mov | 1073 ; OPTM1: mov |
| 1024 ; OPTM1: mov {{.*}},0x0 | 1074 ; OPTM1: mov {{.*}},0x0 |
| 1025 | 1075 |
| 1026 ; ARM32-LABEL: zext32To64 | 1076 ; ARM32-LABEL: zext32To64 |
| 1027 ; ARM32: mov {{.*}}, #0 | 1077 ; ARM32: mov {{.*}}, #0 |
| 1028 | 1078 |
| 1079 ; MIPS32-LABEL: zext32To64 |
| 1080 ; MIPS32: li v1,0 |
| 1081 ; MIPS32: move v0,a0 |
| 1082 |
| 1029 define internal i64 @zext16To64(i32 %a) { | 1083 define internal i64 @zext16To64(i32 %a) { |
| 1030 entry: | 1084 entry: |
| 1031 %a.arg_trunc = trunc i32 %a to i16 | 1085 %a.arg_trunc = trunc i32 %a to i16 |
| 1032 %conv = zext i16 %a.arg_trunc to i64 | 1086 %conv = zext i16 %a.arg_trunc to i64 |
| 1033 ret i64 %conv | 1087 ret i64 %conv |
| 1034 } | 1088 } |
| 1035 ; CHECK-LABEL: zext16To64 | 1089 ; CHECK-LABEL: zext16To64 |
| 1036 ; CHECK: movzx | 1090 ; CHECK: movzx |
| 1037 ; CHECK: mov {{.*}},0x0 | 1091 ; CHECK: mov {{.*}},0x0 |
| 1038 ; | 1092 ; |
| 1039 ; OPTM1-LABEL: zext16To64 | 1093 ; OPTM1-LABEL: zext16To64 |
| 1040 ; OPTM1: movzx | 1094 ; OPTM1: movzx |
| 1041 ; OPTM1: mov {{.*}},0x0 | 1095 ; OPTM1: mov {{.*}},0x0 |
| 1042 | 1096 |
| 1043 ; ARM32-LABEL: zext16To64 | 1097 ; ARM32-LABEL: zext16To64 |
| 1044 ; ARM32: uxth | 1098 ; ARM32: uxth |
| 1045 ; ARM32: mov {{.*}}, #0 | 1099 ; ARM32: mov {{.*}}, #0 |
| 1046 | 1100 |
| 1101 ; MIPS32-LABEL: zext16To64 |
| 1102 ; MIPS32: andi a0,a0,0xffff |
| 1103 ; MIPS32: li v1,0 |
| 1104 ; MIPS32: move v0,a0 |
| 1105 |
| 1047 define internal i64 @zext8To64(i32 %a) { | 1106 define internal i64 @zext8To64(i32 %a) { |
| 1048 entry: | 1107 entry: |
| 1049 %a.arg_trunc = trunc i32 %a to i8 | 1108 %a.arg_trunc = trunc i32 %a to i8 |
| 1050 %conv = zext i8 %a.arg_trunc to i64 | 1109 %conv = zext i8 %a.arg_trunc to i64 |
| 1051 ret i64 %conv | 1110 ret i64 %conv |
| 1052 } | 1111 } |
| 1053 ; CHECK-LABEL: zext8To64 | 1112 ; CHECK-LABEL: zext8To64 |
| 1054 ; CHECK: movzx | 1113 ; CHECK: movzx |
| 1055 ; CHECK: mov {{.*}},0x0 | 1114 ; CHECK: mov {{.*}},0x0 |
| 1056 ; | 1115 ; |
| 1057 ; OPTM1-LABEL: zext8To64 | 1116 ; OPTM1-LABEL: zext8To64 |
| 1058 ; OPTM1: movzx | 1117 ; OPTM1: movzx |
| 1059 ; OPTM1: mov {{.*}},0x0 | 1118 ; OPTM1: mov {{.*}},0x0 |
| 1060 | 1119 |
| 1061 ; ARM32-LABEL: zext8To64 | 1120 ; ARM32-LABEL: zext8To64 |
| 1062 ; ARM32: uxtb | 1121 ; ARM32: uxtb |
| 1063 ; ARM32: mov {{.*}}, #0 | 1122 ; ARM32: mov {{.*}}, #0 |
| 1064 | 1123 |
| 1124 ; MIPS32-LABEL: zext8To64 |
| 1125 ; MIPS32: andi a0,a0,0xff |
| 1126 ; MIPS32: li v1,0 |
| 1127 ; MIPS32: move v0,a0 |
| 1128 |
| 1065 define internal i64 @zext1To64(i32 %a) { | 1129 define internal i64 @zext1To64(i32 %a) { |
| 1066 entry: | 1130 entry: |
| 1067 %a.arg_trunc = trunc i32 %a to i1 | 1131 %a.arg_trunc = trunc i32 %a to i1 |
| 1068 %conv = zext i1 %a.arg_trunc to i64 | 1132 %conv = zext i1 %a.arg_trunc to i64 |
| 1069 ret i64 %conv | 1133 ret i64 %conv |
| 1070 } | 1134 } |
| 1071 ; CHECK-LABEL: zext1To64 | 1135 ; CHECK-LABEL: zext1To64 |
| 1072 ; CHECK: and {{.*}},0x1 | 1136 ; CHECK: and {{.*}},0x1 |
| 1073 ; CHECK: mov {{.*}},0x0 | 1137 ; CHECK: mov {{.*}},0x0 |
| 1074 ; | 1138 ; |
| (...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1973 %s = lshr i64 %a, 40 | 2037 %s = lshr i64 %a, 40 |
| 1974 %t = trunc i64 %s to i32 | 2038 %t = trunc i64 %s to i32 |
| 1975 %r = sub i32 %t, 1 | 2039 %r = sub i32 %t, 1 |
| 1976 ret i32 %r | 2040 ret i32 %r |
| 1977 ; ARM32-LABEL: subOneToUpperAfterShift | 2041 ; ARM32-LABEL: subOneToUpperAfterShift |
| 1978 ; ARM32: subs | 2042 ; ARM32: subs |
| 1979 ; ARM32: sbc | 2043 ; ARM32: sbc |
| 1980 ; ARM32: lsr | 2044 ; ARM32: lsr |
| 1981 ; ARM32: sub | 2045 ; ARM32: sub |
| 1982 } | 2046 } |
| OLD | NEW |