265 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=riscv64 -mattr=+a,+zabha -run-pass=legalizer %s -o - | FileCheck %s --check-prefixes=RV64IA-ZABHA3# RUN: llc -mtriple=riscv64 -mattr=+a -run-pass=legalizer %s -o - | FileCheck %s --check-prefixes=RV64IA4 5---6name: atomicrmw_add_i8_monotonic7body: |8 bb.0.entry:9 liveins: $x10, $x1110 11 ; RV64IA-ZABHA-LABEL: name: atomicrmw_add_i8_monotonic12 ; RV64IA-ZABHA: liveins: $x10, $x1113 ; RV64IA-ZABHA-NEXT: {{ $}}14 ; RV64IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1015 ; RV64IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1116 ; RV64IA-ZABHA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[COPY1]] :: (load store monotonic (s8))17 ; RV64IA-ZABHA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)18 ; RV64IA-ZABHA-NEXT: PseudoRET implicit $x1019 ;20 ; RV64IA-LABEL: name: atomicrmw_add_i8_monotonic21 ; RV64IA: liveins: $x10, $x1122 ; RV64IA-NEXT: {{ $}}23 ; RV64IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1024 ; RV64IA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1125 ; RV64IA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[COPY1]] :: (load store monotonic (s8))26 ; RV64IA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)27 ; RV64IA-NEXT: PseudoRET implicit $x1028 %0:_(p0) = COPY $x1029 %1:_(s64) = COPY $x1130 %2:_(s8) = G_TRUNC %1(s64)31 %3:_(s8) = G_ATOMICRMW_ADD %0(p0), %2 :: (load store monotonic (s8))32 %4:_(s64) = G_ANYEXT %3(s8)33 $x10 = COPY %4(s64)34 PseudoRET implicit $x1035...36---37name: atomicrmw_add_i16_monotonic38body: |39 bb.0.entry:40 liveins: $x10, $x1141 42 ; RV64IA-ZABHA-LABEL: name: atomicrmw_add_i16_monotonic43 ; RV64IA-ZABHA: liveins: $x10, $x1144 ; RV64IA-ZABHA-NEXT: {{ $}}45 ; RV64IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1046 ; RV64IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1147 ; RV64IA-ZABHA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[COPY1]] :: (load store monotonic (s16))48 ; RV64IA-ZABHA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)49 ; RV64IA-ZABHA-NEXT: PseudoRET implicit $x1050 ;51 ; RV64IA-LABEL: name: atomicrmw_add_i16_monotonic52 ; RV64IA: liveins: $x10, $x1153 ; RV64IA-NEXT: {{ $}}54 ; RV64IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1055 ; RV64IA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1156 ; RV64IA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[COPY1]] :: (load store monotonic (s16))57 ; RV64IA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)58 ; RV64IA-NEXT: PseudoRET implicit $x1059 %0:_(p0) = COPY $x1060 %1:_(s64) = COPY $x1161 %2:_(s16) = G_TRUNC %1(s64)62 %3:_(s16) = G_ATOMICRMW_ADD %0(p0), %2 :: (load store monotonic (s16))63 %4:_(s64) = G_ANYEXT %3(s16)64 $x10 = COPY %4(s64)65 PseudoRET implicit $x1066...67---68name: atomicrmw_add_i32_monotonic69body: |70 bb.0.entry:71 liveins: $x10, $x1172 73 ; RV64IA-ZABHA-LABEL: name: atomicrmw_add_i32_monotonic74 ; RV64IA-ZABHA: liveins: $x10, $x1175 ; RV64IA-ZABHA-NEXT: {{ $}}76 ; RV64IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1077 ; RV64IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1178 ; RV64IA-ZABHA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[COPY1]] :: (load store monotonic (s32))79 ; RV64IA-ZABHA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)80 ; RV64IA-ZABHA-NEXT: PseudoRET implicit $x1081 ;82 ; RV64IA-LABEL: name: atomicrmw_add_i32_monotonic83 ; RV64IA: liveins: $x10, $x1184 ; RV64IA-NEXT: {{ $}}85 ; RV64IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1086 ; RV64IA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1187 ; RV64IA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[COPY1]] :: (load store monotonic (s32))88 ; RV64IA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)89 ; RV64IA-NEXT: PseudoRET implicit $x1090 %0:_(p0) = COPY $x1091 %1:_(s64) = COPY $x1192 %2:_(s32) = G_TRUNC %1(s64)93 %3:_(s32) = G_ATOMICRMW_ADD %0(p0), %2 :: (load store monotonic (s32))94 %4:_(s64) = G_ANYEXT %3(s32)95 $x10 = COPY %4(s64)96 PseudoRET implicit $x1097...98---99name: atomicrmw_add_i64_monotonic100body: |101 bb.0.entry:102 liveins: $x10, $x11103 104 ; RV64IA-ZABHA-LABEL: name: atomicrmw_add_i64_monotonic105 ; RV64IA-ZABHA: liveins: $x10, $x11106 ; RV64IA-ZABHA-NEXT: {{ $}}107 ; RV64IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10108 ; RV64IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11109 ; RV64IA-ZABHA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[COPY1]] :: (load store monotonic (s64))110 ; RV64IA-ZABHA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)111 ; RV64IA-ZABHA-NEXT: PseudoRET implicit $x10112 ;113 ; RV64IA-LABEL: name: atomicrmw_add_i64_monotonic114 ; RV64IA: liveins: $x10, $x11115 ; RV64IA-NEXT: {{ $}}116 ; RV64IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10117 ; RV64IA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11118 ; RV64IA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[COPY1]] :: (load store monotonic (s64))119 ; RV64IA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)120 ; RV64IA-NEXT: PseudoRET implicit $x10121 %0:_(p0) = COPY $x10122 %1:_(s64) = COPY $x11123 %2:_(s64) = G_ATOMICRMW_ADD %0(p0), %1 :: (load store monotonic (s64))124 $x10 = COPY %2(s64)125 PseudoRET implicit $x10126...127---128name: atomicrmw_sub_i8_monotonic129body: |130 bb.0.entry:131 liveins: $x10, $x11132 133 ; RV64IA-ZABHA-LABEL: name: atomicrmw_sub_i8_monotonic134 ; RV64IA-ZABHA: liveins: $x10, $x11135 ; RV64IA-ZABHA-NEXT: {{ $}}136 ; RV64IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10137 ; RV64IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11138 ; RV64IA-ZABHA-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0139 ; RV64IA-ZABHA-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY1]]140 ; RV64IA-ZABHA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[SUB]] :: (load store monotonic (s8))141 ; RV64IA-ZABHA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)142 ; RV64IA-ZABHA-NEXT: PseudoRET implicit $x10143 ;144 ; RV64IA-LABEL: name: atomicrmw_sub_i8_monotonic145 ; RV64IA: liveins: $x10, $x11146 ; RV64IA-NEXT: {{ $}}147 ; RV64IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10148 ; RV64IA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11149 ; RV64IA-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0150 ; RV64IA-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY1]]151 ; RV64IA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[SUB]] :: (load store monotonic (s8))152 ; RV64IA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)153 ; RV64IA-NEXT: PseudoRET implicit $x10154 %0:_(p0) = COPY $x10155 %1:_(s64) = COPY $x11156 %2:_(s8) = G_TRUNC %1(s64)157 %3:_(s8) = G_ATOMICRMW_SUB %0(p0), %2 :: (load store monotonic (s8))158 %4:_(s64) = G_ANYEXT %3(s8)159 $x10 = COPY %4(s64)160 PseudoRET implicit $x10161...162---163name: atomicrmw_sub_i16_monotonic164body: |165 bb.0.entry:166 liveins: $x10, $x11167 168 ; RV64IA-ZABHA-LABEL: name: atomicrmw_sub_i16_monotonic169 ; RV64IA-ZABHA: liveins: $x10, $x11170 ; RV64IA-ZABHA-NEXT: {{ $}}171 ; RV64IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10172 ; RV64IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11173 ; RV64IA-ZABHA-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0174 ; RV64IA-ZABHA-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY1]]175 ; RV64IA-ZABHA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[SUB]] :: (load store monotonic (s16))176 ; RV64IA-ZABHA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)177 ; RV64IA-ZABHA-NEXT: PseudoRET implicit $x10178 ;179 ; RV64IA-LABEL: name: atomicrmw_sub_i16_monotonic180 ; RV64IA: liveins: $x10, $x11181 ; RV64IA-NEXT: {{ $}}182 ; RV64IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10183 ; RV64IA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11184 ; RV64IA-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0185 ; RV64IA-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY1]]186 ; RV64IA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[SUB]] :: (load store monotonic (s16))187 ; RV64IA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)188 ; RV64IA-NEXT: PseudoRET implicit $x10189 %0:_(p0) = COPY $x10190 %1:_(s64) = COPY $x11191 %2:_(s16) = G_TRUNC %1(s64)192 %3:_(s16) = G_ATOMICRMW_SUB %0(p0), %2 :: (load store monotonic (s16))193 %4:_(s64) = G_ANYEXT %3(s16)194 $x10 = COPY %4(s64)195 PseudoRET implicit $x10196...197---198name: atomicrmw_sub_i32_monotonic199body: |200 bb.0.entry:201 liveins: $x10, $x11202 203 ; RV64IA-ZABHA-LABEL: name: atomicrmw_sub_i32_monotonic204 ; RV64IA-ZABHA: liveins: $x10, $x11205 ; RV64IA-ZABHA-NEXT: {{ $}}206 ; RV64IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10207 ; RV64IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11208 ; RV64IA-ZABHA-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0209 ; RV64IA-ZABHA-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY1]]210 ; RV64IA-ZABHA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[SUB]] :: (load store monotonic (s32))211 ; RV64IA-ZABHA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)212 ; RV64IA-ZABHA-NEXT: PseudoRET implicit $x10213 ;214 ; RV64IA-LABEL: name: atomicrmw_sub_i32_monotonic215 ; RV64IA: liveins: $x10, $x11216 ; RV64IA-NEXT: {{ $}}217 ; RV64IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10218 ; RV64IA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11219 ; RV64IA-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0220 ; RV64IA-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY1]]221 ; RV64IA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[SUB]] :: (load store monotonic (s32))222 ; RV64IA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)223 ; RV64IA-NEXT: PseudoRET implicit $x10224 %0:_(p0) = COPY $x10225 %1:_(s64) = COPY $x11226 %2:_(s32) = G_TRUNC %1(s64)227 %3:_(s32) = G_ATOMICRMW_SUB %0(p0), %2 :: (load store monotonic (s32))228 %4:_(s64) = G_ANYEXT %3(s32)229 $x10 = COPY %4(s64)230 PseudoRET implicit $x10231...232---233name: atomicrmw_sub_i64_monotonic234body: |235 bb.0.entry:236 liveins: $x10, $x11237 238 ; RV64IA-ZABHA-LABEL: name: atomicrmw_sub_i64_monotonic239 ; RV64IA-ZABHA: liveins: $x10, $x11240 ; RV64IA-ZABHA-NEXT: {{ $}}241 ; RV64IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10242 ; RV64IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11243 ; RV64IA-ZABHA-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0244 ; RV64IA-ZABHA-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY1]]245 ; RV64IA-ZABHA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[SUB]] :: (load store monotonic (s64))246 ; RV64IA-ZABHA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)247 ; RV64IA-ZABHA-NEXT: PseudoRET implicit $x10248 ;249 ; RV64IA-LABEL: name: atomicrmw_sub_i64_monotonic250 ; RV64IA: liveins: $x10, $x11251 ; RV64IA-NEXT: {{ $}}252 ; RV64IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10253 ; RV64IA-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11254 ; RV64IA-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0255 ; RV64IA-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY1]]256 ; RV64IA-NEXT: [[ATOMICRMW_ADD:%[0-9]+]]:_(s64) = G_ATOMICRMW_ADD [[COPY]](p0), [[SUB]] :: (load store monotonic (s64))257 ; RV64IA-NEXT: $x10 = COPY [[ATOMICRMW_ADD]](s64)258 ; RV64IA-NEXT: PseudoRET implicit $x10259 %0:_(p0) = COPY $x10260 %1:_(s64) = COPY $x11261 %2:_(s64) = G_ATOMICRMW_SUB %0(p0), %1 :: (load store monotonic (s64))262 $x10 = COPY %2(s64)263 PseudoRET implicit $x10264...265