| // RUN: mlir-opt %s -transform-preload-library='transform-library-paths=%p/td/unroll-elements.mlir' \ |
| // RUN: -transform-interpreter=entry-point=unroll_to_elements | FileCheck %s |
| |
| //===----------------------------------------------------------------------===// |
| // Test UnrollToElements. |
| //===----------------------------------------------------------------------===// |
| |
| // 1-D vector.from_elements should not be unrolled. |
| |
| // CHECK-LABEL: func.func @negative_unroll_to_elements_1d( |
| // CHECK-SAME: %[[ARG0:.+]]: vector<2xf32> |
| // CHECK: %[[RES:.+]]:2 = vector.to_elements %[[ARG0]] : vector<2xf32> |
| // CHECK: return %[[RES]]#0, %[[RES]]#1 |
| func.func @negative_unroll_to_elements_1d(%arg0: vector<2xf32>) -> (f32, f32) { |
| %0:2 = vector.to_elements %arg0 : vector<2xf32> |
| return %0#0, %0#1 : f32, f32 |
| } |
| |
| // ----- |
| |
| // CHECK-LABEL: func.func @unroll_to_elements_2d( |
| // CHECK-SAME: %[[ARG0:.+]]: vector<2x2xf32> |
| // CHECK: %[[VEC0:.+]] = vector.extract %[[ARG0]][0] : vector<2xf32> from vector<2x2xf32> |
| // CHECK: %[[VEC1:.+]] = vector.extract %[[ARG0]][1] : vector<2xf32> from vector<2x2xf32> |
| // CHECK: %[[RES0:.+]]:2 = vector.to_elements %[[VEC0]] : vector<2xf32> |
| // CHECK: %[[RES1:.+]]:2 = vector.to_elements %[[VEC1]] : vector<2xf32> |
| // CHECK: return %[[RES0]]#0, %[[RES0]]#1, %[[RES1]]#0, %[[RES1]]#1 |
| func.func @unroll_to_elements_2d(%arg0: vector<2x2xf32>) -> (f32, f32, f32, f32) { |
| %0:4 = vector.to_elements %arg0 : vector<2x2xf32> |
| return %0#0, %0#1, %0#2, %0#3 : f32, f32, f32, f32 |
| } |