# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -mtriple=riscv64 -mattr=+a,+zabha -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --- name: atomicrmw_add_i8_monotonic legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.0.entry: liveins: $x10, $x11 ; CHECK-LABEL: name: atomicrmw_add_i8_monotonic ; CHECK: liveins: $x10, $x11 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 ; CHECK-NEXT: [[AMOADD_B:%[0-9]+]]:gpr = AMOADD_B [[COPY1]], [[COPY]] :: (load store monotonic (s8)) ; CHECK-NEXT: $x10 = COPY [[AMOADD_B]] ; CHECK-NEXT: PseudoRET implicit $x10 %0:gprb(p0) = COPY $x10 %1:gprb(s64) = COPY $x11 %2:gprb(s64) = G_ATOMICRMW_ADD %0(p0), %1 :: (load store monotonic (s8)) $x10 = COPY %2(s64) PseudoRET implicit $x10 ... --- name: atomicrmw_add_i16_monotonic legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.0.entry: liveins: $x10, $x11 ; CHECK-LABEL: name: atomicrmw_add_i16_monotonic ; CHECK: liveins: $x10, $x11 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 ; CHECK-NEXT: [[AMOADD_H:%[0-9]+]]:gpr = AMOADD_H [[COPY1]], [[COPY]] :: (load store monotonic (s16)) ; CHECK-NEXT: $x10 = COPY [[AMOADD_H]] ; CHECK-NEXT: PseudoRET implicit $x10 %0:gprb(p0) = COPY $x10 %1:gprb(s64) = COPY $x11 %2:gprb(s64) = G_ATOMICRMW_ADD %0(p0), %1 :: (load store monotonic (s16)) $x10 = COPY %2(s64) PseudoRET implicit $x10 ... --- name: atomicrmw_add_i32_monotonic legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.0.entry: liveins: $x10, $x11 ; CHECK-LABEL: name: atomicrmw_add_i32_monotonic ; CHECK: liveins: $x10, $x11 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 ; CHECK-NEXT: [[AMOADD_W:%[0-9]+]]:gpr = AMOADD_W [[COPY1]], [[COPY]] :: (load store monotonic (s32)) ; CHECK-NEXT: $x10 = COPY [[AMOADD_W]] ; CHECK-NEXT: PseudoRET implicit $x10 %0:gprb(p0) = COPY $x10 %1:gprb(s64) = COPY $x11 %2:gprb(s64) = G_ATOMICRMW_ADD %0(p0), %1 :: (load store monotonic (s32)) $x10 = COPY %2(s64) PseudoRET implicit $x10 ... --- name: atomicrmw_add_i64_monotonic legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.0.entry: liveins: $x10, $x11 ; CHECK-LABEL: name: atomicrmw_add_i64_monotonic ; CHECK: liveins: $x10, $x11 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 ; CHECK-NEXT: [[AMOADD_D:%[0-9]+]]:gpr = AMOADD_D [[COPY1]], [[COPY]] :: (load store monotonic (s64)) ; CHECK-NEXT: $x10 = COPY [[AMOADD_D]] ; CHECK-NEXT: PseudoRET implicit $x10 %0:gprb(p0) = COPY $x10 %1:gprb(s64) = COPY $x11 %2:gprb(s64) = G_ATOMICRMW_ADD %0(p0), %1 :: (load store monotonic (s64)) $x10 = COPY %2(s64) PseudoRET implicit $x10 ... --- name: atomicrmw_sub_i8_monotonic legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.0.entry: liveins: $x10, $x11 ; CHECK-LABEL: name: atomicrmw_sub_i8_monotonic ; CHECK: liveins: $x10, $x11 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x0 ; CHECK-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY2]], [[COPY1]] ; CHECK-NEXT: [[AMOADD_B:%[0-9]+]]:gpr = AMOADD_B [[SUB]], [[COPY]] :: (load store monotonic (s8)) ; CHECK-NEXT: $x10 = COPY [[AMOADD_B]] ; CHECK-NEXT: PseudoRET implicit $x10 %0:gprb(p0) = COPY $x10 %1:gprb(s64) = COPY $x11 %2:gprb(s64) = G_CONSTANT i64 0 %3:gprb(s64) = G_SUB %2(s64), %1(s64) %4:gprb(s64) = G_ATOMICRMW_ADD %0(p0), %3 :: (load store monotonic (s8)) $x10 = COPY %4(s64) PseudoRET implicit $x10 ... --- name: atomicrmw_sub_i16_monotonic legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.0.entry: liveins: $x10, $x11 ; CHECK-LABEL: name: atomicrmw_sub_i16_monotonic ; CHECK: liveins: $x10, $x11 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x0 ; CHECK-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY2]], [[COPY1]] ; CHECK-NEXT: [[AMOADD_H:%[0-9]+]]:gpr = AMOADD_H [[SUB]], [[COPY]] :: (load store monotonic (s16)) ; CHECK-NEXT: $x10 = COPY [[AMOADD_H]] ; CHECK-NEXT: PseudoRET implicit $x10 %0:gprb(p0) = COPY $x10 %1:gprb(s64) = COPY $x11 %2:gprb(s64) = G_CONSTANT i64 0 %3:gprb(s64) = G_SUB %2(s64), %1(s64) %4:gprb(s64) = G_ATOMICRMW_ADD %0(p0), %3 :: (load store monotonic (s16)) $x10 = COPY %4(s64) PseudoRET implicit $x10 ... --- name: atomicrmw_sub_i32_monotonic legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.0.entry: liveins: $x10, $x11 ; CHECK-LABEL: name: atomicrmw_sub_i32_monotonic ; CHECK: liveins: $x10, $x11 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x0 ; CHECK-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY2]], [[COPY1]] ; CHECK-NEXT: [[AMOADD_W:%[0-9]+]]:gpr = AMOADD_W [[SUB]], [[COPY]] :: (load store monotonic (s32)) ; CHECK-NEXT: $x10 = COPY [[AMOADD_W]] ; CHECK-NEXT: PseudoRET implicit $x10 %0:gprb(p0) = COPY $x10 %1:gprb(s64) = COPY $x11 %2:gprb(s64) = G_CONSTANT i64 0 %3:gprb(s64) = G_SUB %2(s64), %1(s64) %4:gprb(s64) = G_ATOMICRMW_ADD %0(p0), %3 :: (load store monotonic (s32)) $x10 = COPY %4(s64) PseudoRET implicit $x10 ... --- name: atomicrmw_sub_i64_monotonic legalized: true regBankSelected: true tracksRegLiveness: true body: | bb.0.entry: liveins: $x10, $x11 ; CHECK-LABEL: name: atomicrmw_sub_i64_monotonic ; CHECK: liveins: $x10, $x11 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x0 ; CHECK-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY2]], [[COPY1]] ; CHECK-NEXT: [[AMOADD_B:%[0-9]+]]:gpr = AMOADD_B [[SUB]], [[COPY]] :: (load store monotonic (s8)) ; CHECK-NEXT: $x10 = COPY [[AMOADD_B]] ; CHECK-NEXT: PseudoRET implicit $x10 %0:gprb(p0) = COPY $x10 %1:gprb(s64) = COPY $x11 %2:gprb(s64) = G_CONSTANT i64 0 %3:gprb(s64) = G_SUB %2(s64), %1(s64) %4:gprb(s64) = G_ATOMICRMW_ADD %0(p0), %3 :: (load store monotonic (s8)) $x10 = COPY %4(s64) PseudoRET implicit $x10 ...