File: vectorize_reduction_2d.mlir

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (24 lines) | stat: -rw-r--r-- 1,041 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// RUN: mlir-opt %s -affine-super-vectorize="virtual-vector-size=32,256 test-fastest-varying=1,0 vectorize-reductions=true" -verify-diagnostics

// TODO: Vectorization of reduction loops along the reduction dimension is not
//       supported for higher-rank vectors yet, so we are just checking that an
//       error message is produced.

// expected-error@+1 {{Vectorizing reductions is supported only for 1-D vectors}}
func.func @vecdim_reduction_2d(%in: memref<256x512x1024xf32>, %out: memref<256xf32>) {
 %cst = arith.constant 0.000000e+00 : f32
 affine.for %i = 0 to 256 {
   %sum_j = affine.for %j = 0 to 512 iter_args(%red_iter_j = %cst) -> (f32) {
     %sum_k = affine.for %k = 0 to 1024 iter_args(%red_iter_k = %cst) -> (f32) {
       %ld = affine.load %in[%i, %j, %k] : memref<256x512x1024xf32>
       %add = arith.addf %red_iter_k, %ld : f32
       affine.yield %add : f32
     }
     %add = arith.addf %red_iter_j, %sum_k : f32
     affine.yield %add : f32
   }
   affine.store %sum_j, %out[%i] : memref<256xf32>
 }
 return
}