brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.9 KiB · b7b9329 Raw
278 lines · plain
1// RUN: mlir-opt -verify-diagnostics -split-input-file %s | mlir-opt | FileCheck %s2 3func.func @arm_sve_sdot(%a: vector<[16]xi8>,4                   %b: vector<[16]xi8>,5                   %c: vector<[4]xi32>) -> vector<[4]xi32> {6  // CHECK: arm_sve.sdot {{.*}}: vector<[16]xi8> to vector<[4]xi327  %0 = arm_sve.sdot %c, %a, %b :8             vector<[16]xi8> to vector<[4]xi32>9  return %0 : vector<[4]xi32>10}11 12// -----13 14func.func @arm_sve_smmla(%a: vector<[16]xi8>,15                    %b: vector<[16]xi8>,16                    %c: vector<[4]xi32>) -> vector<[4]xi32> {17  // CHECK: arm_sve.smmla {{.*}}: vector<[16]xi8> to vector<[4]xi318  %0 = arm_sve.smmla %c, %a, %b :19             vector<[16]xi8> to vector<[4]xi32>20  return %0 : vector<[4]xi32>21}22 23// -----24 25func.func @arm_sve_udot(%a: vector<[16]xi8>,26                   %b: vector<[16]xi8>,27                   %c: vector<[4]xi32>) -> vector<[4]xi32> {28  // CHECK: arm_sve.udot {{.*}}: vector<[16]xi8> to vector<[4]xi3229  %0 = arm_sve.udot %c, %a, %b :30             vector<[16]xi8> to vector<[4]xi32>31  return %0 : vector<[4]xi32>32}33 34// -----35 36func.func @arm_sve_ummla(%a: vector<[16]xi8>,37                    %b: vector<[16]xi8>,38                    %c: vector<[4]xi32>) -> vector<[4]xi32> {39  // CHECK: arm_sve.ummla {{.*}}: vector<[16]xi8> to vector<[4]xi340  %0 = arm_sve.ummla %c, %a, %b :41             vector<[16]xi8> to vector<[4]xi32>42  return %0 : vector<[4]xi32>43}44 45// -----46 47func.func @arm_sve_usmmla(%a: vector<[16]xi8>,48                    %b: vector<[16]xi8>,49                    %c: vector<[4]xi32>) -> vector<[4]xi32> {50  // CHECK: arm_sve.usmmla {{.*}}: vector<[16]xi8> to vector<[4]xi351  %0 = arm_sve.usmmla %c, %a, %b :52             vector<[16]xi8> to vector<[4]xi32>53  return %0 : vector<[4]xi32>54}55 56// -----57 58func.func @arm_sve_bfmmla(%a: vector<[8]xbf16>,59                          %b: vector<[8]xbf16>,60                          %c: vector<[4]xf32>) -> vector<[4]xf32> {61  // CHECK: arm_sve.intr.bfmmla {{.*}}: vector<[8]xbf16> to vector<[4]xf32>62  %0 = arm_sve.intr.bfmmla %c, %a, %b : vector<[8]xbf16> to vector<[4]xf32>63  return %0 : vector<[4]xf32>64}65 66// -----67 68func.func @arm_sve_masked_arithi(%a: vector<[4]xi32>,69                            %b: vector<[4]xi32>,70                            %c: vector<[4]xi32>,71                            %d: vector<[4]xi32>,72                            %e: vector<[4]xi32>,73                            %mask: vector<[4]xi1>)74                            -> vector<[4]xi32> {75  // CHECK: arm_sve.masked.muli {{.*}}: vector<[4]xi1>, vector<76  %0 = arm_sve.masked.muli %mask, %a, %b : vector<[4]xi1>,77                                           vector<[4]xi32>78  // CHECK: arm_sve.masked.addi {{.*}}: vector<[4]xi1>, vector<79  %1 = arm_sve.masked.addi %mask, %0, %c : vector<[4]xi1>,80                                           vector<[4]xi32>81  // CHECK: arm_sve.masked.subi {{.*}}: vector<[4]xi1>, vector<82  %2 = arm_sve.masked.subi %mask, %1, %d : vector<[4]xi1>,83                                           vector<[4]xi32>84  // CHECK: arm_sve.masked.divi_signed85  %3 = arm_sve.masked.divi_signed %mask, %2, %e : vector<[4]xi1>,86                                                  vector<[4]xi32>87  // CHECK: arm_sve.masked.divi_unsigned88  %4 = arm_sve.masked.divi_unsigned %mask, %3, %e : vector<[4]xi1>,89                                                    vector<[4]xi32>90  return %2 : vector<[4]xi32>91}92 93// -----94 95func.func @arm_sve_masked_arithf(%a: vector<[4]xf32>,96                            %b: vector<[4]xf32>,97                            %c: vector<[4]xf32>,98                            %d: vector<[4]xf32>,99                            %e: vector<[4]xf32>,100                            %mask: vector<[4]xi1>)101                            -> vector<[4]xf32> {102  // CHECK: arm_sve.masked.mulf {{.*}}: vector<[4]xi1>, vector<103  %0 = arm_sve.masked.mulf %mask, %a, %b : vector<[4]xi1>,104                                           vector<[4]xf32>105  // CHECK: arm_sve.masked.addf {{.*}}: vector<[4]xi1>, vector<106  %1 = arm_sve.masked.addf %mask, %0, %c : vector<[4]xi1>,107                                           vector<[4]xf32>108  // CHECK: arm_sve.masked.subf {{.*}}: vector<[4]xi1>, vector<109  %2 = arm_sve.masked.subf %mask, %1, %d : vector<[4]xi1>,110                                           vector<[4]xf32>111  // CHECK: arm_sve.masked.divf {{.*}}: vector<[4]xi1>, vector<112  %3 = arm_sve.masked.divf %mask, %2, %e : vector<[4]xi1>,113                                           vector<[4]xf32>114  return %3 : vector<[4]xf32>115}116 117// -----118 119func.func @arm_sve_convert_to_svbool(%a: vector<[1]xi1>,120                                     %b: vector<[2]xi1>,121                                     %c: vector<[4]xi1>,122                                     %d: vector<[8]xi1>,123                                     %e: vector<2x3x[1]xi1>,124                                     %f: vector<4x[2]xi1>,125                                     %g: vector<1x1x1x2x[4]xi1>,126                                     %h: vector<100x[8]xi1>) {127  // CHECK: arm_sve.convert_to_svbool %{{.*}} : vector<[1]xi1>128  %1 = arm_sve.convert_to_svbool %a : vector<[1]xi1>129 130  // CHECK: arm_sve.convert_to_svbool %{{.*}} : vector<[2]xi1>131  %2 = arm_sve.convert_to_svbool %b : vector<[2]xi1>132 133  // CHECK: arm_sve.convert_to_svbool %{{.*}} : vector<[4]xi1>134  %3 = arm_sve.convert_to_svbool %c : vector<[4]xi1>135 136  // CHECK: arm_sve.convert_to_svbool %{{.*}} : vector<[8]xi1>137  %4 = arm_sve.convert_to_svbool %d : vector<[8]xi1>138 139  // CHECK: arm_sve.convert_to_svbool %{{.*}} : vector<2x3x[1]xi1>140  %5 = arm_sve.convert_to_svbool %e : vector<2x3x[1]xi1>141 142  // CHECK: arm_sve.convert_to_svbool %{{.*}} : vector<4x[2]xi1>143  %6 = arm_sve.convert_to_svbool %f : vector<4x[2]xi1>144 145  // CHECK: arm_sve.convert_to_svbool %{{.*}} : vector<1x1x1x2x[4]xi1>146  %7 = arm_sve.convert_to_svbool %g : vector<1x1x1x2x[4]xi1>147 148  // CHECK: arm_sve.convert_to_svbool %{{.*}} : vector<100x[8]xi1>149  %8 = arm_sve.convert_to_svbool %h : vector<100x[8]xi1>150 151  return152}153 154// -----155 156func.func @arm_sve_convert_from_svbool(%a: vector<[16]xi1>,157                                       %b: vector<2x3x[16]xi1>,158                                       %c: vector<4x[16]xi1>,159                                       %d: vector<1x1x1x1x[16]xi1>,160                                       %e: vector<32x[16]xi1>) {161  // CHECK: arm_sve.convert_from_svbool %{{.*}} : vector<[1]xi1>162  %1 = arm_sve.convert_from_svbool %a : vector<[1]xi1>163 164  // CHECK: arm_sve.convert_from_svbool %{{.*}} : vector<[2]xi1>165  %2 = arm_sve.convert_from_svbool %a : vector<[2]xi1>166 167  // CHECK: arm_sve.convert_from_svbool %{{.*}} : vector<[4]xi1>168  %3 = arm_sve.convert_from_svbool %a : vector<[4]xi1>169 170  // CHECK: arm_sve.convert_from_svbool %{{.*}} : vector<[8]xi1>171  %4 = arm_sve.convert_from_svbool %a : vector<[8]xi1>172 173  // CHECK: arm_sve.convert_from_svbool %{{.*}} : vector<2x3x[1]xi1>174  %5 = arm_sve.convert_from_svbool %b : vector<2x3x[1]xi1>175 176  // CHECK: arm_sve.convert_from_svbool %{{.*}} : vector<4x[2]xi1>177  %6 = arm_sve.convert_from_svbool %c : vector<4x[2]xi1>178 179  // CHECK: arm_sve.convert_from_svbool %{{.*}} : vector<1x1x1x1x[4]xi1>180  %7 = arm_sve.convert_from_svbool %d : vector<1x1x1x1x[4]xi1>181 182  // CHECK: arm_sve.convert_from_svbool %{{.*}} : vector<32x[8]xi1>183  %8 = arm_sve.convert_from_svbool %e : vector<32x[8]xi1>184 185  return186}187 188// -----189 190func.func @arm_sve_zip_x2(191  %v1: vector<[2]xi64>,192  %v2: vector<[2]xf64>,193  %v3: vector<[4]xi32>,194  %v4: vector<[4]xf32>,195  %v5: vector<[8]xi16>,196  %v6: vector<[8]xf16>,197  %v7: vector<[8]xbf16>,198  %v8: vector<[16]xi8>199) {200  // CHECK: arm_sve.zip.x2 %{{.*}} : vector<[2]xi64>201  %a1, %b1 = arm_sve.zip.x2 %v1, %v1 : vector<[2]xi64>202  // CHECK: arm_sve.zip.x2 %{{.*}} : vector<[2]xf64>203  %a2, %b2 = arm_sve.zip.x2 %v2, %v2 : vector<[2]xf64>204  // CHECK: arm_sve.zip.x2 %{{.*}} : vector<[4]xi32>205  %a3, %b3 = arm_sve.zip.x2 %v3, %v3 : vector<[4]xi32>206  // CHECK: arm_sve.zip.x2 %{{.*}} : vector<[4]xf32>207  %a4, %b4 = arm_sve.zip.x2 %v4, %v4 : vector<[4]xf32>208  // CHECK: arm_sve.zip.x2 %{{.*}} : vector<[8]xi16>209  %a5, %b5 = arm_sve.zip.x2 %v5, %v5 : vector<[8]xi16>210  // CHECK: arm_sve.zip.x2 %{{.*}} : vector<[8]xf16>211  %a6, %b6 = arm_sve.zip.x2 %v6, %v6 : vector<[8]xf16>212  // CHECK: arm_sve.zip.x2 %{{.*}} : vector<[8]xbf16>213  %a7, %b7 = arm_sve.zip.x2 %v7, %v7 : vector<[8]xbf16>214  // CHECK: arm_sve.zip.x2 %{{.*}} : vector<[16]xi8>215  %a8, %b8 = arm_sve.zip.x2 %v8, %v8 : vector<[16]xi8>216  return217}218 219// -----220 221func.func @arm_sve_zip_x4(222  %v1: vector<[2]xi64>,223  %v2: vector<[2]xf64>,224  %v3: vector<[4]xi32>,225  %v4: vector<[4]xf32>,226  %v5: vector<[8]xi16>,227  %v6: vector<[8]xf16>,228  %v7: vector<[8]xbf16>,229  %v8: vector<[16]xi8>230) {231  // CHECK: arm_sve.zip.x4 %{{.*}} : vector<[2]xi64>232  %a1, %b1, %c1, %d1 = arm_sve.zip.x4 %v1, %v1, %v1, %v1 : vector<[2]xi64>233  // CHECK: arm_sve.zip.x4 %{{.*}} : vector<[2]xf64>234  %a2, %b2, %c2, %d2 = arm_sve.zip.x4 %v2, %v2, %v2, %v2 : vector<[2]xf64>235  // CHECK: arm_sve.zip.x4 %{{.*}} : vector<[4]xi32>236  %a3, %b3, %c3, %d3 = arm_sve.zip.x4 %v3, %v3, %v3, %v3 : vector<[4]xi32>237  // CHECK: arm_sve.zip.x4 %{{.*}} : vector<[4]xf32>238  %a4, %b4, %c4, %d4 = arm_sve.zip.x4 %v4, %v4, %v4, %v4 : vector<[4]xf32>239  // CHECK: arm_sve.zip.x4 %{{.*}} : vector<[8]xi16>240  %a5, %b5, %c5, %d5 = arm_sve.zip.x4 %v5, %v5, %v5, %v5 : vector<[8]xi16>241  // CHECK: arm_sve.zip.x4 %{{.*}} : vector<[8]xf16>242  %a6, %b6, %c6, %d6 = arm_sve.zip.x4 %v6, %v6, %v6, %v6 : vector<[8]xf16>243  // CHECK: arm_sve.zip.x4 %{{.*}} : vector<[8]xbf16>244  %a7, %b7, %c7, %d7 = arm_sve.zip.x4 %v7, %v7, %v7, %v7 : vector<[8]xbf16>245  // CHECK: arm_sve.zip.x4 %{{.*}} : vector<[16]xi8>246  %a8, %b8, %c8, %d8 = arm_sve.zip.x4 %v8, %v8, %v8, %v8 : vector<[16]xi8>247  return248}249 250// -----251 252func.func @arm_sve_psel(253  %p0: vector<[2]xi1>,254  %p1: vector<[4]xi1>,255  %p2: vector<[8]xi1>,256  %p3: vector<[16]xi1>,257  %index: index258) {259  // CHECK: arm_sve.psel %{{.*}}, %{{.*}}[%{{.*}}] : vector<[2]xi1>, vector<[2]xi1>260  %0 = arm_sve.psel %p0, %p0[%index] : vector<[2]xi1>, vector<[2]xi1>261  // CHECK: arm_sve.psel %{{.*}}, %{{.*}}[%{{.*}}] : vector<[4]xi1>, vector<[4]xi1>262  %1 = arm_sve.psel %p1, %p1[%index] : vector<[4]xi1>, vector<[4]xi1>263  // CHECK: arm_sve.psel %{{.*}}, %{{.*}}[%{{.*}}] : vector<[8]xi1>, vector<[8]xi1>264  %2 = arm_sve.psel %p2, %p2[%index] : vector<[8]xi1>, vector<[8]xi1>265  // CHECK: arm_sve.psel %{{.*}}, %{{.*}}[%{{.*}}] : vector<[16]xi1>, vector<[16]xi1>266  %3 = arm_sve.psel %p3, %p3[%index] : vector<[16]xi1>, vector<[16]xi1>267  /// Some mixed predicate type examples:268  // CHECK: arm_sve.psel %{{.*}}, %{{.*}}[%{{.*}}] : vector<[2]xi1>, vector<[4]xi1>269  %4 = arm_sve.psel %p0, %p1[%index] : vector<[2]xi1>, vector<[4]xi1>270  // CHECK: arm_sve.psel %{{.*}}, %{{.*}}[%{{.*}}] : vector<[4]xi1>, vector<[8]xi1>271  %5 = arm_sve.psel %p1, %p2[%index] : vector<[4]xi1>, vector<[8]xi1>272  // CHECK: arm_sve.psel %{{.*}}, %{{.*}}[%{{.*}}] : vector<[8]xi1>, vector<[16]xi1>273  %6 = arm_sve.psel %p2, %p3[%index] : vector<[8]xi1>, vector<[16]xi1>274  // CHECK: arm_sve.psel %{{.*}}, %{{.*}}[%{{.*}}] : vector<[16]xi1>, vector<[2]xi1>275  %7 = arm_sve.psel %p3, %p0[%index] : vector<[16]xi1>, vector<[2]xi1>276  return277}278