brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.8 KiB · 8b46998 Raw
407 lines · plain
1// RUN: mlir-opt %s -test-arm-sme-tile-allocation -split-input-file | FileCheck %s2 3// -----4 5// Note: Tile IDs >= 16 are in-memory tile IDs (i.e. spills).6 7// CHECK-LABEL: mixed_tiles8func.func @mixed_tiles() {9  // ZA0.Q, ZA2.Q, ZA4.Q, ZA6.Q, ZA8.Q, ZA10.Q, ZA12.Q, ZA14.Q10  // CHECK-NEXT: tile_id = 011  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>12  // ZA1.Q, ZA5.Q, ZA9.Q, ZA13.Q13  // CHECK-NEXT: tile_id = 114  %za1_s = arm_sme.get_tile : vector<[4]x[4]xi32>15  // ZA3.D ZA3.Q, ZA11.Q16  // CHECK-NEXT: tile_id = 317  %za3_d = arm_sme.get_tile : vector<[2]x[2]xi64>18  // ZA7.Q19  // CHECK-NEXT: tile_id = 720  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>21  // ZA15.Q is still free.22  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()23  "test.some_use"(%za1_s) : (vector<[4]x[4]xi32>) -> ()24  "test.some_use"(%za3_d) : (vector<[2]x[2]xi64>) -> ()25  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()26  return27}28 29// -----30 31// CHECK-LABEL: za_b32func.func @za_b() {33  // CHECK-NEXT: tile_id = 034  %za0_b = arm_sme.get_tile : vector<[16]x[16]xi8>35  // Next tile is in-memory:36  // CHECK-NEXT: tile_id = 1637  %next_tile = arm_sme.get_tile : vector<[16]x[16]xi8>38  "test.some_use"(%za0_b) : (vector<[16]x[16]xi8>) -> ()39  "test.some_use"(%next_tile) : (vector<[16]x[16]xi8>) -> ()40  return41}42 43// -----44 45// CHECK-LABEL: za_b_overlapping_za_q46func.func @za_b_overlapping_za_q() {47  // CHECK-NEXT: tile_id = 048  %za0_b = arm_sme.get_tile : vector<[16]x[16]xi8>49  // Next tile is in-memory:50  // CHECK-NEXT: tile_id = 1651  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>52  "test.some_use"(%za0_b) : (vector<[16]x[16]xi8>) -> ()53  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()54  return55}56 57// -----58 59// CHECK-LABEL: za_h60func.func @za_h() {61  // CHECK-NEXT: tile_id = 062  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>63  // CHECK-NEXT: tile_id = 164  %za1_h = arm_sme.get_tile : vector<[8]x[8]xi16>65  // Next tile is in-memory:66  // CHECK-NEXT: tile_id = 1667  %next_tile = arm_sme.get_tile : vector<[8]x[8]xi16>68  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()69  "test.some_use"(%za1_h) : (vector<[8]x[8]xi16>) -> ()70  "test.some_use"(%next_tile) : (vector<[8]x[8]xi16>) -> ()71  return72}73 74// -----75 76// CHECK-LABEL: za_h_overlapping_za_s77func.func @za_h_overlapping_za_s() {78  // ZA0.Q, ZA2.Q, ZA4.Q, ZA6.Q, ZA8.Q, ZA10.Q, ZA12.Q, ZA14.Q79  // CHECK-NEXT: tile_id = 080  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>81  // ZA1.Q, ZA5.Q, ZA9.Q, ZA13.Q82  // CHECK-NEXT: tile_id = 183  %za1_s = arm_sme.get_tile : vector<[4]x[4]xi32>84  // ZA3.Q, ZA7.Q, ZA11.Q, ZA15.Q85  // CHECK-NEXT: tile_id = 386  %za3_s = arm_sme.get_tile : vector<[4]x[4]xi32>87  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()88  "test.some_use"(%za1_s) : (vector<[4]x[4]xi32>) -> ()89  "test.some_use"(%za3_s) : (vector<[4]x[4]xi32>) -> ()90  return91}92 93// -----94 95// CHECK-LABEL: za_h_overlapping_za_d96func.func @za_h_overlapping_za_d() {97  // ZA0.Q, ZA2.Q, ZA4.Q, ZA6.Q, ZA8.Q, ZA10.Q, ZA12.Q, ZA14.Q98  // CHECK-NEXT: tile_id = 099  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>100  // ZA1.Q, ZA9.Q101  // CHECK-NEXT: tile_id = 1102  %za1_d = arm_sme.get_tile : vector<[2]x[2]xi64>103  // ZA3.Q, ZA11.Q104  // CHECK-NEXT: tile_id = 3105  %za3_d = arm_sme.get_tile : vector<[2]x[2]xi64>106  // ZA5.Q, ZA13.Q107  // CHECK-NEXT: tile_id = 5108  %za5_d = arm_sme.get_tile : vector<[2]x[2]xi64>109  // ZA7.Q, ZA15.Q110  // CHECK-NEXT: tile_id = 7111  %za7_d = arm_sme.get_tile : vector<[2]x[2]xi64>112  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()113  "test.some_use"(%za1_d) : (vector<[2]x[2]xi64>) -> ()114  "test.some_use"(%za3_d) : (vector<[2]x[2]xi64>) -> ()115  "test.some_use"(%za5_d) : (vector<[2]x[2]xi64>) -> ()116  "test.some_use"(%za7_d) : (vector<[2]x[2]xi64>) -> ()117  return118}119 120// -----121 122// CHECK-LABEL: za_h_overlapping_za_q123func.func @za_h_overlapping_za_q() {124  // CHECK-NEXT: tile_id = 0125  %za0_h = arm_sme.get_tile : vector<[8]x[8]xi16>126  // CHECK-NEXT: tile_id = 1127  %za1_q = arm_sme.get_tile : vector<[1]x[1]xi128>128  // CHECK-NEXT: tile_id = 3129  %za3_q = arm_sme.get_tile : vector<[1]x[1]xi128>130  // CHECK-NEXT: tile_id = 5131  %za5_q = arm_sme.get_tile : vector<[1]x[1]xi128>132  // CHECK-NEXT: tile_id = 7133  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>134  // CHECK-NEXT: tile_id = 9135  %za9_q = arm_sme.get_tile : vector<[1]x[1]xi128>136  // CHECK-NEXT: tile_id = 11137  %za11_q = arm_sme.get_tile : vector<[1]x[1]xi128>138  // CHECK-NEXT: tile_id = 13139  %za13_q = arm_sme.get_tile : vector<[1]x[1]xi128>140  // CHECK-NEXT: tile_id = 15141  %za15_q = arm_sme.get_tile : vector<[1]x[1]xi128>142  // Next tile is in-memory:143  // CHECK-NEXT: tile_id = 16144  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>145  "test.some_use"(%za0_h) : (vector<[8]x[8]xi16>) -> ()146  "test.some_use"(%za1_q) : (vector<[1]x[1]xi128>) -> ()147  "test.some_use"(%za3_q) : (vector<[1]x[1]xi128>) -> ()148  "test.some_use"(%za5_q) : (vector<[1]x[1]xi128>) -> ()149  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()150  "test.some_use"(%za9_q) : (vector<[1]x[1]xi128>) -> ()151  "test.some_use"(%za11_q) : (vector<[1]x[1]xi128>) -> ()152  "test.some_use"(%za13_q) : (vector<[1]x[1]xi128>) -> ()153  "test.some_use"(%za15_q) : (vector<[1]x[1]xi128>) -> ()154  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()155  return156}157 158// -----159 160// CHECK-LABEL: za_s161func.func @za_s() {162  // CHECK-NEXT: tile_id = 0163  %za0_s = arm_sme.get_tile : vector<[4]x[4]xi32>164  // CHECK-NEXT: tile_id = 1165  %za1_s = arm_sme.get_tile : vector<[4]x[4]xi32>166  // CHECK-NEXT: tile_id = 2167  %za2_s = arm_sme.get_tile : vector<[4]x[4]xi32>168  // CHECK-NEXT: tile_id = 3169  %za3_s = arm_sme.get_tile : vector<[4]x[4]xi32>170  // Next tile is in-memory:171  // CHECK-NEXT: tile_id = 16172  %next_tile = arm_sme.get_tile : vector<[4]x[4]xi32>173  "test.some_use"(%za0_s) : (vector<[4]x[4]xi32>) -> ()174  "test.some_use"(%za1_s) : (vector<[4]x[4]xi32>) -> ()175  "test.some_use"(%za2_s) : (vector<[4]x[4]xi32>) -> ()176  "test.some_use"(%za3_s) : (vector<[4]x[4]xi32>) -> ()177  "test.some_use"(%next_tile) : (vector<[4]x[4]xi32>) -> ()178  return179}180 181// -----182 183// CHECK-LABEL: za_s_overlapping_za_d184func.func @za_s_overlapping_za_d() {185  // ZA0.Q, ZA4.Q, ZA8.Q, ZA12.Q186  // CHECK-NEXT: tile_id = 0187  %za0_s = arm_sme.get_tile : vector<[4]x[4]xi32>188  // ZA1.Q, ZA5.Q, ZA9.Q, ZA13.Q189  // CHECK-NEXT: tile_id = 1190  %za1_s = arm_sme.get_tile : vector<[4]x[4]xi32>191  // ZA2.Q, ZA6.Q, ZA10.Q, ZA14.Q192  // CHECK-NEXT: tile_id = 2193  %za2_s = arm_sme.get_tile : vector<[4]x[4]xi32>194  // ZA3.Q, ZA11.Q195  // CHECK-NEXT: tile_id = 3196  %za3_d = arm_sme.get_tile : vector<[2]x[2]xi64>197  // ZA7.Q, ZA15.Q198  // CHECK-NEXT: tile_id = 7199  %za7_d = arm_sme.get_tile : vector<[2]x[2]xi64>200  "test.some_use"(%za0_s) : (vector<[4]x[4]xi32>) -> ()201  "test.some_use"(%za1_s) : (vector<[4]x[4]xi32>) -> ()202  "test.some_use"(%za2_s) : (vector<[4]x[4]xi32>) -> ()203  "test.some_use"(%za3_d) : (vector<[2]x[2]xi64>) -> ()204  "test.some_use"(%za7_d) : (vector<[2]x[2]xi64>) -> ()205  return206}207 208// -----209 210// CHECK-LABEL: za_s_overlapping_za_q211func.func @za_s_overlapping_za_q() {212  // CHECK-NEXT: tile_id = 0213  %za0_s = arm_sme.get_tile : vector<[4]x[4]xi32>214  // CHECK-NEXT: tile_id = 1215  %za1_q = arm_sme.get_tile : vector<[1]x[1]xi128>216  // CHECK-NEXT: tile_id = 2217  %za2_q = arm_sme.get_tile : vector<[1]x[1]xi128>218  // CHECK-NEXT: tile_id = 3219  %za3_q = arm_sme.get_tile : vector<[1]x[1]xi128>220  // CHECK-NEXT: tile_id = 5221  %za5_q = arm_sme.get_tile : vector<[1]x[1]xi128>222  // CHECK-NEXT: tile_id = 6223  %za6_q = arm_sme.get_tile : vector<[1]x[1]xi128>224  // CHECK-NEXT: tile_id = 7225  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>226  // CHECK-NEXT: tile_id = 9227  %za9_q = arm_sme.get_tile : vector<[1]x[1]xi128>228  // CHECK-NEXT: tile_id = 10229  %za10_q = arm_sme.get_tile : vector<[1]x[1]xi128>230  // CHECK-NEXT: tile_id = 11231  %za11_q = arm_sme.get_tile : vector<[1]x[1]xi128>232  // CHECK-NEXT: tile_id = 13233  %za13_q = arm_sme.get_tile : vector<[1]x[1]xi128>234  // CHECK-NEXT: tile_id = 14235  %za14_q = arm_sme.get_tile : vector<[1]x[1]xi128>236  // CHECK-NEXT: tile_id = 15237  %za15_q = arm_sme.get_tile : vector<[1]x[1]xi128>238  // Next tile is in-memory:239  // CHECK-NEXT: tile_id = 16240  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>241  "test.some_use"(%za0_s) : (vector<[4]x[4]xi32>) -> ()242  "test.some_use"(%za1_q) : (vector<[1]x[1]xi128>) -> ()243  "test.some_use"(%za2_q) : (vector<[1]x[1]xi128>) -> ()244  "test.some_use"(%za3_q) : (vector<[1]x[1]xi128>) -> ()245  "test.some_use"(%za5_q) : (vector<[1]x[1]xi128>) -> ()246  "test.some_use"(%za6_q) : (vector<[1]x[1]xi128>) -> ()247  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()248  "test.some_use"(%za9_q) : (vector<[1]x[1]xi128>) -> ()249  "test.some_use"(%za10_q) : (vector<[1]x[1]xi128>) -> ()250  "test.some_use"(%za11_q) : (vector<[1]x[1]xi128>) -> ()251  "test.some_use"(%za13_q) : (vector<[1]x[1]xi128>) -> ()252  "test.some_use"(%za14_q) : (vector<[1]x[1]xi128>) -> ()253  "test.some_use"(%za15_q) : (vector<[1]x[1]xi128>) -> ()254  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()255  return256}257 258// -----259 260// CHECK-LABEL: za_d261func.func @za_d() {262  // CHECK-NEXT: tile_id = 0263  %za0_d = arm_sme.get_tile : vector<[2]x[2]xi64>264  // CHECK-NEXT: tile_id = 1265  %za1_d = arm_sme.get_tile : vector<[2]x[2]xi64>266  // CHECK-NEXT: tile_id = 2267  %za2_d = arm_sme.get_tile : vector<[2]x[2]xi64>268  // CHECK-NEXT: tile_id = 3269  %za3_d = arm_sme.get_tile : vector<[2]x[2]xi64>270  // CHECK-NEXT: tile_id = 4271  %za4_d = arm_sme.get_tile : vector<[2]x[2]xi64>272  // CHECK-NEXT: tile_id = 5273  %za5_d = arm_sme.get_tile : vector<[2]x[2]xi64>274  // CHECK-NEXT: tile_id = 6275  %za6_d = arm_sme.get_tile : vector<[2]x[2]xi64>276  // CHECK-NEXT: tile_id = 7277  %za7_d = arm_sme.get_tile : vector<[2]x[2]xi64>278  // Next tile is in-memory:279  // CHECK-NEXT: tile_id = 16280  %next_tile = arm_sme.get_tile : vector<[2]x[2]xi64>281  "test.some_use"(%za0_d) : (vector<[2]x[2]xi64>) -> ()282  "test.some_use"(%za1_d) : (vector<[2]x[2]xi64>) -> ()283  "test.some_use"(%za2_d) : (vector<[2]x[2]xi64>) -> ()284  "test.some_use"(%za3_d) : (vector<[2]x[2]xi64>) -> ()285  "test.some_use"(%za4_d) : (vector<[2]x[2]xi64>) -> ()286  "test.some_use"(%za5_d) : (vector<[2]x[2]xi64>) -> ()287  "test.some_use"(%za6_d) : (vector<[2]x[2]xi64>) -> ()288  "test.some_use"(%za7_d) : (vector<[2]x[2]xi64>) -> ()289  "test.some_use"(%next_tile) : (vector<[2]x[2]xi64>) -> ()290  return291}292 293// -----294 295// CHECK-LABEL: za_d_overlapping_za_q296func.func @za_d_overlapping_za_q() {297  // CHECK-NEXT: tile_id = 0298  %za0_d = arm_sme.get_tile : vector<[2]x[2]xi64>299  // CHECK-NEXT: tile_id = 1300  %za1_q = arm_sme.get_tile : vector<[1]x[1]xi128>301  // CHECK-NEXT: tile_id = 2302  %za2_q = arm_sme.get_tile : vector<[1]x[1]xi128>303  // CHECK-NEXT: tile_id = 3304  %za3_q = arm_sme.get_tile : vector<[1]x[1]xi128>305  // CHECK-NEXT: tile_id = 4306  %za4_q = arm_sme.get_tile : vector<[1]x[1]xi128>307  // CHECK-NEXT: tile_id = 5308  %za5_q = arm_sme.get_tile : vector<[1]x[1]xi128>309  // CHECK-NEXT: tile_id = 6310  %za6_q = arm_sme.get_tile : vector<[1]x[1]xi128>311  // CHECK-NEXT: tile_id = 7312  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>313  // CHECK-NEXT: tile_id = 9314  %za9_q = arm_sme.get_tile : vector<[1]x[1]xi128>315  // CHECK-NEXT: tile_id = 10316  %za10_q = arm_sme.get_tile : vector<[1]x[1]xi128>317  // CHECK-NEXT: tile_id = 11318  %za11_q = arm_sme.get_tile : vector<[1]x[1]xi128>319  // CHECK-NEXT: tile_id = 12320  %za12_q = arm_sme.get_tile : vector<[1]x[1]xi128>321  // CHECK-NEXT: tile_id = 13322  %za13_q = arm_sme.get_tile : vector<[1]x[1]xi128>323  // CHECK-NEXT: tile_id = 14324  %za14_q = arm_sme.get_tile : vector<[1]x[1]xi128>325  // CHECK-NEXT: tile_id = 15326  %za15_q = arm_sme.get_tile : vector<[1]x[1]xi128>327  // Next tile is in-memory:328  // CHECK-NEXT: tile_id = 16329  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>330  "test.some_use"(%za0_d) : (vector<[2]x[2]xi64>) -> ()331  "test.some_use"(%za1_q) : (vector<[1]x[1]xi128>) -> ()332  "test.some_use"(%za2_q) : (vector<[1]x[1]xi128>) -> ()333  "test.some_use"(%za3_q) : (vector<[1]x[1]xi128>) -> ()334  "test.some_use"(%za4_q) : (vector<[1]x[1]xi128>) -> ()335  "test.some_use"(%za5_q) : (vector<[1]x[1]xi128>) -> ()336  "test.some_use"(%za6_q) : (vector<[1]x[1]xi128>) -> ()337  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()338  "test.some_use"(%za9_q) : (vector<[1]x[1]xi128>) -> ()339  "test.some_use"(%za10_q) : (vector<[1]x[1]xi128>) -> ()340  "test.some_use"(%za11_q) : (vector<[1]x[1]xi128>) -> ()341  "test.some_use"(%za12_q) : (vector<[1]x[1]xi128>) -> ()342  "test.some_use"(%za13_q) : (vector<[1]x[1]xi128>) -> ()343  "test.some_use"(%za14_q) : (vector<[1]x[1]xi128>) -> ()344  "test.some_use"(%za15_q) : (vector<[1]x[1]xi128>) -> ()345  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()346  return347}348 349// -----350 351// CHECK-LABEL: za_q352func.func @za_q() {353  // CHECK-NEXT: tile_id = 0354  %za0_q = arm_sme.get_tile : vector<[1]x[1]xi128>355  // CHECK-NEXT: tile_id = 1356  %za1_q = arm_sme.get_tile : vector<[1]x[1]xi128>357  // CHECK-NEXT: tile_id = 2358  %za2_q = arm_sme.get_tile : vector<[1]x[1]xi128>359  // CHECK-NEXT: tile_id = 3360  %za3_q = arm_sme.get_tile : vector<[1]x[1]xi128>361  // CHECK-NEXT: tile_id = 4362  %za4_q = arm_sme.get_tile : vector<[1]x[1]xi128>363  // CHECK-NEXT: tile_id = 5364  %za5_q = arm_sme.get_tile : vector<[1]x[1]xi128>365  // CHECK-NEXT: tile_id = 6366  %za6_q = arm_sme.get_tile : vector<[1]x[1]xi128>367  // CHECK-NEXT: tile_id = 7368  %za7_q = arm_sme.get_tile : vector<[1]x[1]xi128>369  // CHECK-NEXT: tile_id = 8370  %za8_q = arm_sme.get_tile : vector<[1]x[1]xi128>371  // CHECK-NEXT: tile_id = 9372  %za9_q = arm_sme.get_tile : vector<[1]x[1]xi128>373  // CHECK-NEXT: tile_id = 10374  %za10_q = arm_sme.get_tile : vector<[1]x[1]xi128>375  // CHECK-NEXT: tile_id = 11376  %za11_q = arm_sme.get_tile : vector<[1]x[1]xi128>377  // CHECK-NEXT: tile_id = 12378  %za12_q = arm_sme.get_tile : vector<[1]x[1]xi128>379  // CHECK-NEXT: tile_id = 13380  %za13_q = arm_sme.get_tile : vector<[1]x[1]xi128>381  // CHECK-NEXT: tile_id = 14382  %za14_q = arm_sme.get_tile : vector<[1]x[1]xi128>383  // CHECK-NEXT: tile_id = 15384  %za15_q = arm_sme.get_tile : vector<[1]x[1]xi128>385  // Next tile is in-memory:386  // CHECK-NEXT: tile_id = 16387  %next_tile = arm_sme.get_tile : vector<[1]x[1]xi128>388  "test.some_use"(%za0_q) : (vector<[1]x[1]xi128>) -> ()389  "test.some_use"(%za1_q) : (vector<[1]x[1]xi128>) -> ()390  "test.some_use"(%za2_q) : (vector<[1]x[1]xi128>) -> ()391  "test.some_use"(%za3_q) : (vector<[1]x[1]xi128>) -> ()392  "test.some_use"(%za4_q) : (vector<[1]x[1]xi128>) -> ()393  "test.some_use"(%za5_q) : (vector<[1]x[1]xi128>) -> ()394  "test.some_use"(%za6_q) : (vector<[1]x[1]xi128>) -> ()395  "test.some_use"(%za7_q) : (vector<[1]x[1]xi128>) -> ()396  "test.some_use"(%za8_q) : (vector<[1]x[1]xi128>) -> ()397  "test.some_use"(%za9_q) : (vector<[1]x[1]xi128>) -> ()398  "test.some_use"(%za10_q) : (vector<[1]x[1]xi128>) -> ()399  "test.some_use"(%za11_q) : (vector<[1]x[1]xi128>) -> ()400  "test.some_use"(%za12_q) : (vector<[1]x[1]xi128>) -> ()401  "test.some_use"(%za13_q) : (vector<[1]x[1]xi128>) -> ()402  "test.some_use"(%za14_q) : (vector<[1]x[1]xi128>) -> ()403  "test.some_use"(%za15_q) : (vector<[1]x[1]xi128>) -> ()404  "test.some_use"(%next_tile) : (vector<[1]x[1]xi128>) -> ()405  return406}407