|
838 | 838 | (MOVDaddr [int32(off1)+off2] {sym} ptr) |
839 | 839 |
|
840 | 840 | // fold address into load/store |
841 | | -(MOVBload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 841 | +(MOVBload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 842 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
842 | 843 | (MOVBload [off1+int32(off2)] {sym} ptr mem) |
843 | | -(MOVBUload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 844 | +(MOVBUload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 845 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
844 | 846 | (MOVBUload [off1+int32(off2)] {sym} ptr mem) |
845 | | -(MOVHload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 847 | +(MOVHload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 848 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
846 | 849 | (MOVHload [off1+int32(off2)] {sym} ptr mem) |
847 | | -(MOVHUload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 850 | +(MOVHUload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 851 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
848 | 852 | (MOVHUload [off1+int32(off2)] {sym} ptr mem) |
849 | | -(MOVWload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 853 | +(MOVWload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 854 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
850 | 855 | (MOVWload [off1+int32(off2)] {sym} ptr mem) |
851 | | -(MOVWUload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 856 | +(MOVWUload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 857 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
852 | 858 | (MOVWUload [off1+int32(off2)] {sym} ptr mem) |
853 | | -(MOVDload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 859 | +(MOVDload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 860 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
854 | 861 | (MOVDload [off1+int32(off2)] {sym} ptr mem) |
855 | | -(LDP [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 862 | +(LDP [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 863 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
856 | 864 | (LDP [off1+int32(off2)] {sym} ptr mem) |
857 | | -(FMOVSload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 865 | +(FMOVSload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 866 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
858 | 867 | (FMOVSload [off1+int32(off2)] {sym} ptr mem) |
859 | | -(FMOVDload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 868 | +(FMOVDload [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 869 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
860 | 870 | (FMOVDload [off1+int32(off2)] {sym} ptr mem) |
861 | 871 |
|
862 | 872 | // register indexed load |
|
921 | 931 | (FMOVDloadidx8 ptr (MOVDconst [c]) mem) && is32Bit(c<<3) => (FMOVDload ptr [int32(c)<<3] mem) |
922 | 932 | (FMOVSloadidx4 ptr (MOVDconst [c]) mem) && is32Bit(c<<2) => (FMOVSload ptr [int32(c)<<2] mem) |
923 | 933 |
|
924 | | -(MOVBstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => |
| 934 | +(MOVBstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) |
| 935 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
925 | 936 | (MOVBstore [off1+int32(off2)] {sym} ptr val mem) |
926 | | -(MOVHstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => |
| 937 | +(MOVHstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) |
| 938 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
927 | 939 | (MOVHstore [off1+int32(off2)] {sym} ptr val mem) |
928 | | -(MOVWstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => |
| 940 | +(MOVWstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) |
| 941 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
929 | 942 | (MOVWstore [off1+int32(off2)] {sym} ptr val mem) |
930 | | -(MOVDstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => |
| 943 | +(MOVDstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) |
| 944 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
931 | 945 | (MOVDstore [off1+int32(off2)] {sym} ptr val mem) |
932 | | -(STP [off1] {sym} (ADDconst [off2] ptr) val1 val2 mem) && is32Bit(int64(off1)+off2) => |
| 946 | +(STP [off1] {sym} (ADDconst [off2] ptr) val1 val2 mem) && is32Bit(int64(off1)+off2) |
| 947 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
933 | 948 | (STP [off1+int32(off2)] {sym} ptr val1 val2 mem) |
934 | | -(FMOVSstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => |
| 949 | +(FMOVSstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) |
| 950 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
935 | 951 | (FMOVSstore [off1+int32(off2)] {sym} ptr val mem) |
936 | | -(FMOVDstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => |
| 952 | +(FMOVDstore [off1] {sym} (ADDconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) |
| 953 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
937 | 954 | (FMOVDstore [off1+int32(off2)] {sym} ptr val mem) |
938 | | -(MOVBstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 955 | +(MOVBstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 956 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
939 | 957 | (MOVBstorezero [off1+int32(off2)] {sym} ptr mem) |
940 | | -(MOVHstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 958 | +(MOVHstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 959 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
941 | 960 | (MOVHstorezero [off1+int32(off2)] {sym} ptr mem) |
942 | | -(MOVWstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 961 | +(MOVWstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 962 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
943 | 963 | (MOVWstorezero [off1+int32(off2)] {sym} ptr mem) |
944 | | -(MOVDstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 964 | +(MOVDstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 965 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
945 | 966 | (MOVDstorezero [off1+int32(off2)] {sym} ptr mem) |
946 | | -(MOVQstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => |
| 967 | +(MOVQstorezero [off1] {sym} (ADDconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) |
| 968 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
947 | 969 | (MOVQstorezero [off1+int32(off2)] {sym} ptr mem) |
948 | 970 |
|
949 | 971 | // register indexed store |
|
992 | 1014 | (FMOVSstoreidx4 ptr (MOVDconst [c]) val mem) && is32Bit(c<<2) => (FMOVSstore [int32(c)<<2] ptr val mem) |
993 | 1015 |
|
994 | 1016 | (MOVBload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
995 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1017 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1018 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
996 | 1019 | (MOVBload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
997 | 1020 | (MOVBUload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
998 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1021 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1022 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
999 | 1023 | (MOVBUload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1000 | 1024 | (MOVHload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1001 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1025 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1026 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1002 | 1027 | (MOVHload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1003 | 1028 | (MOVHUload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1004 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1029 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1030 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1005 | 1031 | (MOVHUload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1006 | 1032 | (MOVWload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1007 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1033 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1034 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1008 | 1035 | (MOVWload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1009 | 1036 | (MOVWUload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1010 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1037 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1038 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1011 | 1039 | (MOVWUload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1012 | 1040 | (MOVDload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1013 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1041 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1042 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1014 | 1043 | (MOVDload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1015 | 1044 | (LDP [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1016 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1045 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1046 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1017 | 1047 | (LDP [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1018 | 1048 | (FMOVSload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1019 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1049 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1050 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1020 | 1051 | (FMOVSload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1021 | 1052 | (FMOVDload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1022 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1053 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1054 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1023 | 1055 | (FMOVDload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1024 | 1056 |
|
1025 | 1057 | (MOVBstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) |
1026 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1058 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1059 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1027 | 1060 | (MOVBstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) |
1028 | 1061 | (MOVHstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) |
1029 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1062 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1063 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1030 | 1064 | (MOVHstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) |
1031 | 1065 | (MOVWstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) |
1032 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1066 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1067 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1033 | 1068 | (MOVWstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) |
1034 | 1069 | (MOVDstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) |
1035 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1070 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1071 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1036 | 1072 | (MOVDstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) |
1037 | 1073 | (STP [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val1 val2 mem) |
1038 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1074 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1075 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1039 | 1076 | (STP [off1+off2] {mergeSym(sym1,sym2)} ptr val1 val2 mem) |
1040 | 1077 | (FMOVSstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) |
1041 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1078 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1079 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1042 | 1080 | (FMOVSstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) |
1043 | 1081 | (FMOVDstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) |
1044 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1082 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1083 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1045 | 1084 | (FMOVDstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) |
1046 | 1085 | (MOVBstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1047 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1086 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1087 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1048 | 1088 | (MOVBstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1049 | 1089 | (MOVHstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1050 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1090 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1091 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1051 | 1092 | (MOVHstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1052 | 1093 | (MOVWstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1053 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1094 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1095 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1054 | 1096 | (MOVWstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1055 | 1097 | (MOVDstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1056 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1098 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1099 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1057 | 1100 | (MOVDstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1058 | 1101 | (MOVQstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) |
1059 | | - && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => |
| 1102 | + && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) |
| 1103 | + && (ptr.Op != OpSB || !config.ctxt.Flag_shared) => |
1060 | 1104 | (MOVQstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
1061 | 1105 |
|
1062 | 1106 | // store zero |
|
0 commit comments