// RUN: mlir-opt %s -test-affine-reify-value-bounds -verify-diagnostics \ // RUN: -split-input-file | FileCheck %s // CHECK-LABEL: func @linalg_fill( // CHECK-SAME: %[[t:.*]]: tensor // CHECK: %[[c0:.*]] = arith.constant 0 : index // CHECK: %[[dim:.*]] = tensor.dim %[[t]], %[[c0]] // CHECK: return %[[dim]] func.func @linalg_fill(%t: tensor, %f: f32) -> index { %0 = linalg.fill ins(%f : f32) outs(%t : tensor) -> tensor %1 = "test.reify_bound"(%0) {dim = 0} : (tensor) -> (index) return %1 : index } // ----- #accesses = [ affine_map<(i, j, k) -> (j, i)>, affine_map<(i, j, k) -> (i, k, i + j)> ] #trait = { indexing_maps = #accesses, iterator_types = ["parallel", "parallel", "parallel"] } // CHECK-LABEL: func @linalg_index( // CHECK-SAME: %[[arg0:.*]]: memref func.func @linalg_index(%arg0: memref, %arg1: memref) { linalg.generic #trait ins(%arg0 : memref) outs(%arg1 : memref) { ^bb(%a: f32, %b: f32): // CHECK: %[[c1:.*]] = arith.constant 1 : index // CHECK: %[[ub_0:.*]] = memref.dim %[[arg0]], %[[c1]] // CHECK: "test.some_use"(%[[ub_0]]) %0 = linalg.index 0 : index %ub_0 = "test.reify_bound"(%0) {type = "UB"} : (index) -> (index) "test.some_use"(%ub_0) : (index) -> () // CHECK: %[[c0:.*]] = arith.constant 0 : index // CHECK: "test.some_use"(%[[c0]]) %lb_0 = "test.reify_bound"(%0) {type = "LB"} : (index) -> (index) "test.some_use"(%lb_0) : (index) -> () // CHECK: %[[c0:.*]] = arith.constant 0 : index // CHECK: %[[ub_1:.*]] = memref.dim %[[arg0]], %[[c0]] // CHECK: "test.some_use"(%[[ub_1]]) %1 = linalg.index 1 : index %ub_1 = "test.reify_bound"(%1) {type = "UB"} : (index) -> (index) "test.some_use"(%ub_1) : (index) -> () // CHECK: %[[ub_2:.*]] = arith.constant 5 : index // CHECK: "test.some_use"(%[[ub_2]]) %2 = linalg.index 2 : index %ub_2 = "test.reify_bound"(%2) {type = "UB"} : (index) -> (index) "test.some_use"(%ub_2) : (index) -> () linalg.yield %b : f32 } return }