1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX6 %s 3# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX7 %s 4# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX7 %s 5# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s 6# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s 7 8--- 9name: zextload_local_s32_from_s8_align1 10legalized: true 11regBankSelected: true 12tracksRegLiveness: true 13 14body: | 15 bb.0: 16 liveins: $vgpr0 17 18 ; GFX6-LABEL: name: zextload_local_s32_from_s8_align1 19 ; GFX6: liveins: $vgpr0 20 ; GFX6-NEXT: {{ $}} 21 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 22 ; GFX6-NEXT: $m0 = S_MOV_B32 -1 23 ; GFX6-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3) 24 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U8_]] 25 ; 26 ; GFX7-LABEL: name: zextload_local_s32_from_s8_align1 27 ; GFX7: liveins: $vgpr0 28 ; GFX7-NEXT: {{ $}} 29 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 30 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 31 ; GFX7-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3) 32 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U8_]] 33 ; 34 ; GFX9-LABEL: name: zextload_local_s32_from_s8_align1 35 ; GFX9: liveins: $vgpr0 36 ; GFX9-NEXT: {{ $}} 37 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 38 ; GFX9-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s8), addrspace 3) 39 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]] 40 %0:vgpr(p3) = COPY $vgpr0 41 %1:vgpr(s32) = G_ZEXTLOAD %0 :: (load (s8), align 1, addrspace 3) 42 $vgpr0 = COPY %1 43 44... 45 46--- 47name: zextload_local_s32_from_s16_align2 48legalized: true 49regBankSelected: true 50tracksRegLiveness: true 51 52body: | 53 bb.0: 54 liveins: $vgpr0 55 56 ; GFX6-LABEL: name: zextload_local_s32_from_s16_align2 57 ; GFX6: liveins: $vgpr0 58 ; GFX6-NEXT: {{ $}} 59 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 60 ; GFX6-NEXT: $m0 = S_MOV_B32 -1 61 ; GFX6-NEXT: [[DS_READ_U16_:%[0-9]+]]:vgpr_32 = DS_READ_U16 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s16), addrspace 3) 62 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U16_]] 63 ; 64 ; GFX7-LABEL: name: zextload_local_s32_from_s16_align2 65 ; GFX7: liveins: $vgpr0 66 ; GFX7-NEXT: {{ $}} 67 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 68 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 69 ; GFX7-NEXT: [[DS_READ_U16_:%[0-9]+]]:vgpr_32 = DS_READ_U16 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s16), addrspace 3) 70 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U16_]] 71 ; 72 ; GFX9-LABEL: name: zextload_local_s32_from_s16_align2 73 ; GFX9: liveins: $vgpr0 74 ; GFX9-NEXT: {{ $}} 75 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 76 ; GFX9-NEXT: [[DS_READ_U16_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U16_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s16), addrspace 3) 77 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U16_gfx9_]] 78 %0:vgpr(p3) = COPY $vgpr0 79 %1:vgpr(s32) = G_ZEXTLOAD %0 :: (load (s16), align 2, addrspace 3) 80 $vgpr0 = COPY %1 81 82... 83 84# --- 85# name: zextload_local_s16_from_s8_align1 86# legalized: true 87# regBankSelected: true 88# tracksRegLiveness: true 89 90# body: | 91# bb.0: 92# liveins: $vgpr0 93 94# %0:vgpr(p3) = COPY $vgpr0 95# %1:vgpr(s16) = G_ZEXTLOAD %0 :: (load (s8), align 1, addrspace 3) 96# %2:vgpr(s32) = G_ANYEXT %1 97# $vgpr0 = COPY %2 98 99# ... 100 101--- 102name: zextload_local_s32_from_s8_align1_offset4095 103legalized: true 104regBankSelected: true 105tracksRegLiveness: true 106 107body: | 108 bb.0: 109 liveins: $vgpr0 110 111 ; GFX6-LABEL: name: zextload_local_s32_from_s8_align1_offset4095 112 ; GFX6: liveins: $vgpr0 113 ; GFX6-NEXT: {{ $}} 114 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 115 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec 116 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 117 ; GFX6-NEXT: $m0 = S_MOV_B32 -1 118 ; GFX6-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_ADD_CO_U32_e64_]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3) 119 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U8_]] 120 ; 121 ; GFX7-LABEL: name: zextload_local_s32_from_s8_align1_offset4095 122 ; GFX7: liveins: $vgpr0 123 ; GFX7-NEXT: {{ $}} 124 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 125 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 126 ; GFX7-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 4095, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3) 127 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U8_]] 128 ; 129 ; GFX9-LABEL: name: zextload_local_s32_from_s8_align1_offset4095 130 ; GFX9: liveins: $vgpr0 131 ; GFX9-NEXT: {{ $}} 132 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 133 ; GFX9-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 4095, 0, implicit $exec :: (load (s8), addrspace 3) 134 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]] 135 %0:vgpr(p3) = COPY $vgpr0 136 %1:vgpr(s32) = G_CONSTANT i32 4095 137 %2:vgpr(p3) = G_PTR_ADD %0, %1 138 %3:vgpr(s32) = G_ZEXTLOAD %2 :: (load (s8), align 1, addrspace 3) 139 $vgpr0 = COPY %3 140 141... 142