1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=riscv32 -run-pass=instruction-select %s -o - \ 3# RUN: -disable-gisel-legality-check | FileCheck %s 4 5--- 6name: load_i8 7legalized: true 8regBankSelected: true 9tracksRegLiveness: true 10body: | 11 bb.0: 12 liveins: $x10 13 14 ; CHECK-LABEL: name: load_i8 15 ; CHECK: liveins: $x10 16 ; CHECK-NEXT: {{ $}} 17 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 18 ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8)) 19 ; CHECK-NEXT: $x10 = COPY [[LBU]] 20 ; CHECK-NEXT: PseudoRET implicit $x10 21 %0:gprb(p0) = COPY $x10 22 %1:gprb(s32) = G_LOAD %0(p0) :: (load (s8)) 23 $x10 = COPY %1(s32) 24 PseudoRET implicit $x10 25 26... 27--- 28name: load_i16 29legalized: true 30regBankSelected: true 31tracksRegLiveness: true 32body: | 33 bb.0: 34 liveins: $x10 35 36 ; CHECK-LABEL: name: load_i16 37 ; CHECK: liveins: $x10 38 ; CHECK-NEXT: {{ $}} 39 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 40 ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16)) 41 ; CHECK-NEXT: $x10 = COPY [[LH]] 42 ; CHECK-NEXT: PseudoRET implicit $x10 43 %0:gprb(p0) = COPY $x10 44 %1:gprb(s32) = G_LOAD %0(p0) :: (load (s16)) 45 $x10 = COPY %1(s32) 46 PseudoRET implicit $x10 47 48... 49--- 50name: load_i8_i16 51legalized: true 52regBankSelected: true 53tracksRegLiveness: true 54body: | 55 bb.0: 56 liveins: $x10 57 58 ; CHECK-LABEL: name: load_i8_i16 59 ; CHECK: liveins: $x10 60 ; CHECK-NEXT: {{ $}} 61 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 62 ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8)) 63 ; CHECK-NEXT: $x10 = COPY [[LBU]] 64 ; CHECK-NEXT: PseudoRET implicit $x10 65 %0:gprb(p0) = COPY $x10 66 %1:gprb(s16) = G_LOAD %0(p0) :: (load (s8)) 67 %2:gprb(s32) = G_ANYEXT %1 68 $x10 = COPY %2(s32) 69 PseudoRET implicit $x10 70 71... 72--- 73name: load_i16_i16 74legalized: true 75regBankSelected: true 76tracksRegLiveness: true 77body: | 78 bb.0: 79 liveins: $x10 80 81 ; CHECK-LABEL: name: load_i16_i16 82 ; CHECK: liveins: $x10 83 ; CHECK-NEXT: {{ $}} 84 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 85 ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16)) 86 ; CHECK-NEXT: $x10 = COPY [[LH]] 87 ; CHECK-NEXT: PseudoRET implicit $x10 88 %0:gprb(p0) = COPY $x10 89 %1:gprb(s16) = G_LOAD %0(p0) :: (load (s16)) 90 %2:gprb(s32) = G_ANYEXT %1 91 $x10 = COPY %2(s32) 92 PseudoRET implicit $x10 93 94... 95--- 96name: load_i32 97legalized: true 98regBankSelected: true 99tracksRegLiveness: true 100body: | 101 bb.0: 102 liveins: $x10 103 104 ; CHECK-LABEL: name: load_i32 105 ; CHECK: liveins: $x10 106 ; CHECK-NEXT: {{ $}} 107 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 108 ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 0 :: (load (s32)) 109 ; CHECK-NEXT: $x10 = COPY [[LW]] 110 ; CHECK-NEXT: PseudoRET implicit $x10 111 %0:gprb(p0) = COPY $x10 112 %1:gprb(s32) = G_LOAD %0(p0) :: (load (s32)) 113 $x10 = COPY %1(s32) 114 PseudoRET implicit $x10 115 116... 117--- 118name: zextload_i8 119legalized: true 120regBankSelected: true 121tracksRegLiveness: true 122body: | 123 bb.0: 124 liveins: $x10 125 126 ; CHECK-LABEL: name: zextload_i8 127 ; CHECK: liveins: $x10 128 ; CHECK-NEXT: {{ $}} 129 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 130 ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8)) 131 ; CHECK-NEXT: $x10 = COPY [[LBU]] 132 ; CHECK-NEXT: PseudoRET implicit $x10 133 %0:gprb(p0) = COPY $x10 134 %1:gprb(s32) = G_ZEXTLOAD %0(p0) :: (load (s8)) 135 $x10 = COPY %1(s32) 136 PseudoRET implicit $x10 137 138... 139--- 140name: zextload_i16 141legalized: true 142regBankSelected: true 143tracksRegLiveness: true 144body: | 145 bb.0: 146 liveins: $x10 147 148 ; CHECK-LABEL: name: zextload_i16 149 ; CHECK: liveins: $x10 150 ; CHECK-NEXT: {{ $}} 151 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 152 ; CHECK-NEXT: [[LHU:%[0-9]+]]:gpr = LHU [[COPY]], 0 :: (load (s16)) 153 ; CHECK-NEXT: $x10 = COPY [[LHU]] 154 ; CHECK-NEXT: PseudoRET implicit $x10 155 %0:gprb(p0) = COPY $x10 156 %1:gprb(s32) = G_ZEXTLOAD %0(p0) :: (load (s16)) 157 $x10 = COPY %1(s32) 158 PseudoRET implicit $x10 159 160... 161--- 162name: sextload_i8 163legalized: true 164regBankSelected: true 165tracksRegLiveness: true 166body: | 167 bb.0: 168 liveins: $x10 169 170 ; CHECK-LABEL: name: sextload_i8 171 ; CHECK: liveins: $x10 172 ; CHECK-NEXT: {{ $}} 173 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 174 ; CHECK-NEXT: [[LB:%[0-9]+]]:gpr = LB [[COPY]], 0 :: (load (s8)) 175 ; CHECK-NEXT: $x10 = COPY [[LB]] 176 ; CHECK-NEXT: PseudoRET implicit $x10 177 %0:gprb(p0) = COPY $x10 178 %1:gprb(s32) = G_SEXTLOAD %0(p0) :: (load (s8)) 179 $x10 = COPY %1(s32) 180 PseudoRET implicit $x10 181 182... 183--- 184name: sextload_i16 185legalized: true 186regBankSelected: true 187tracksRegLiveness: true 188body: | 189 bb.0: 190 liveins: $x10 191 192 ; CHECK-LABEL: name: sextload_i16 193 ; CHECK: liveins: $x10 194 ; CHECK-NEXT: {{ $}} 195 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 196 ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16)) 197 ; CHECK-NEXT: $x10 = COPY [[LH]] 198 ; CHECK-NEXT: PseudoRET implicit $x10 199 %0:gprb(p0) = COPY $x10 200 %1:gprb(s32) = G_SEXTLOAD %0(p0) :: (load (s16)) 201 $x10 = COPY %1(s32) 202 PseudoRET implicit $x10 203 204... 205--- 206name: load_p0 207legalized: true 208regBankSelected: true 209tracksRegLiveness: true 210body: | 211 bb.0: 212 liveins: $x10 213 214 ; CHECK-LABEL: name: load_p0 215 ; CHECK: liveins: $x10 216 ; CHECK-NEXT: {{ $}} 217 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 218 ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 0 :: (load (p0)) 219 ; CHECK-NEXT: $x10 = COPY [[LW]] 220 ; CHECK-NEXT: PseudoRET implicit $x10 221 %0:gprb(p0) = COPY $x10 222 %1:gprb(p0) = G_LOAD %0(p0) :: (load (p0)) 223 $x10 = COPY %1(p0) 224 PseudoRET implicit $x10 225 226... 227--- 228name: load_fi_i32 229legalized: true 230regBankSelected: true 231tracksRegLiveness: true 232 233stack: 234 - { id: 0, offset: 0, size: 4, alignment: 4 } 235 236body: | 237 bb.0: 238 ; CHECK-LABEL: name: load_fi_i32 239 ; CHECK: [[LW:%[0-9]+]]:gpr = LW %stack.0, 0 :: (load (s32)) 240 ; CHECK-NEXT: $x10 = COPY [[LW]] 241 ; CHECK-NEXT: PseudoRET implicit $x10 242 %0:gprb(p0) = G_FRAME_INDEX %stack.0 243 %1:gprb(s32) = G_LOAD %0(p0) :: (load (s32)) 244 $x10 = COPY %1(s32) 245 PseudoRET implicit $x10 246 247... 248--- 249name: load_fi_gep_i32 250legalized: true 251regBankSelected: true 252tracksRegLiveness: true 253 254stack: 255 - { id: 0, offset: 0, size: 8, alignment: 4 } 256 257body: | 258 bb.0: 259 ; CHECK-LABEL: name: load_fi_gep_i32 260 ; CHECK: [[LW:%[0-9]+]]:gpr = LW %stack.0, 4 :: (load (s32)) 261 ; CHECK-NEXT: $x10 = COPY [[LW]] 262 ; CHECK-NEXT: PseudoRET implicit $x10 263 %0:gprb(p0) = G_FRAME_INDEX %stack.0 264 %1:gprb(s32) = G_CONSTANT i32 4 265 %2:gprb(p0) = G_PTR_ADD %0(p0), %1(s32) 266 %3:gprb(s32) = G_LOAD %2(p0) :: (load (s32)) 267 $x10 = COPY %3(s32) 268 PseudoRET implicit $x10 269 270... 271--- 272name: load_gep_i32 273legalized: true 274regBankSelected: true 275tracksRegLiveness: true 276body: | 277 bb.0: 278 liveins: $x10 279 280 ; CHECK-LABEL: name: load_gep_i32 281 ; CHECK: liveins: $x10 282 ; CHECK-NEXT: {{ $}} 283 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 284 ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 4 :: (load (s32)) 285 ; CHECK-NEXT: $x10 = COPY [[LW]] 286 ; CHECK-NEXT: PseudoRET implicit $x10 287 %0:gprb(p0) = COPY $x10 288 %1:gprb(s32) = G_CONSTANT i32 4 289 %2:gprb(p0) = G_PTR_ADD %0(p0), %1(s32) 290 %3:gprb(s32) = G_LOAD %2(p0) :: (load (s32)) 291 $x10 = COPY %3(s32) 292 PseudoRET implicit $x10 293 294... 295