Stanislav Mekhanoshin | 739174c | 2018-05-31 20:13:51 +0000 | [diff] [blame] | 1 | # RUN: llc -march=amdgcn -mcpu=gfx902 -verify-machineinstrs -run-pass=phi-node-elimination,si-form-memory-clauses %s -o - | FileCheck -check-prefix=GCN %s |
| 2 | |
| 3 | # GCN-LABEL: {{^}}name: vector_clause{{$}} |
| 4 | # GCN: early-clobber %2:vreg_128, early-clobber %4:vreg_128, early-clobber %1:vreg_128, early-clobber %3:vreg_128 = BUNDLE %0, implicit $exec { |
| 5 | # GCN-NEXT: %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 6 | # GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, 0, implicit $exec |
| 7 | # GCN-NEXT: %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, 0, implicit $exec |
| 8 | # GCN-NEXT: %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, 0, implicit $exec |
| 9 | # GCN-NEXT: } |
| 10 | # GCN-NEXT: GLOBAL_STORE_DWORDX4 %0, %1, 0, 0, 0, implicit $exec |
| 11 | |
| 12 | --- |
| 13 | name: vector_clause |
| 14 | tracksRegLiveness: true |
| 15 | registers: |
| 16 | - { id: 0, class: vreg_64 } |
| 17 | - { id: 1, class: vreg_128 } |
| 18 | - { id: 2, class: vreg_128 } |
| 19 | - { id: 3, class: vreg_128 } |
| 20 | - { id: 4, class: vreg_128 } |
| 21 | body: | |
| 22 | bb.0: |
| 23 | %0 = IMPLICIT_DEF |
| 24 | %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 25 | %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, 0, implicit $exec |
| 26 | %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, 0, implicit $exec |
| 27 | %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, 0, implicit $exec |
| 28 | GLOBAL_STORE_DWORDX4 %0, %1, 0, 0, 0, implicit $exec |
| 29 | GLOBAL_STORE_DWORDX4 %0, %2, 16, 0, 0, implicit $exec |
| 30 | GLOBAL_STORE_DWORDX4 %0, %3, 32, 0, 0, implicit $exec |
| 31 | GLOBAL_STORE_DWORDX4 %0, %4, 48, 0, 0, implicit $exec |
| 32 | ... |
| 33 | |
| 34 | # GCN-LABEL: {{^}}name: subreg_full{{$}} |
| 35 | # GCN: early-clobber %1:vreg_128 = BUNDLE %0, implicit $exec { |
| 36 | # GCN-NEXT: undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, 0, implicit $exec |
| 37 | # GCN-NEXT: internal %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, 0, implicit $exec |
| 38 | # GCN-NEXT: internal %1.sub2:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, 0, implicit $exec |
| 39 | # GCN-NEXT: internal %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, 0, implicit $exec |
| 40 | # GCN-NEXT: } |
| 41 | # GCN-NEXT: GLOBAL_STORE_DWORDX4 %0.sub0_sub1, %1, 0, 0, 0, implicit $exec |
| 42 | |
| 43 | --- |
| 44 | name: subreg_full |
| 45 | tracksRegLiveness: true |
| 46 | registers: |
| 47 | - { id: 0, class: vreg_128 } |
| 48 | - { id: 1, class: vreg_128 } |
| 49 | body: | |
| 50 | bb.0: |
| 51 | %0 = IMPLICIT_DEF |
| 52 | undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, 0, implicit $exec |
| 53 | %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, 0, implicit $exec |
| 54 | %1.sub2:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, 0, implicit $exec |
| 55 | %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, 0, implicit $exec |
| 56 | GLOBAL_STORE_DWORDX4 %0.sub0_sub1, %1, 0, 0, 0, implicit $exec |
| 57 | ... |
| 58 | |
| 59 | # GCN-LABEL: {{^}}name: subreg_part{{$}} |
| 60 | # GCN: undef early-clobber %1.sub0_sub1:vreg_128, undef early-clobber %1.sub3:vreg_128 = BUNDLE %0, implicit $exec { |
| 61 | # GCN-NEXT: undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, 0, implicit $exec |
| 62 | # GCN-NEXT: internal %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, 0, implicit $exec |
| 63 | # GCN-NEXT: internal %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, 0, implicit $exec |
| 64 | # GCN-NEXT: } |
| 65 | # GCN-NEXT: GLOBAL_STORE_DWORDX4 %0.sub0_sub1, %1, 0, 0, 0, implicit $exec |
| 66 | |
| 67 | --- |
| 68 | name: subreg_part |
| 69 | tracksRegLiveness: true |
| 70 | registers: |
| 71 | - { id: 0, class: vreg_128 } |
| 72 | - { id: 1, class: vreg_128 } |
| 73 | body: | |
| 74 | bb.0: |
| 75 | %0 = IMPLICIT_DEF |
| 76 | undef %1.sub0:vreg_128 = GLOBAL_LOAD_DWORD %0.sub0_sub1, 0, 0, 0, implicit $exec |
| 77 | %1.sub1:vreg_128 = GLOBAL_LOAD_DWORD %0.sub1_sub2, 16, 0, 0, implicit $exec |
| 78 | %1.sub3:vreg_128 = GLOBAL_LOAD_DWORD %0.sub2_sub3, 32, 0, 0, implicit $exec |
| 79 | GLOBAL_STORE_DWORDX4 %0.sub0_sub1, %1, 0, 0, 0, implicit $exec |
| 80 | ... |
| 81 | |
| 82 | # GCN-LABEL: {{^}}name: dead{{$}} |
| 83 | # GCN: dead early-clobber %2:vreg_128, dead early-clobber %4:vreg_128, dead early-clobber %1:vreg_128, dead early-clobber %3:vreg_128 = BUNDLE %0, implicit $exec { |
| 84 | # GCN-NEXT: dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 85 | # GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, 0, implicit $exec |
| 86 | # GCN-NEXT: dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, 0, implicit $exec |
| 87 | # GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, 0, implicit $exec |
| 88 | # GCN-NEXT: } |
| 89 | |
| 90 | --- |
| 91 | name: dead |
| 92 | tracksRegLiveness: true |
| 93 | registers: |
| 94 | - { id: 0, class: vreg_64 } |
| 95 | - { id: 1, class: vreg_128 } |
| 96 | - { id: 2, class: vreg_128 } |
| 97 | - { id: 3, class: vreg_128 } |
| 98 | - { id: 4, class: vreg_128 } |
| 99 | body: | |
| 100 | bb.0: |
| 101 | %0 = IMPLICIT_DEF |
| 102 | dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 103 | dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, 0, implicit $exec |
| 104 | dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, 0, implicit $exec |
| 105 | dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, 0, implicit $exec |
| 106 | ... |
| 107 | |
| 108 | # GCN-LABEL: {{^}}name: subreg_dead{{$}} |
| 109 | # GCN: early-clobber %1:vreg_64 = BUNDLE %0, implicit $exec { |
| 110 | # GCN-NEXT: %1.sub0:vreg_64 = GLOBAL_LOAD_DWORD %0, 16, 0, 0, implicit $exec |
| 111 | # GCN-NEXT: dead %1.sub1:vreg_64 = GLOBAL_LOAD_DWORD %0, 32, 0, 0, implicit $exec |
| 112 | # GCN-NEXT: } |
| 113 | # GCN-NEXT: GLOBAL_STORE_DWORD %0, %1.sub0, 0, 0, 0, implicit $exec |
| 114 | |
| 115 | --- |
| 116 | name: subreg_dead |
| 117 | tracksRegLiveness: true |
| 118 | registers: |
| 119 | - { id: 0, class: vreg_64 } |
| 120 | - { id: 1, class: vreg_64 } |
| 121 | body: | |
| 122 | bb.0: |
| 123 | %0 = IMPLICIT_DEF |
| 124 | undef %1.sub0:vreg_64 = GLOBAL_LOAD_DWORD %0, 16, 0, 0, implicit $exec |
| 125 | dead %1.sub1:vreg_64 = GLOBAL_LOAD_DWORD %0, 32, 0, 0, implicit $exec |
| 126 | GLOBAL_STORE_DWORD %0, %1.sub0, 0, 0, 0, implicit $exec |
| 127 | ... |
| 128 | |
| 129 | # GCN-LABEL: {{^}}name: kill{{$}} |
| 130 | # GCN: early-clobber %2:vreg_128, early-clobber %3:vreg_128 = BUNDLE %0, %1, implicit $exec { |
| 131 | # GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 132 | # GCN-NEXT: %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 16, 0, 0, implicit $exec |
| 133 | # GCN-NEXT: } |
| 134 | |
| 135 | --- |
| 136 | name: kill |
| 137 | tracksRegLiveness: true |
| 138 | registers: |
| 139 | - { id: 0, class: vreg_64 } |
| 140 | - { id: 1, class: vreg_64 } |
| 141 | - { id: 2, class: vreg_128 } |
| 142 | - { id: 3, class: vreg_128 } |
| 143 | body: | |
| 144 | bb.0: |
| 145 | %0 = IMPLICIT_DEF |
| 146 | %1 = IMPLICIT_DEF |
| 147 | %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 148 | %3:vreg_128 = GLOBAL_LOAD_DWORDX4 killed %1, 16, 0, 0, implicit $exec |
| 149 | GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, 0, implicit $exec |
| 150 | GLOBAL_STORE_DWORDX4 %0, %3, 16, 0, 0, implicit $exec |
| 151 | ... |
| 152 | |
| 153 | # GCN-LABEL: {{^}}name: indirect{{$}} |
| 154 | # GCN: %1:vreg_64 = GLOBAL_LOAD_DWORDX2 %0, 0, 0, 0, implicit $exec |
| 155 | # GCN-NEXT: early-clobber %2:vreg_128, early-clobber %3:vreg_128 = BUNDLE %1, implicit $exec { |
| 156 | # GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 0, 0, 0, implicit $exec |
| 157 | # GCN-NEXT: %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 16, 0, 0, implicit $exec |
| 158 | # GCN-NEXT: } |
| 159 | |
| 160 | --- |
| 161 | name: indirect |
| 162 | tracksRegLiveness: true |
| 163 | registers: |
| 164 | - { id: 0, class: vreg_64 } |
| 165 | - { id: 1, class: vreg_64 } |
| 166 | - { id: 2, class: vreg_128 } |
| 167 | - { id: 3, class: vreg_128 } |
| 168 | body: | |
| 169 | bb.0: |
| 170 | %0 = IMPLICIT_DEF |
| 171 | %1:vreg_64 = GLOBAL_LOAD_DWORDX2 %0, 0, 0, 0, implicit $exec |
| 172 | %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 0, 0, 0, implicit $exec |
| 173 | %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %1, 16, 0, 0, implicit $exec |
| 174 | GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, 0, implicit $exec |
| 175 | GLOBAL_STORE_DWORDX4 %0, %3, 16, 0, 0, implicit $exec |
| 176 | ... |
| 177 | |
| 178 | # GCN-LABEL: {{^}}name: stack{{$}} |
| 179 | # GCN: %0:vreg_64 = IMPLICIT_DEF |
| 180 | # GCN-NEXT: %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %stack.0, 0, 0, 0, implicit $exec |
| 181 | # GCN-NEXT: %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %stack.0, 16, 0, 0, implicit $exec |
| 182 | # GCN-NEXT: GLOBAL_STORE_DWORDX4 %0, %1, 0, 0, 0, implicit $exec |
| 183 | |
| 184 | --- |
| 185 | name: stack |
| 186 | tracksRegLiveness: true |
| 187 | registers: |
| 188 | - { id: 0, class: vreg_64 } |
| 189 | - { id: 1, class: vreg_128 } |
| 190 | - { id: 2, class: vreg_128 } |
| 191 | stack: |
| 192 | - { id: 0, type: default, offset: 0, size: 64, alignment: 8 } |
| 193 | body: | |
| 194 | bb.0: |
| 195 | %0 = IMPLICIT_DEF |
| 196 | %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %stack.0, 0, 0, 0, implicit $exec |
| 197 | %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %stack.0, 16, 0, 0, implicit $exec |
| 198 | GLOBAL_STORE_DWORDX4 %0, %1, 0, 0, 0, implicit $exec |
| 199 | GLOBAL_STORE_DWORDX4 %0, %2, 16, 0, 0, implicit $exec |
| 200 | ... |
| 201 | |
| 202 | # GCN-LABEL: {{^}}name: overflow_counter{{$}} |
| 203 | # GCN: dead early-clobber %7:vgpr_32, dead early-clobber %14:vgpr_32, dead early-clobber %2:vgpr_32, dead early-clobber %9:vgpr_32, dead early-clobber %4:vgpr_32, dead early-clobber %11:vgpr_32, dead early-clobber %6:vgpr_32, dead early-clobber %13:vgpr_32, dead early-clobber %1:vgpr_32, dead early-clobber %8:vgpr_32, dead early-clobber %15:vgpr_32, dead early-clobber %3:vgpr_32, dead early-clobber %10:vgpr_32, dead early-clobber %5:vgpr_32, dead early-clobber %12:vgpr_32 = BUNDLE %0, implicit $exec { |
| 204 | # GCN-NEXT: dead %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, 0, implicit $exec |
| 205 | # GCN-NEXT: dead %2:vgpr_32 = GLOBAL_LOAD_DWORD %0, 4, 0, 0, implicit $exec |
| 206 | # GCN-NEXT: dead %3:vgpr_32 = GLOBAL_LOAD_DWORD %0, 8, 0, 0, implicit $exec |
| 207 | # GCN-NEXT: dead %4:vgpr_32 = GLOBAL_LOAD_DWORD %0, 12, 0, 0, implicit $exec |
| 208 | # GCN-NEXT: dead %5:vgpr_32 = GLOBAL_LOAD_DWORD %0, 16, 0, 0, implicit $exec |
| 209 | # GCN-NEXT: dead %6:vgpr_32 = GLOBAL_LOAD_DWORD %0, 20, 0, 0, implicit $exec |
| 210 | # GCN-NEXT: dead %7:vgpr_32 = GLOBAL_LOAD_DWORD %0, 24, 0, 0, implicit $exec |
| 211 | # GCN-NEXT: dead %8:vgpr_32 = GLOBAL_LOAD_DWORD %0, 28, 0, 0, implicit $exec |
| 212 | # GCN-NEXT: dead %9:vgpr_32 = GLOBAL_LOAD_DWORD %0, 32, 0, 0, implicit $exec |
| 213 | # GCN-NEXT: dead %10:vgpr_32 = GLOBAL_LOAD_DWORD %0, 36, 0, 0, implicit $exec |
| 214 | # GCN-NEXT: dead %11:vgpr_32 = GLOBAL_LOAD_DWORD %0, 40, 0, 0, implicit $exec |
| 215 | # GCN-NEXT: dead %12:vgpr_32 = GLOBAL_LOAD_DWORD %0, 44, 0, 0, implicit $exec |
| 216 | # GCN-NEXT: dead %13:vgpr_32 = GLOBAL_LOAD_DWORD %0, 48, 0, 0, implicit $exec |
| 217 | # GCN-NEXT: dead %14:vgpr_32 = GLOBAL_LOAD_DWORD %0, 52, 0, 0, implicit $exec |
| 218 | # GCN-NEXT: dead %15:vgpr_32 = GLOBAL_LOAD_DWORD %0, 56, 0, 0, implicit $exec |
| 219 | # GCN-NEXT: } |
| 220 | # GCN-NEXT: dead early-clobber %16:vgpr_32, dead early-clobber %17:vgpr_32 = BUNDLE %0, implicit $exec { |
| 221 | # GCN-NEXT: dead %16:vgpr_32 = GLOBAL_LOAD_DWORD %0, 60, 0, 0, implicit $exec |
| 222 | # GCN-NEXT: dead %17:vgpr_32 = GLOBAL_LOAD_DWORD %0, 64, 0, 0, implicit $exec |
| 223 | # GCN-NEXT: } |
| 224 | |
| 225 | --- |
| 226 | name: overflow_counter |
| 227 | tracksRegLiveness: true |
| 228 | registers: |
| 229 | - { id: 0, class: vreg_64 } |
| 230 | - { id: 1, class: vgpr_32 } |
| 231 | - { id: 2, class: vgpr_32 } |
| 232 | - { id: 3, class: vgpr_32 } |
| 233 | - { id: 4, class: vgpr_32 } |
| 234 | - { id: 5, class: vgpr_32 } |
| 235 | - { id: 6, class: vgpr_32 } |
| 236 | - { id: 7, class: vgpr_32 } |
| 237 | - { id: 8, class: vgpr_32 } |
| 238 | - { id: 9, class: vgpr_32 } |
| 239 | - { id: 10, class: vgpr_32 } |
| 240 | - { id: 11, class: vgpr_32 } |
| 241 | - { id: 12, class: vgpr_32 } |
| 242 | - { id: 13, class: vgpr_32 } |
| 243 | - { id: 14, class: vgpr_32 } |
| 244 | - { id: 15, class: vgpr_32 } |
| 245 | - { id: 16, class: vgpr_32 } |
| 246 | - { id: 17, class: vgpr_32 } |
| 247 | body: | |
| 248 | bb.0: |
| 249 | %0 = IMPLICIT_DEF |
| 250 | %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, 0, implicit $exec |
| 251 | %2:vgpr_32 = GLOBAL_LOAD_DWORD %0, 4, 0, 0, implicit $exec |
| 252 | %3:vgpr_32 = GLOBAL_LOAD_DWORD %0, 8, 0, 0, implicit $exec |
| 253 | %4:vgpr_32 = GLOBAL_LOAD_DWORD %0, 12, 0, 0, implicit $exec |
| 254 | %5:vgpr_32 = GLOBAL_LOAD_DWORD %0, 16, 0, 0, implicit $exec |
| 255 | %6:vgpr_32 = GLOBAL_LOAD_DWORD %0, 20, 0, 0, implicit $exec |
| 256 | %7:vgpr_32 = GLOBAL_LOAD_DWORD %0, 24, 0, 0, implicit $exec |
| 257 | %8:vgpr_32 = GLOBAL_LOAD_DWORD %0, 28, 0, 0, implicit $exec |
| 258 | %9:vgpr_32 = GLOBAL_LOAD_DWORD %0, 32, 0, 0, implicit $exec |
| 259 | %10:vgpr_32 = GLOBAL_LOAD_DWORD %0, 36, 0, 0, implicit $exec |
| 260 | %11:vgpr_32 = GLOBAL_LOAD_DWORD %0, 40, 0, 0, implicit $exec |
| 261 | %12:vgpr_32 = GLOBAL_LOAD_DWORD %0, 44, 0, 0, implicit $exec |
| 262 | %13:vgpr_32 = GLOBAL_LOAD_DWORD %0, 48, 0, 0, implicit $exec |
| 263 | %14:vgpr_32 = GLOBAL_LOAD_DWORD %0, 52, 0, 0, implicit $exec |
| 264 | %15:vgpr_32 = GLOBAL_LOAD_DWORD %0, 56, 0, 0, implicit $exec |
| 265 | %16:vgpr_32 = GLOBAL_LOAD_DWORD %0, 60, 0, 0, implicit $exec |
| 266 | %17:vgpr_32 = GLOBAL_LOAD_DWORD %0, 64, 0, 0, implicit $exec |
| 267 | ... |
| 268 | |
| 269 | # GCN-LABEL: {{^}}name: reg_pressure{{$}} |
| 270 | # GCN: dead early-clobber %2:vreg_128, dead early-clobber %4:vreg_128, dead early-clobber %1:vreg_128, dead early-clobber %3:vreg_128, dead early-clobber %5:vreg_128 = BUNDLE %0, implicit $exec { |
| 271 | # GCN-NEXT: dead %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 272 | # GCN-NEXT: dead %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, 0, implicit $exec |
| 273 | # GCN-NEXT: dead %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, 0, implicit $exec |
| 274 | # GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, 0, implicit $exec |
| 275 | # GCN-NEXT: dead %5:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 64, 0, 0, implicit $exec |
| 276 | # GCN-NEXT: } |
| 277 | # GCN-NEXT: dead early-clobber %7:vreg_128, dead early-clobber %6:vreg_128 = BUNDLE %0, implicit $exec { |
| 278 | # GCN-NEXT: dead %6:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 80, 0, 0, implicit $exec |
| 279 | # GCN-NEXT: dead %7:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 96, 0, 0, implicit $exec |
| 280 | # GCN-NEXT: } |
| 281 | |
| 282 | --- |
| 283 | name: reg_pressure |
| 284 | tracksRegLiveness: true |
| 285 | registers: |
| 286 | - { id: 0, class: vreg_64 } |
| 287 | - { id: 1, class: vreg_128 } |
| 288 | - { id: 2, class: vreg_128 } |
| 289 | - { id: 3, class: vreg_128 } |
| 290 | - { id: 4, class: vreg_128 } |
| 291 | - { id: 5, class: vreg_128 } |
| 292 | - { id: 6, class: vreg_128 } |
| 293 | - { id: 7, class: vreg_128 } |
| 294 | body: | |
| 295 | bb.0: |
| 296 | %0 = IMPLICIT_DEF |
| 297 | %1:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 298 | %2:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 16, 0, 0, implicit $exec |
| 299 | %3:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 32, 0, 0, implicit $exec |
| 300 | %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 48, 0, 0, implicit $exec |
| 301 | %5:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 64, 0, 0, implicit $exec |
| 302 | %6:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 80, 0, 0, implicit $exec |
| 303 | %7:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 96, 0, 0, implicit $exec |
| 304 | ... |
| 305 | |
| 306 | # GCN-LABEL: {{^}}name: image_clause{{$}} |
| 307 | # GCN: early-clobber %4:vreg_128, early-clobber %3:vreg_128, early-clobber %5:vreg_128 = BUNDLE %0, undef %2:sreg_128, %1, implicit $exec { |
Nicolai Haehnle | f267431 | 2018-06-21 13:36:01 +0000 | [diff] [blame] | 308 | # GCN-NEXT: %3:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sreg_128, 15, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| 309 | # GCN-NEXT: %4:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sreg_128, 15, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| 310 | # GCN-NEXT: %5:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sreg_128, 15, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
Stanislav Mekhanoshin | 739174c | 2018-05-31 20:13:51 +0000 | [diff] [blame] | 311 | # GCN-NEXT: } |
Nicolai Haehnle | f267431 | 2018-06-21 13:36:01 +0000 | [diff] [blame] | 312 | # GCN-NEXT: IMAGE_STORE_V4_V2 %3, %0, %1, 15, -1, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
Stanislav Mekhanoshin | 739174c | 2018-05-31 20:13:51 +0000 | [diff] [blame] | 313 | |
| 314 | --- |
| 315 | name: image_clause |
| 316 | tracksRegLiveness: true |
| 317 | registers: |
| 318 | - { id: 0, class: vreg_64 } |
| 319 | - { id: 1, class: sreg_256 } |
| 320 | - { id: 2, class: sreg_128 } |
| 321 | - { id: 3, class: vreg_128 } |
| 322 | - { id: 4, class: vreg_128 } |
| 323 | - { id: 5, class: vreg_128 } |
| 324 | body: | |
| 325 | bb.0: |
| 326 | %0 = IMPLICIT_DEF |
| 327 | %1 = IMPLICIT_DEF |
Nicolai Haehnle | f267431 | 2018-06-21 13:36:01 +0000 | [diff] [blame] | 328 | %3:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sreg_128, 15, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| 329 | %4:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sreg_128, 15, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| 330 | %5:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, undef %2:sreg_128, 15, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| 331 | IMAGE_STORE_V4_V2 %3, %0, %1, 15, -1, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| 332 | IMAGE_STORE_V4_V2 %4, %0, %1, 15, -1, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| 333 | IMAGE_STORE_V4_V2 %5, %0, %1, 15, -1, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
Stanislav Mekhanoshin | 739174c | 2018-05-31 20:13:51 +0000 | [diff] [blame] | 334 | ... |
| 335 | |
| 336 | # GCN-LABEL: {{^}}name: mixed_clause{{$}} |
| 337 | # GCN: dead early-clobber %4:vreg_128, dead early-clobber %3:vreg_128, dead early-clobber %5:vgpr_32 = BUNDLE %0, %2, %1, implicit $exec { |
Nicolai Haehnle | f267431 | 2018-06-21 13:36:01 +0000 | [diff] [blame] | 338 | # GCN-NEXT: dead %3:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, %2, 15, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
Stanislav Mekhanoshin | 739174c | 2018-05-31 20:13:51 +0000 | [diff] [blame] | 339 | # GCN-NEXT: dead %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 340 | # GCN-NEXT: dead %5:vgpr_32 = BUFFER_LOAD_DWORD_ADDR64 %0, %2, 0, 0, 0, 0, 0, implicit $exec |
| 341 | # GCN-NEXT: } |
| 342 | |
| 343 | --- |
| 344 | name: mixed_clause |
| 345 | tracksRegLiveness: true |
| 346 | registers: |
| 347 | - { id: 0, class: vreg_64 } |
| 348 | - { id: 1, class: sreg_256 } |
| 349 | - { id: 2, class: sreg_128 } |
| 350 | - { id: 3, class: vreg_128 } |
| 351 | - { id: 4, class: vreg_128 } |
| 352 | - { id: 5, class: vgpr_32 } |
| 353 | body: | |
| 354 | bb.0: |
| 355 | %0 = IMPLICIT_DEF |
| 356 | %1 = IMPLICIT_DEF |
| 357 | %2 = IMPLICIT_DEF |
Nicolai Haehnle | f267431 | 2018-06-21 13:36:01 +0000 | [diff] [blame] | 358 | %3:vreg_128 = IMAGE_SAMPLE_LZ_V4_V2 %0, %1, %2, 15, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
Stanislav Mekhanoshin | 739174c | 2018-05-31 20:13:51 +0000 | [diff] [blame] | 359 | %4:vreg_128 = GLOBAL_LOAD_DWORDX4 %0, 0, 0, 0, implicit $exec |
| 360 | %5:vgpr_32 = BUFFER_LOAD_DWORD_ADDR64 %0, %2, 0, 0, 0, 0, 0, implicit $exec |
| 361 | ... |
| 362 | |
| 363 | # GCN-LABEL: {{^}}name: atomic{{$}} |
| 364 | # GCN: %1:vgpr_32 = IMPLICIT_DEF |
| 365 | # GCN-NEXT: dead %2:vgpr_32 = FLAT_ATOMIC_ADD_RTN %0, %1, 0, 0, implicit $exec, implicit $flat_scr |
| 366 | # GCN-NEXT: dead %3:vgpr_32 = FLAT_ATOMIC_ADD_RTN %0, %1, 0, 0, implicit $exec, implicit $flat_scr |
| 367 | # GCN-NEXT: FLAT_ATOMIC_ADD %0, %1, 0, 0, implicit $exec, implicit $flat_scr |
| 368 | # GCN-NEXT: FLAT_ATOMIC_ADD %0, %1, 0, 0, implicit $exec, implicit $flat_scr |
| 369 | # GCN-NEXT: S_ENDPGM |
| 370 | |
| 371 | --- |
| 372 | name: atomic |
| 373 | tracksRegLiveness: true |
| 374 | registers: |
| 375 | - { id: 0, class: vreg_64 } |
| 376 | - { id: 1, class: vgpr_32 } |
| 377 | - { id: 2, class: vgpr_32 } |
| 378 | - { id: 3, class: vgpr_32 } |
| 379 | body: | |
| 380 | bb.0: |
| 381 | %0 = IMPLICIT_DEF |
| 382 | %1 = IMPLICIT_DEF |
| 383 | %2:vgpr_32 = FLAT_ATOMIC_ADD_RTN %0, %1, 0, 0, implicit $exec, implicit $flat_scr |
| 384 | %3:vgpr_32 = FLAT_ATOMIC_ADD_RTN %0, %1, 0, 0, implicit $exec, implicit $flat_scr |
| 385 | FLAT_ATOMIC_ADD %0, %1, 0, 0, implicit $exec, implicit $flat_scr |
| 386 | FLAT_ATOMIC_ADD %0, %1, 0, 0, implicit $exec, implicit $flat_scr |
| 387 | S_ENDPGM |
| 388 | ... |