1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -mcpu=hawaii -mattr=+flat-for-global -run-pass=regbankselect %s -verify-machineinstrs -o - | FileCheck %s 3 4--- | 5 define amdgpu_kernel void @load_constant(i32 addrspace(4)* %ptr0) { 6 ret void 7 } 8 9 define amdgpu_kernel void @load_constant_volatile(i32 addrspace(4)* %ptr0) { 10 ret void 11 } 12 13 define amdgpu_kernel void @load_global_uniform_invariant(i32 addrspace(1)* %ptr1) { 14 %tmp0 = load i32, i32 addrspace(1)* %ptr1 15 ret void 16 } 17 18 define amdgpu_kernel void @load_global_uniform_noclobber(i32 addrspace(1)* %ptr1) { 19 %tmp0 = load i32, i32 addrspace(1)* %ptr1, !amdgpu.noclobber !0 20 ret void 21 } 22 23 define amdgpu_kernel void @load_global_uniform_variant(i32 addrspace(1)* %ptr1) { 24 %tmp0 = load i32, i32 addrspace(1)* %ptr1 25 ret void 26 } 27 28 define amdgpu_kernel void @load_global_uniform_volatile_invariant(i32 addrspace(1)* %ptr1) { 29 %tmp0 = load i32, i32 addrspace(1)* %ptr1 30 ret void 31 } 32 33 define amdgpu_kernel void @load_global_uniform_atomic_invariant(i32 addrspace(1)* %ptr1) { 34 %tmp0 = load i32, i32 addrspace(1)* %ptr1 35 ret void 36 } 37 38 define amdgpu_kernel void @load_global_non_uniform(i32 addrspace(1)* %ptr2) { 39 %tmp0 = call i32 @llvm.amdgcn.workitem.id.x() #0 40 %tmp1 = getelementptr i32, i32 addrspace(1)* %ptr2, i32 %tmp0 41 %tmp2 = load i32, i32 addrspace(1)* %tmp1 42 ret void 43 } 44 45 define void @non_power_of_2() { ret void } 46 47 define amdgpu_kernel void @load_constant_v4i16_from_8_align8(<3 x i16> addrspace(4)* %ptr0) { 48 ret void 49 } 50 51 declare i32 @llvm.amdgcn.workitem.id.x() #0 52 attributes #0 = { nounwind readnone } 53 !0 = !{} 54 55... 56--- 57name: load_constant 58legalized: true 59 60body: | 61 bb.0: 62 liveins: $sgpr0_sgpr1 63 ; CHECK-LABEL: name: load_constant 64 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 65 ; CHECK: [[LOAD:%[0-9]+]]:sgpr(s32) = G_LOAD [[COPY]](p4) :: (load 4 from %ir.ptr0, addrspace 4) 66 %0:_(p4) = COPY $sgpr0_sgpr1 67 %1:_(s32) = G_LOAD %0 :: (load 4 from %ir.ptr0) 68... 69 70--- 71name: load_constant_volatile 72legalized: true 73 74body: | 75 bb.0: 76 liveins: $sgpr0_sgpr1 77 ; CHECK-LABEL: name: load_constant_volatile 78 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 79 ; CHECK: [[LOAD:%[0-9]+]]:sgpr(s32) = G_LOAD [[COPY]](p4) :: (volatile load 4 from %ir.ptr0, addrspace 4) 80 %0:_(p4) = COPY $sgpr0_sgpr1 81 %1:_(s32) = G_LOAD %0 :: (volatile load 4 from %ir.ptr0) 82... 83 84--- 85name: load_global_uniform_invariant 86legalized: true 87 88body: | 89 bb.0: 90 liveins: $sgpr0_sgpr1 91 ; CHECK-LABEL: name: load_global_uniform_invariant 92 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1 93 ; CHECK: [[LOAD:%[0-9]+]]:sgpr(s32) = G_LOAD [[COPY]](p1) :: (invariant load 4 from %ir.ptr1, addrspace 1) 94 %0:_(p1) = COPY $sgpr0_sgpr1 95 %1:_(s32) = G_LOAD %0 :: (invariant load 4 from %ir.ptr1) 96... 97 98--- 99name: load_global_uniform_noclobber 100legalized: true 101 102body: | 103 bb.0: 104 liveins: $sgpr0_sgpr1 105 ; CHECK-LABEL: name: load_global_uniform_noclobber 106 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1 107 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(p1) = COPY [[COPY]](p1) 108 ; CHECK: [[LOAD:%[0-9]+]]:vgpr(s32) = G_LOAD [[COPY1]](p1) :: (load 4 from %ir.ptr1, addrspace 1) 109 %0:_(p1) = COPY $sgpr0_sgpr1 110 %1:_(s32) = G_LOAD %0 :: (load 4 from %ir.ptr1) 111... 112 113--- 114name: load_global_uniform_variant 115legalized: true 116 117body: | 118 bb.0: 119 liveins: $sgpr0_sgpr1 120 ; CHECK-LABEL: name: load_global_uniform_variant 121 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1 122 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(p1) = COPY [[COPY]](p1) 123 ; CHECK: [[LOAD:%[0-9]+]]:vgpr(s32) = G_LOAD [[COPY1]](p1) :: (load 4 from %ir.ptr1, addrspace 1) 124 %0:_(p1) = COPY $sgpr0_sgpr1 125 %1:_(s32) = G_LOAD %0 :: (load 4 from %ir.ptr1) 126... 127 128--- 129name: load_global_uniform_volatile_invariant 130legalized: true 131 132body: | 133 bb.0: 134 liveins: $sgpr0_sgpr1 135 ; CHECK-LABEL: name: load_global_uniform_volatile_invariant 136 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1 137 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(p1) = COPY [[COPY]](p1) 138 ; CHECK: [[LOAD:%[0-9]+]]:vgpr(s32) = G_LOAD [[COPY1]](p1) :: (volatile invariant load 4 from %ir.ptr1, addrspace 1) 139 %0:_(p1) = COPY $sgpr0_sgpr1 140 %1:_(s32) = G_LOAD %0 :: (volatile invariant load 4 from %ir.ptr1) 141... 142 143--- 144name: load_global_uniform_atomic_invariant 145legalized: true 146 147body: | 148 bb.0: 149 liveins: $sgpr0_sgpr1 150 ; CHECK-LABEL: name: load_global_uniform_atomic_invariant 151 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1 152 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(p1) = COPY [[COPY]](p1) 153 ; CHECK: [[LOAD:%[0-9]+]]:vgpr(s32) = G_LOAD [[COPY1]](p1) :: (invariant load acquire 4 from %ir.ptr1, addrspace 1) 154 %0:_(p1) = COPY $sgpr0_sgpr1 155 %1:_(s32) = G_LOAD %0 :: (invariant load acquire 4 from %ir.ptr1) 156... 157 158--- 159name: load_global_non_uniform 160legalized: true 161 162body: | 163 bb.0: 164 liveins: $sgpr0_sgpr1 165 ; CHECK-LABEL: name: load_global_non_uniform 166 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1 167 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(p1) = COPY [[COPY]](p1) 168 ; CHECK: [[LOAD:%[0-9]+]]:vgpr(s32) = G_LOAD [[COPY1]](p1) :: (load 4 from %ir.tmp1, addrspace 1) 169 %0:_(p1) = COPY $sgpr0_sgpr1 170 %1:_(s32) = G_LOAD %0 :: (load 4 from %ir.tmp1) 171... 172 173--- 174name: non_power_of_2 175legalized: true 176 177body: | 178 bb.0: 179 ; CHECK-LABEL: name: non_power_of_2 180 ; CHECK: [[DEF:%[0-9]+]]:sgpr(s448) = G_IMPLICIT_DEF 181 ; CHECK: [[EXTRACT:%[0-9]+]]:sgpr(s32) = G_EXTRACT [[DEF]](s448), 0 182 ; CHECK: $sgpr0 = COPY [[EXTRACT]](s32) 183 ; CHECK: SI_RETURN_TO_EPILOG $sgpr0 184 %0:_(s448) = G_IMPLICIT_DEF 185 %1:_(s32) = G_EXTRACT %0:_(s448), 0 186 $sgpr0 = COPY %1:_(s32) 187 SI_RETURN_TO_EPILOG $sgpr0 188... 189 190--- 191name: load_constant_v4i16_from_8_align8 192legalized: true 193 194body: | 195 bb.0: 196 ; CHECK-LABEL: name: load_constant_v4i16_from_8_align8 197 ; CHECK: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1 198 ; CHECK: [[LOAD:%[0-9]+]]:sgpr(<4 x s16>) = G_LOAD [[COPY]](p4) :: (load 8 from %ir.ptr0, addrspace 4) 199 %0:_(p4) = COPY $sgpr0_sgpr1 200 %1:_(<4 x s16>) = G_LOAD %0 :: (load 8 from %ir.ptr0, align 8, addrspace 4) 201 202... 203