1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -run-pass=legalizer -global-isel-abort=2 -pass-remarks-missed='gisel*' -o - 2> %t %s | FileCheck -check-prefix=GFX8 %s 3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer -global-isel-abort=2 -o - %s | FileCheck -check-prefix=GFX6 %s 4# RUN: FileCheck -check-prefixes=ERR %s < %t 5 6# FIXME: Run with and without unaligned access turned on 7 8# ERR-NOT: remark 9# ERR: remark: <unknown>:0:0: unable to legalize instruction: %1:_(<2 x s16>) = G_ZEXTLOAD %0:_(p1) :: (load (<2 x s8>), addrspace 1) (in function: test_zextload_global_v2i16_from_2) 10# ERR-NEXT: remark: <unknown>:0:0: unable to legalize instruction: %1:_(<2 x s32>) = G_ZEXTLOAD %0:_(p1) :: (load (<2 x s8>), addrspace 1) (in function: test_zextload_global_v2i32_from_2) 11# ERR-NEXT: remark: <unknown>:0:0: unable to legalize instruction: %1:_(<2 x s32>) = G_ZEXTLOAD %0:_(p1) :: (load (<2 x s16>), addrspace 1) (in function: test_zextload_global_v2i32_from_4) 12# ERR-NEXT: remark: <unknown>:0:0: unable to legalize instruction: %1:_(<2 x s64>) = G_ZEXTLOAD %0:_(p1) :: (load (<2 x s16>), addrspace 1) (in function: test_zextload_global_v2i64_from_4) 13# ERR-NEXT: remark: <unknown>:0:0: unable to legalize instruction: %1:_(<2 x s64>) = G_ZEXTLOAD %0:_(p1) :: (load (<2 x s32>), addrspace 1) (in function: test_zextload_global_v2i64_from_8) 14# ERR-NEXT: remark: <unknown>:0:0: unable to legalize instruction: %1:_(s128) = G_ZEXTLOAD %0:_(p1) :: (load (s64), addrspace 1) (in function: test_zextload_global_s128_8) 15# ERR-NOT: remark 16 17--- 18name: test_zextload_global_i32_i1 19body: | 20 bb.0: 21 liveins: $vgpr0_vgpr1 22 23 ; GFX8-LABEL: name: test_zextload_global_i32_i1 24 ; GFX8: liveins: $vgpr0_vgpr1 25 ; GFX8-NEXT: {{ $}} 26 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 27 ; GFX8-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s8), addrspace 1) 28 ; GFX8-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 1 29 ; GFX8-NEXT: $vgpr0 = COPY [[ASSERT_ZEXT]](s32) 30 ; GFX6-LABEL: name: test_zextload_global_i32_i1 31 ; GFX6: liveins: $vgpr0_vgpr1 32 ; GFX6-NEXT: {{ $}} 33 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 34 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s8), addrspace 1) 35 ; GFX6-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 1 36 ; GFX6-NEXT: $vgpr0 = COPY [[ASSERT_ZEXT]](s32) 37 %0:_(p1) = COPY $vgpr0_vgpr1 38 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s1), addrspace 1) 39 $vgpr0 = COPY %1 40... 41 42--- 43name: test_zextload_global_i32_i7 44body: | 45 bb.0: 46 liveins: $vgpr0_vgpr1 47 48 ; GFX8-LABEL: name: test_zextload_global_i32_i7 49 ; GFX8: liveins: $vgpr0_vgpr1 50 ; GFX8-NEXT: {{ $}} 51 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 52 ; GFX8-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s8), addrspace 1) 53 ; GFX8-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 7 54 ; GFX8-NEXT: $vgpr0 = COPY [[ASSERT_ZEXT]](s32) 55 ; GFX6-LABEL: name: test_zextload_global_i32_i7 56 ; GFX6: liveins: $vgpr0_vgpr1 57 ; GFX6-NEXT: {{ $}} 58 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 59 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s8), addrspace 1) 60 ; GFX6-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 7 61 ; GFX6-NEXT: $vgpr0 = COPY [[ASSERT_ZEXT]](s32) 62 %0:_(p1) = COPY $vgpr0_vgpr1 63 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s7), addrspace 1) 64 $vgpr0 = COPY %1 65... 66 67--- 68name: test_zextload_global_i32_i24 69body: | 70 bb.0: 71 liveins: $vgpr0_vgpr1 72 73 ; GFX8-LABEL: name: test_zextload_global_i32_i24 74 ; GFX8: liveins: $vgpr0_vgpr1 75 ; GFX8-NEXT: {{ $}} 76 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 77 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), align 4, addrspace 1) 78 ; GFX8-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2 79 ; GFX8-NEXT: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64) 80 ; GFX8-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD]](p1) :: (load (s8) from unknown-address + 2, align 2, addrspace 1) 81 ; GFX8-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 82 ; GFX8-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXTLOAD1]], [[C1]](s32) 83 ; GFX8-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]] 84 ; GFX8-NEXT: $vgpr0 = COPY [[OR]](s32) 85 ; GFX6-LABEL: name: test_zextload_global_i32_i24 86 ; GFX6: liveins: $vgpr0_vgpr1 87 ; GFX6-NEXT: {{ $}} 88 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 89 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), align 4, addrspace 1) 90 ; GFX6-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2 91 ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64) 92 ; GFX6-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD]](p1) :: (load (s8) from unknown-address + 2, align 2, addrspace 1) 93 ; GFX6-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 94 ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXTLOAD1]], [[C1]](s32) 95 ; GFX6-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]] 96 ; GFX6-NEXT: $vgpr0 = COPY [[OR]](s32) 97 %0:_(p1) = COPY $vgpr0_vgpr1 98 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s24), addrspace 1) 99 $vgpr0 = COPY %1 100... 101 102--- 103name: test_zextload_global_i32_i30 104body: | 105 bb.0: 106 liveins: $vgpr0_vgpr1 107 108 ; GFX8-LABEL: name: test_zextload_global_i32_i30 109 ; GFX8: liveins: $vgpr0_vgpr1 110 ; GFX8-NEXT: {{ $}} 111 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 112 ; GFX8-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s32), addrspace 1) 113 ; GFX8-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 30 114 ; GFX8-NEXT: $vgpr0 = COPY [[ASSERT_ZEXT]](s32) 115 ; GFX6-LABEL: name: test_zextload_global_i32_i30 116 ; GFX6: liveins: $vgpr0_vgpr1 117 ; GFX6-NEXT: {{ $}} 118 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 119 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s32), addrspace 1) 120 ; GFX6-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 30 121 ; GFX6-NEXT: $vgpr0 = COPY [[ASSERT_ZEXT]](s32) 122 %0:_(p1) = COPY $vgpr0_vgpr1 123 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s30), addrspace 1) 124 $vgpr0 = COPY %1 125... 126 127--- 128name: test_zextload_global_i32_i31 129body: | 130 bb.0: 131 liveins: $vgpr0_vgpr1 132 133 ; GFX8-LABEL: name: test_zextload_global_i32_i31 134 ; GFX8: liveins: $vgpr0_vgpr1 135 ; GFX8-NEXT: {{ $}} 136 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 137 ; GFX8-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s32), addrspace 1) 138 ; GFX8-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 31 139 ; GFX8-NEXT: $vgpr0 = COPY [[ASSERT_ZEXT]](s32) 140 ; GFX6-LABEL: name: test_zextload_global_i32_i31 141 ; GFX6: liveins: $vgpr0_vgpr1 142 ; GFX6-NEXT: {{ $}} 143 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 144 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s32), addrspace 1) 145 ; GFX6-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[LOAD]], 31 146 ; GFX6-NEXT: $vgpr0 = COPY [[ASSERT_ZEXT]](s32) 147 %0:_(p1) = COPY $vgpr0_vgpr1 148 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s31), addrspace 1) 149 $vgpr0 = COPY %1 150... 151 152--- 153name: test_zextload_global_i32_i8 154body: | 155 bb.0: 156 liveins: $vgpr0_vgpr1 157 158 ; GFX8-LABEL: name: test_zextload_global_i32_i8 159 ; GFX8: liveins: $vgpr0_vgpr1 160 ; GFX8-NEXT: {{ $}} 161 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 162 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 163 ; GFX8-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 164 ; GFX6-LABEL: name: test_zextload_global_i32_i8 165 ; GFX6: liveins: $vgpr0_vgpr1 166 ; GFX6-NEXT: {{ $}} 167 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 168 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 169 ; GFX6-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 170 %0:_(p1) = COPY $vgpr0_vgpr1 171 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s8), addrspace 1) 172 $vgpr0 = COPY %1 173... 174--- 175name: test_zextload_global_i32_i16 176body: | 177 bb.0: 178 liveins: $vgpr0_vgpr1 179 180 ; GFX8-LABEL: name: test_zextload_global_i32_i16 181 ; GFX8: liveins: $vgpr0_vgpr1 182 ; GFX8-NEXT: {{ $}} 183 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 184 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), addrspace 1) 185 ; GFX8-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 186 ; GFX6-LABEL: name: test_zextload_global_i32_i16 187 ; GFX6: liveins: $vgpr0_vgpr1 188 ; GFX6-NEXT: {{ $}} 189 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 190 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), addrspace 1) 191 ; GFX6-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 192 %0:_(p1) = COPY $vgpr0_vgpr1 193 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s16), addrspace 1) 194 $vgpr0 = COPY %1 195... 196--- 197name: test_zextload_global_i31_i8 198body: | 199 bb.0: 200 liveins: $vgpr0_vgpr1 201 202 ; GFX8-LABEL: name: test_zextload_global_i31_i8 203 ; GFX8: liveins: $vgpr0_vgpr1 204 ; GFX8-NEXT: {{ $}} 205 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 206 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 207 ; GFX8-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 208 ; GFX6-LABEL: name: test_zextload_global_i31_i8 209 ; GFX6: liveins: $vgpr0_vgpr1 210 ; GFX6-NEXT: {{ $}} 211 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 212 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 213 ; GFX6-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 214 %0:_(p1) = COPY $vgpr0_vgpr1 215 %1:_(s31) = G_ZEXTLOAD %0 :: (load (s8), addrspace 1) 216 %2:_(s32) = G_ANYEXT %1 217 $vgpr0 = COPY %2 218... 219--- 220name: test_zextload_global_i64_i8 221body: | 222 bb.0: 223 liveins: $vgpr0_vgpr1 224 225 ; GFX8-LABEL: name: test_zextload_global_i64_i8 226 ; GFX8: liveins: $vgpr0_vgpr1 227 ; GFX8-NEXT: {{ $}} 228 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 229 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 230 ; GFX8-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ZEXTLOAD]](s32) 231 ; GFX8-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 232 ; GFX6-LABEL: name: test_zextload_global_i64_i8 233 ; GFX6: liveins: $vgpr0_vgpr1 234 ; GFX6-NEXT: {{ $}} 235 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 236 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 237 ; GFX6-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ZEXTLOAD]](s32) 238 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 239 %0:_(p1) = COPY $vgpr0_vgpr1 240 %1:_(s64) = G_ZEXTLOAD %0 :: (load (s8), addrspace 1) 241 $vgpr0_vgpr1 = COPY %1 242... 243--- 244name: test_zextload_global_i64_i16 245body: | 246 bb.0: 247 liveins: $vgpr0_vgpr1 248 249 ; GFX8-LABEL: name: test_zextload_global_i64_i16 250 ; GFX8: liveins: $vgpr0_vgpr1 251 ; GFX8-NEXT: {{ $}} 252 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 253 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), addrspace 1) 254 ; GFX8-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ZEXTLOAD]](s32) 255 ; GFX8-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 256 ; GFX6-LABEL: name: test_zextload_global_i64_i16 257 ; GFX6: liveins: $vgpr0_vgpr1 258 ; GFX6-NEXT: {{ $}} 259 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 260 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), addrspace 1) 261 ; GFX6-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ZEXTLOAD]](s32) 262 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 263 %0:_(p1) = COPY $vgpr0_vgpr1 264 %1:_(s64) = G_ZEXTLOAD %0 :: (load (s16), addrspace 1) 265 $vgpr0_vgpr1 = COPY %1 266... 267--- 268name: test_zextload_global_i64_i32 269body: | 270 bb.0: 271 liveins: $vgpr0_vgpr1 272 273 ; GFX8-LABEL: name: test_zextload_global_i64_i32 274 ; GFX8: liveins: $vgpr0_vgpr1 275 ; GFX8-NEXT: {{ $}} 276 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 277 ; GFX8-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s32), addrspace 1) 278 ; GFX8-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[LOAD]](s32) 279 ; GFX8-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 280 ; GFX6-LABEL: name: test_zextload_global_i64_i32 281 ; GFX6: liveins: $vgpr0_vgpr1 282 ; GFX6-NEXT: {{ $}} 283 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 284 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s32), addrspace 1) 285 ; GFX6-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[LOAD]](s32) 286 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 287 %0:_(p1) = COPY $vgpr0_vgpr1 288 %1:_(s64) = G_ZEXTLOAD %0 :: (load (s32), addrspace 1) 289 $vgpr0_vgpr1 = COPY %1 290... 291 292--- 293name: test_zextload_global_s32_from_2_align1 294body: | 295 bb.0: 296 liveins: $vgpr0_vgpr1 297 298 ; GFX8-LABEL: name: test_zextload_global_s32_from_2_align1 299 ; GFX8: liveins: $vgpr0_vgpr1 300 ; GFX8-NEXT: {{ $}} 301 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 302 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), align 1, addrspace 1) 303 ; GFX8-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 304 ; GFX6-LABEL: name: test_zextload_global_s32_from_2_align1 305 ; GFX6: liveins: $vgpr0_vgpr1 306 ; GFX6-NEXT: {{ $}} 307 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 308 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 309 ; GFX6-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 310 ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64) 311 ; GFX6-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD]](p1) :: (load (s8) from unknown-address + 1, addrspace 1) 312 ; GFX6-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 313 ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXTLOAD1]], [[C1]](s32) 314 ; GFX6-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]] 315 ; GFX6-NEXT: $vgpr0 = COPY [[OR]](s32) 316 %0:_(p1) = COPY $vgpr0_vgpr1 317 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s16), align 1, addrspace 1) 318 $vgpr0 = COPY %1 319... 320 321--- 322name: test_zextload_global_s64_from_2_align1 323body: | 324 bb.0: 325 liveins: $vgpr0_vgpr1 326 327 ; GFX8-LABEL: name: test_zextload_global_s64_from_2_align1 328 ; GFX8: liveins: $vgpr0_vgpr1 329 ; GFX8-NEXT: {{ $}} 330 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 331 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), align 1, addrspace 1) 332 ; GFX8-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[ZEXTLOAD]](s32) 333 ; GFX8-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 334 ; GFX6-LABEL: name: test_zextload_global_s64_from_2_align1 335 ; GFX6: liveins: $vgpr0_vgpr1 336 ; GFX6-NEXT: {{ $}} 337 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 338 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 339 ; GFX6-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 340 ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[COPY]], [[C]](s64) 341 ; GFX6-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD]](p1) :: (load (s8) from unknown-address + 1, addrspace 1) 342 ; GFX6-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 343 ; GFX6-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXTLOAD1]], [[C1]](s32) 344 ; GFX6-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]] 345 ; GFX6-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[OR]](s32) 346 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 347 %0:_(p1) = COPY $vgpr0_vgpr1 348 %1:_(s64) = G_ZEXTLOAD %0 :: (load (s16), align 1, addrspace 1) 349 $vgpr0_vgpr1 = COPY %1 350... 351 352--- 353name: test_zextload_global_v2i16_from_2 354body: | 355 bb.0: 356 liveins: $vgpr0_vgpr1 357 358 ; GFX8-LABEL: name: test_zextload_global_v2i16_from_2 359 ; GFX8: liveins: $vgpr0_vgpr1 360 ; GFX8-NEXT: {{ $}} 361 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 362 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s16>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s8>), addrspace 1) 363 ; GFX8-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](<2 x s16>) 364 ; GFX6-LABEL: name: test_zextload_global_v2i16_from_2 365 ; GFX6: liveins: $vgpr0_vgpr1 366 ; GFX6-NEXT: {{ $}} 367 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 368 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s16>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s8>), addrspace 1) 369 ; GFX6-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](<2 x s16>) 370 %0:_(p1) = COPY $vgpr0_vgpr1 371 %1:_(<2 x s16>) = G_ZEXTLOAD %0 :: (load (<2 x s8>), addrspace 1) 372 $vgpr0 = COPY %1 373... 374 375--- 376name: test_zextload_global_v2i32_from_2 377body: | 378 bb.0: 379 liveins: $vgpr0_vgpr1 380 381 ; GFX8-LABEL: name: test_zextload_global_v2i32_from_2 382 ; GFX8: liveins: $vgpr0_vgpr1 383 ; GFX8-NEXT: {{ $}} 384 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 385 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s32>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s8>), addrspace 1) 386 ; GFX8-NEXT: $vgpr0_vgpr1 = COPY [[ZEXTLOAD]](<2 x s32>) 387 ; GFX6-LABEL: name: test_zextload_global_v2i32_from_2 388 ; GFX6: liveins: $vgpr0_vgpr1 389 ; GFX6-NEXT: {{ $}} 390 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 391 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s32>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s8>), addrspace 1) 392 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[ZEXTLOAD]](<2 x s32>) 393 %0:_(p1) = COPY $vgpr0_vgpr1 394 %1:_(<2 x s32>) = G_ZEXTLOAD %0 :: (load (<2 x s8>), addrspace 1) 395 $vgpr0_vgpr1 = COPY %1 396... 397 398--- 399name: test_zextload_global_v2i32_from_4 400body: | 401 bb.0: 402 liveins: $vgpr0_vgpr1 403 404 ; GFX8-LABEL: name: test_zextload_global_v2i32_from_4 405 ; GFX8: liveins: $vgpr0_vgpr1 406 ; GFX8-NEXT: {{ $}} 407 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 408 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s32>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s16>), addrspace 1) 409 ; GFX8-NEXT: $vgpr0_vgpr1 = COPY [[ZEXTLOAD]](<2 x s32>) 410 ; GFX6-LABEL: name: test_zextload_global_v2i32_from_4 411 ; GFX6: liveins: $vgpr0_vgpr1 412 ; GFX6-NEXT: {{ $}} 413 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 414 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s32>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s16>), addrspace 1) 415 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[ZEXTLOAD]](<2 x s32>) 416 %0:_(p1) = COPY $vgpr0_vgpr1 417 %1:_(<2 x s32>) = G_ZEXTLOAD %0 :: (load (<2 x s16>), addrspace 1) 418 $vgpr0_vgpr1 = COPY %1 419... 420 421--- 422name: test_zextload_global_v2i64_from_4 423body: | 424 bb.0: 425 liveins: $vgpr0_vgpr1 426 427 ; GFX8-LABEL: name: test_zextload_global_v2i64_from_4 428 ; GFX8: liveins: $vgpr0_vgpr1 429 ; GFX8-NEXT: {{ $}} 430 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 431 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s64>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s16>), addrspace 1) 432 ; GFX8-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[ZEXTLOAD]](<2 x s64>) 433 ; GFX6-LABEL: name: test_zextload_global_v2i64_from_4 434 ; GFX6: liveins: $vgpr0_vgpr1 435 ; GFX6-NEXT: {{ $}} 436 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 437 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s64>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s16>), addrspace 1) 438 ; GFX6-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[ZEXTLOAD]](<2 x s64>) 439 %0:_(p1) = COPY $vgpr0_vgpr1 440 %1:_(<2 x s64>) = G_ZEXTLOAD %0 :: (load (<2 x s16>), addrspace 1) 441 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 442... 443 444--- 445name: test_zextload_global_v2i64_from_8 446body: | 447 bb.0: 448 liveins: $vgpr0_vgpr1 449 450 ; GFX8-LABEL: name: test_zextload_global_v2i64_from_8 451 ; GFX8: liveins: $vgpr0_vgpr1 452 ; GFX8-NEXT: {{ $}} 453 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 454 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s64>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s32>), addrspace 1) 455 ; GFX8-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[ZEXTLOAD]](<2 x s64>) 456 ; GFX6-LABEL: name: test_zextload_global_v2i64_from_8 457 ; GFX6: liveins: $vgpr0_vgpr1 458 ; GFX6-NEXT: {{ $}} 459 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 460 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(<2 x s64>) = G_ZEXTLOAD [[COPY]](p1) :: (load (<2 x s32>), addrspace 1) 461 ; GFX6-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[ZEXTLOAD]](<2 x s64>) 462 %0:_(p1) = COPY $vgpr0_vgpr1 463 %1:_(<2 x s64>) = G_ZEXTLOAD %0 :: (load (<2 x s32>), addrspace 1) 464 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 465... 466 467--- 468name: test_zextload_global_s128_8 469body: | 470 bb.0: 471 liveins: $vgpr0_vgpr1 472 473 ; GFX8-LABEL: name: test_zextload_global_s128_8 474 ; GFX8: liveins: $vgpr0_vgpr1 475 ; GFX8-NEXT: {{ $}} 476 ; GFX8-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 477 ; GFX8-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s128) = G_ZEXTLOAD [[COPY]](p1) :: (load (s64), addrspace 1) 478 ; GFX8-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[ZEXTLOAD]](s128) 479 ; GFX6-LABEL: name: test_zextload_global_s128_8 480 ; GFX6: liveins: $vgpr0_vgpr1 481 ; GFX6-NEXT: {{ $}} 482 ; GFX6-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 483 ; GFX6-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s128) = G_ZEXTLOAD [[COPY]](p1) :: (load (s64), addrspace 1) 484 ; GFX6-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[ZEXTLOAD]](s128) 485 %0:_(p1) = COPY $vgpr0_vgpr1 486 %1:_(s128) = G_ZEXTLOAD %0 :: (load (s64), addrspace 1) 487 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 488... 489