1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \ 3# RUN: | FileCheck %s 4 5--- 6name: zextload_i8_i16 7body: | 8 bb.0: 9 liveins: $x10 10 11 ; CHECK-LABEL: name: zextload_i8_i16 12 ; CHECK: liveins: $x10 13 ; CHECK-NEXT: {{ $}} 14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 15 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8)) 16 ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32) 17 ; CHECK-NEXT: PseudoRET implicit $x10 18 %0:_(p0) = COPY $x10 19 %2:_(s16) = G_ZEXTLOAD %0(p0) :: (load (s8)) 20 %3:_(s32) = G_ANYEXT %2(s16) 21 $x10 = COPY %3(s32) 22 PseudoRET implicit $x10 23 24... 25--- 26name: zextload_i8_i32 27body: | 28 bb.0: 29 liveins: $x10 30 31 ; CHECK-LABEL: name: zextload_i8_i32 32 ; CHECK: liveins: $x10 33 ; CHECK-NEXT: {{ $}} 34 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 35 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8)) 36 ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32) 37 ; CHECK-NEXT: PseudoRET implicit $x10 38 %0:_(p0) = COPY $x10 39 %2:_(s32) = G_ZEXTLOAD %0(p0) :: (load (s8)) 40 $x10 = COPY %2(s32) 41 PseudoRET implicit $x10 42 43... 44--- 45name: zextload_i16_i32 46body: | 47 bb.0: 48 liveins: $x10 49 50 ; CHECK-LABEL: name: zextload_i16_i32 51 ; CHECK: liveins: $x10 52 ; CHECK-NEXT: {{ $}} 53 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 54 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16)) 55 ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32) 56 ; CHECK-NEXT: PseudoRET implicit $x10 57 %0:_(p0) = COPY $x10 58 %2:_(s32) = G_ZEXTLOAD %0(p0) :: (load (s16)) 59 $x10 = COPY %2(s32) 60 PseudoRET implicit $x10 61 62... 63--- 64name: zextload_i8_i64 65body: | 66 bb.0: 67 liveins: $x10 68 69 ; CHECK-LABEL: name: zextload_i8_i64 70 ; CHECK: liveins: $x10 71 ; CHECK-NEXT: {{ $}} 72 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 73 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8)) 74 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 75 ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32) 76 ; CHECK-NEXT: $x11 = COPY [[C]](s32) 77 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11 78 %0:_(p0) = COPY $x10 79 %2:_(s64) = G_ZEXTLOAD %0(p0) :: (load (s8)) 80 %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64) 81 $x10 = COPY %3(s32) 82 $x11 = COPY %4(s32) 83 PseudoRET implicit $x10, implicit $x11 84 85... 86--- 87name: zextload_i16_i64 88body: | 89 bb.0: 90 liveins: $x10 91 92 ; CHECK-LABEL: name: zextload_i16_i64 93 ; CHECK: liveins: $x10 94 ; CHECK-NEXT: {{ $}} 95 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 96 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16)) 97 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 98 ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32) 99 ; CHECK-NEXT: $x11 = COPY [[C]](s32) 100 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11 101 %0:_(p0) = COPY $x10 102 %2:_(s64) = G_ZEXTLOAD %0(p0) :: (load (s16)) 103 %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64) 104 $x10 = COPY %3(s32) 105 $x11 = COPY %4(s32) 106 PseudoRET implicit $x10, implicit $x11 107 108... 109--- 110name: zextload_i32_i64 111body: | 112 bb.0: 113 liveins: $x10 114 115 ; CHECK-LABEL: name: zextload_i32_i64 116 ; CHECK: liveins: $x10 117 ; CHECK-NEXT: {{ $}} 118 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 119 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32)) 120 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 121 ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32) 122 ; CHECK-NEXT: $x11 = COPY [[C]](s32) 123 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11 124 %0:_(p0) = COPY $x10 125 %2:_(s64) = G_ZEXTLOAD %0(p0) :: (load (s32)) 126 %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64) 127 $x10 = COPY %3(s32) 128 $x11 = COPY %4(s32) 129 PseudoRET implicit $x10, implicit $x11 130 131... 132--- 133name: sextload_i8_i16 134body: | 135 bb.0: 136 liveins: $x10 137 138 ; CHECK-LABEL: name: sextload_i8_i16 139 ; CHECK: liveins: $x10 140 ; CHECK-NEXT: {{ $}} 141 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 142 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8)) 143 ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32) 144 ; CHECK-NEXT: PseudoRET implicit $x10 145 %0:_(p0) = COPY $x10 146 %2:_(s16) = G_SEXTLOAD %0(p0) :: (load (s8)) 147 %3:_(s32) = G_ANYEXT %2(s16) 148 $x10 = COPY %3(s32) 149 PseudoRET implicit $x10 150 151... 152--- 153name: sextload_i8_i32 154body: | 155 bb.0: 156 liveins: $x10 157 158 ; CHECK-LABEL: name: sextload_i8_i32 159 ; CHECK: liveins: $x10 160 ; CHECK-NEXT: {{ $}} 161 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 162 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8)) 163 ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32) 164 ; CHECK-NEXT: PseudoRET implicit $x10 165 %0:_(p0) = COPY $x10 166 %2:_(s32) = G_SEXTLOAD %0(p0) :: (load (s8)) 167 $x10 = COPY %2(s32) 168 PseudoRET implicit $x10 169 170... 171--- 172name: sextload_i16_i32 173body: | 174 bb.0: 175 liveins: $x10 176 177 ; CHECK-LABEL: name: sextload_i16_i32 178 ; CHECK: liveins: $x10 179 ; CHECK-NEXT: {{ $}} 180 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 181 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s16)) 182 ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32) 183 ; CHECK-NEXT: PseudoRET implicit $x10 184 %0:_(p0) = COPY $x10 185 %2:_(s32) = G_SEXTLOAD %0(p0) :: (load (s16)) 186 $x10 = COPY %2(s32) 187 PseudoRET implicit $x10 188 189... 190--- 191name: sextload_i8_i64 192body: | 193 bb.0: 194 liveins: $x10 195 196 ; CHECK-LABEL: name: sextload_i8_i64 197 ; CHECK: liveins: $x10 198 ; CHECK-NEXT: {{ $}} 199 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 200 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8)) 201 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31 202 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXTLOAD]], [[C]](s32) 203 ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32) 204 ; CHECK-NEXT: $x11 = COPY [[ASHR]](s32) 205 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11 206 %0:_(p0) = COPY $x10 207 %2:_(s64) = G_SEXTLOAD %0(p0) :: (load (s8)) 208 %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64) 209 $x10 = COPY %3(s32) 210 $x11 = COPY %4(s32) 211 PseudoRET implicit $x10, implicit $x11 212 213... 214--- 215name: sextload_i16_i64 216body: | 217 bb.0: 218 liveins: $x10 219 220 ; CHECK-LABEL: name: sextload_i16_i64 221 ; CHECK: liveins: $x10 222 ; CHECK-NEXT: {{ $}} 223 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 224 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s16)) 225 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31 226 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXTLOAD]], [[C]](s32) 227 ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32) 228 ; CHECK-NEXT: $x11 = COPY [[ASHR]](s32) 229 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11 230 %0:_(p0) = COPY $x10 231 %2:_(s64) = G_SEXTLOAD %0(p0) :: (load (s16)) 232 %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64) 233 $x10 = COPY %3(s32) 234 $x11 = COPY %4(s32) 235 PseudoRET implicit $x10, implicit $x11 236 237... 238--- 239name: sextload_i32_i64 240body: | 241 bb.0: 242 liveins: $x10 243 244 ; CHECK-LABEL: name: sextload_i32_i64 245 ; CHECK: liveins: $x10 246 ; CHECK-NEXT: {{ $}} 247 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10 248 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32)) 249 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31 250 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[LOAD]], [[C]](s32) 251 ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32) 252 ; CHECK-NEXT: $x11 = COPY [[ASHR]](s32) 253 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11 254 %0:_(p0) = COPY $x10 255 %2:_(s64) = G_SEXTLOAD %0(p0) :: (load (s32)) 256 %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64) 257 $x10 = COPY %3(s32) 258 $x11 = COPY %4(s32) 259 PseudoRET implicit $x10, implicit $x11 260 261... 262