156 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=riscv32 -mattr=+a,+zacas,+zabha -run-pass=legalizer %s -o - \3# RUN: | FileCheck %s --check-prefixes=RV32IA-ZABHA4# RUN: llc -mtriple=riscv32 -mattr=+a -run-pass=legalizer %s -o - \5# RUN: | FileCheck %s --check-prefixes=RV32IA6 7---8name: cmpxchg_i89body: |10 bb.0:11 liveins: $x1012 13 ; RV32IA-ZABHA-LABEL: name: cmpxchg_i814 ; RV32IA-ZABHA: liveins: $x1015 ; RV32IA-ZABHA-NEXT: {{ $}}16 ; RV32IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1017 ; RV32IA-ZABHA-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 018 ; RV32IA-ZABHA-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 119 ; RV32IA-ZABHA-NEXT: [[ATOMIC_CMPXCHG:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[C]], [[C1]] :: (load store monotonic (s8))20 ; RV32IA-ZABHA-NEXT: $x10 = COPY [[ATOMIC_CMPXCHG]](s32)21 ; RV32IA-ZABHA-NEXT: PseudoRET implicit $x1022 ;23 ; RV32IA-LABEL: name: cmpxchg_i824 ; RV32IA: liveins: $x1025 ; RV32IA-NEXT: {{ $}}26 ; RV32IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1027 ; RV32IA-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 028 ; RV32IA-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 129 ; RV32IA-NEXT: [[ATOMIC_CMPXCHG:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[C]], [[C1]] :: (load store monotonic (s8))30 ; RV32IA-NEXT: $x10 = COPY [[ATOMIC_CMPXCHG]](s32)31 ; RV32IA-NEXT: PseudoRET implicit $x1032 %0:_(p0) = COPY $x1033 %1:_(s8) = G_CONSTANT i8 034 %2:_(s8) = G_CONSTANT i8 135 %3:_(s8) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store monotonic (s8))36 %4:_(s32) = G_ANYEXT %337 $x10 = COPY %4(s32)38 PseudoRET implicit $x1039...40---41name: cmpxchg_i1642body: |43 bb.0:44 liveins: $x1045 46 ; RV32IA-ZABHA-LABEL: name: cmpxchg_i1647 ; RV32IA-ZABHA: liveins: $x1048 ; RV32IA-ZABHA-NEXT: {{ $}}49 ; RV32IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1050 ; RV32IA-ZABHA-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 051 ; RV32IA-ZABHA-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 152 ; RV32IA-ZABHA-NEXT: [[ATOMIC_CMPXCHG:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[C]], [[C1]] :: (load store monotonic (s16))53 ; RV32IA-ZABHA-NEXT: $x10 = COPY [[ATOMIC_CMPXCHG]](s32)54 ; RV32IA-ZABHA-NEXT: PseudoRET implicit $x1055 ;56 ; RV32IA-LABEL: name: cmpxchg_i1657 ; RV32IA: liveins: $x1058 ; RV32IA-NEXT: {{ $}}59 ; RV32IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1060 ; RV32IA-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 061 ; RV32IA-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 162 ; RV32IA-NEXT: [[ATOMIC_CMPXCHG:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[C]], [[C1]] :: (load store monotonic (s16))63 ; RV32IA-NEXT: $x10 = COPY [[ATOMIC_CMPXCHG]](s32)64 ; RV32IA-NEXT: PseudoRET implicit $x1065 %0:_(p0) = COPY $x1066 %1:_(s16) = G_CONSTANT i16 067 %2:_(s16) = G_CONSTANT i16 168 %3:_(s16) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store monotonic (s16))69 %4:_(s32) = G_ANYEXT %370 $x10 = COPY %4(s32)71 PseudoRET implicit $x1072...73---74name: cmpxchg_i3275body: |76 bb.0:77 liveins: $x1078 79 ; RV32IA-ZABHA-LABEL: name: cmpxchg_i3280 ; RV32IA-ZABHA: liveins: $x1081 ; RV32IA-ZABHA-NEXT: {{ $}}82 ; RV32IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1083 ; RV32IA-ZABHA-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 084 ; RV32IA-ZABHA-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 185 ; RV32IA-ZABHA-NEXT: [[ATOMIC_CMPXCHG:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[C]], [[C1]] :: (load store monotonic (s32))86 ; RV32IA-ZABHA-NEXT: $x10 = COPY [[ATOMIC_CMPXCHG]](s32)87 ; RV32IA-ZABHA-NEXT: PseudoRET implicit $x1088 ;89 ; RV32IA-LABEL: name: cmpxchg_i3290 ; RV32IA: liveins: $x1091 ; RV32IA-NEXT: {{ $}}92 ; RV32IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x1093 ; RV32IA-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 094 ; RV32IA-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 195 ; RV32IA-NEXT: [[ATOMIC_CMPXCHG:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[C]], [[C1]] :: (load store monotonic (s32))96 ; RV32IA-NEXT: $x10 = COPY [[ATOMIC_CMPXCHG]](s32)97 ; RV32IA-NEXT: PseudoRET implicit $x1098 %0:_(p0) = COPY $x1099 %1:_(s32) = G_CONSTANT i32 0100 %2:_(s32) = G_CONSTANT i32 1101 %3:_(s32) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store monotonic (s32))102 $x10 = COPY %3(s32)103 PseudoRET implicit $x10104...105---106name: cmpxchg_with_success_i32107 108body: |109 bb.0:110 liveins: $x10111 112 ; RV32IA-ZABHA-LABEL: name: cmpxchg_with_success_i32113 ; RV32IA-ZABHA: liveins: $x10114 ; RV32IA-ZABHA-NEXT: {{ $}}115 ; RV32IA-ZABHA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10116 ; RV32IA-ZABHA-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0117 ; RV32IA-ZABHA-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1118 ; RV32IA-ZABHA-NEXT: [[ATOMIC_CMPXCHG:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[C]], [[C1]] :: (load store monotonic (s32))119 ; RV32IA-ZABHA-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[ATOMIC_CMPXCHG]](s32), [[C]]120 ; RV32IA-ZABHA-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[ATOMIC_CMPXCHG]](s32)121 ; RV32IA-ZABHA-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2122 ; RV32IA-ZABHA-NEXT: $x10 = COPY [[COPY1]](s32)123 ; RV32IA-ZABHA-NEXT: $x11 = COPY [[ICMP]](s32)124 ; RV32IA-ZABHA-NEXT: PseudoCALL target-flags(riscv-call) &__mulsi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10125 ; RV32IA-ZABHA-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2126 ; RV32IA-ZABHA-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10127 ; RV32IA-ZABHA-NEXT: $x10 = COPY [[COPY2]](s32)128 ; RV32IA-ZABHA-NEXT: PseudoRET implicit $x10129 ;130 ; RV32IA-LABEL: name: cmpxchg_with_success_i32131 ; RV32IA: liveins: $x10132 ; RV32IA-NEXT: {{ $}}133 ; RV32IA-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10134 ; RV32IA-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0135 ; RV32IA-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1136 ; RV32IA-NEXT: [[ATOMIC_CMPXCHG:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[C]], [[C1]] :: (load store monotonic (s32))137 ; RV32IA-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[ATOMIC_CMPXCHG]](s32), [[C]]138 ; RV32IA-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[ATOMIC_CMPXCHG]](s32)139 ; RV32IA-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2140 ; RV32IA-NEXT: $x10 = COPY [[COPY1]](s32)141 ; RV32IA-NEXT: $x11 = COPY [[ICMP]](s32)142 ; RV32IA-NEXT: PseudoCALL target-flags(riscv-call) &__mulsi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10143 ; RV32IA-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2144 ; RV32IA-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10145 ; RV32IA-NEXT: $x10 = COPY [[COPY2]](s32)146 ; RV32IA-NEXT: PseudoRET implicit $x10147 %0:_(p0) = COPY $x10148 %1:_(s32) = G_CONSTANT i32 0149 %2:_(s32) = G_CONSTANT i32 1150 %3:_(s32), %4:_(s1) = G_ATOMIC_CMPXCHG_WITH_SUCCESS %0, %1, %2 :: (load store monotonic (s32))151 %5:_(s32) = G_ANYEXT %4152 %6:_(s32) = G_MUL %3, %5153 $x10 = COPY %6(s32)154 PseudoRET implicit $x10155...156