@@ -2409,146 +2409,6 @@ func.func @topk() {
24092409
24102410// -----
24112411
2412- #pipeline_layout = #hal.pipeline.layout <bindings = [
2413- #hal.pipeline.binding <storage_buffer >,
2414- #hal.pipeline.binding <storage_buffer >
2415- ]>
2416- func.func @iree_linalg_ext_pack () {
2417- %c0 = arith.constant 0 : index
2418- %c0_i32 = arith.constant 0 : i32
2419- %0 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (0 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <readonly :tensor <4 x4 xi32 >>
2420- %1 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (1 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <2 x2 x3 x3 xi32 >>
2421- %2 = iree_tensor_ext.dispatch.tensor.load %1 , offsets = [0 , 0 , 0 , 0 ], sizes = [2 , 2 , 3 , 3 ], strides = [1 , 1 , 1 , 1 ] : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <2 x2 x3 x3 xi32 >> -> tensor <2 x2 x3 x3 xi32 >
2422- %3 = iree_tensor_ext.dispatch.tensor.load %0 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : !iree_tensor_ext.dispatch.tensor <readonly :tensor <4 x4 xi32 >> -> tensor <4 x4 xi32 >
2423- %4 = iree_linalg_ext.pack %3 padding_value (%c0_i32 : i32 ) inner_dims_pos = [0 , 1 ] inner_tiles = [3 , 3 ] into %2 : (tensor <4 x4 xi32 > tensor <2 x2 x3 x3 xi32 >) -> tensor <2 x2 x3 x3 xi32 >
2424- iree_tensor_ext.dispatch.tensor.store %4 , %1 , offsets = [0 , 0 , 0 , 0 ], sizes = [2 , 2 , 3 , 3 ], strides = [1 , 1 , 1 , 1 ] : tensor <2 x2 x3 x3 xi32 > -> !iree_tensor_ext.dispatch.tensor <writeonly :tensor <2 x2 x3 x3 xi32 >>
2425- return
2426- }
2427- // CHECK: func.func @iree_linalg_ext_pack
2428- // CHECK-DAG: %[[PAD:.+]] = arith.constant 0 : i32
2429- // CHECK-DAG: %[[IN:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(0) alignment(64) offset(%c0) : memref<4x4xi32, #hal.descriptor_type<storage_buffer>>
2430- // CHECK-DAG: %[[OUT:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(1) alignment(64) offset(%c0) : memref<2x2x3x3xi32, #hal.descriptor_type<storage_buffer>>
2431- // CHECK: iree_linalg_ext.pack %[[IN]]
2432- // CHECK-SAME: padding_value(%[[PAD]] : i32)
2433- // CHECK-SAME: inner_dims_pos = [0, 1] inner_tiles = [3, 3] into %[[OUT]]
2434-
2435- // -----
2436-
2437- #pipeline_layout = #hal.pipeline.layout <bindings = [
2438- #hal.pipeline.binding <storage_buffer >,
2439- #hal.pipeline.binding <storage_buffer >
2440- ]>
2441- func.func @iree_linalg_ext_unpack () {
2442- %c0 = arith.constant 0 : index
2443- %0 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (0 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2 x2 x2 x2 xi32 >>
2444- %1 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (1 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >>
2445- %2 = iree_tensor_ext.dispatch.tensor.load %1 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >> -> tensor <4 x4 xi32 >
2446- %3 = iree_tensor_ext.dispatch.tensor.load %0 , offsets = [0 , 0 , 0 , 0 ], sizes = [2 , 2 , 2 , 2 ], strides = [1 , 1 , 1 , 1 ] : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2 x2 x2 x2 xi32 >> -> tensor <2 x2 x2 x2 xi32 >
2447- %4 = iree_linalg_ext.unpack %3 inner_dims_pos = [0 , 1 ] inner_tiles = [2 , 2 ] into %2 : (tensor <2 x2 x2 x2 xi32 > tensor <4 x4 xi32 >) -> tensor <4 x4 xi32 >
2448- iree_tensor_ext.dispatch.tensor.store %4 , %1 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : tensor <4 x4 xi32 > -> !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >>
2449- return
2450- }
2451- // CHECK: func.func @iree_linalg_ext_unpack
2452- // CHECK-DAG: %[[IN:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(0) alignment(64) offset(%c0) : memref<2x2x2x2xi32, #hal.descriptor_type<storage_buffer>>
2453- // CHECK-DAG: %[[OUT:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(1) alignment(64) offset(%c0) : memref<4x4xi32, #hal.descriptor_type<storage_buffer>>
2454- // CHECK: iree_linalg_ext.unpack %[[IN]]
2455- // CHECK-SAME: inner_dims_pos = [0, 1] inner_tiles = [2, 2] into %[[OUT]]
2456-
2457- // -----
2458-
2459- #pipeline_layout = #hal.pipeline.layout <bindings = [
2460- #hal.pipeline.binding <storage_buffer >,
2461- #hal.pipeline.binding <storage_buffer >
2462- ]>
2463- func.func @iree_linalg_ext_unpack_fully_dynamic () {
2464- %c0 = arith.constant 0 : index
2465- %inner_d0 = util.unfoldable_constant 2 : index
2466- %0 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (0 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2 x2 x2 x2 xi32 >>
2467- %1 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (1 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >>
2468- %2 = iree_tensor_ext.dispatch.tensor.load %1 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >> -> tensor <4 x4 xi32 >
2469- %3 = iree_tensor_ext.dispatch.tensor.load %0 , offsets = [0 , 0 , 0 , 0 ], sizes = [2 , 2 , %inner_d0 , %inner_d0 ], strides = [1 , 1 , 1 , 1 ] : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2 x2 x2 x2 xi32 >> -> tensor <2 x2 x?x?xi32 >
2470- %4 = iree_linalg_ext.unpack %3 inner_dims_pos = [0 , 1 ] inner_tiles = [%inner_d0 , %inner_d0 ] into %2 : (tensor <2 x2 x?x?xi32 > tensor <4 x4 xi32 >) -> tensor <4 x4 xi32 >
2471- iree_tensor_ext.dispatch.tensor.store %4 , %1 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : tensor <4 x4 xi32 > -> !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >>
2472- return
2473- }
2474-
2475- // CHECK: func.func @iree_linalg_ext_unpack_fully_dynamic
2476- // CHECK-DAG: %[[D:.+]] = util.optimization_barrier %c2 : index
2477- // CHECK: iree_linalg_ext.unpack
2478- // CHECK-SAME: inner_dims_pos = [0, 1] inner_tiles = [%[[D]], %[[D]]]
2479-
2480- // -----
2481-
2482- #pipeline_layout = #hal.pipeline.layout <bindings = [
2483- #hal.pipeline.binding <storage_buffer >,
2484- #hal.pipeline.binding <storage_buffer >
2485- ]>
2486- func.func @tensor_pack () {
2487- %c0 = arith.constant 0 : index
2488- %c0_i32 = arith.constant 0 : i32
2489- %0 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (0 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <readonly :tensor <4 x4 xi32 >>
2490- %1 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (1 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <2 x2 x3 x3 xi32 >>
2491- %2 = iree_tensor_ext.dispatch.tensor.load %1 , offsets = [0 , 0 , 0 , 0 ], sizes = [2 , 2 , 3 , 3 ], strides = [1 , 1 , 1 , 1 ] : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <2 x2 x3 x3 xi32 >> -> tensor <2 x2 x3 x3 xi32 >
2492- %3 = iree_tensor_ext.dispatch.tensor.load %0 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : !iree_tensor_ext.dispatch.tensor <readonly :tensor <4 x4 xi32 >> -> tensor <4 x4 xi32 >
2493- %4 = linalg.pack %3 padding_value (%c0_i32 : i32 ) inner_dims_pos = [0 , 1 ] inner_tiles = [3 , 3 ] into %2 : tensor <4 x4 xi32 > -> tensor <2 x2 x3 x3 xi32 >
2494- iree_tensor_ext.dispatch.tensor.store %4 , %1 , offsets = [0 , 0 , 0 , 0 ], sizes = [2 , 2 , 3 , 3 ], strides = [1 , 1 , 1 , 1 ] : tensor <2 x2 x3 x3 xi32 > -> !iree_tensor_ext.dispatch.tensor <writeonly :tensor <2 x2 x3 x3 xi32 >>
2495- return
2496- }
2497- // CHECK: func.func @tensor_pack
2498- // CHECK-DAG: %[[PAD:.+]] = arith.constant 0 : i32
2499- // CHECK-DAG: %[[IN:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(0) alignment(64) offset(%c0) : memref<4x4xi32, #hal.descriptor_type<storage_buffer>>
2500- // CHECK-DAG: %[[OUT:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(1) alignment(64) offset(%c0) : memref<2x2x3x3xi32, #hal.descriptor_type<storage_buffer>>
2501- // CHECK: iree_linalg_ext.pack %[[IN]]
2502- // CHECK-SAME: padding_value(%[[PAD]] : i32)
2503- // CHECK-SAME: inner_dims_pos = [0, 1] inner_tiles = [3, 3] into %[[OUT]]
2504-
2505- // -----
2506-
2507- #pipeline_layout = #hal.pipeline.layout <bindings = [
2508- #hal.pipeline.binding <storage_buffer >,
2509- #hal.pipeline.binding <storage_buffer >
2510- ]>
2511- func.func @tensor_unpack () {
2512- %c0 = arith.constant 0 : index
2513- %0 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (0 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2 x2 x2 x2 xi32 >>
2514- %1 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (1 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >>
2515- %2 = iree_tensor_ext.dispatch.tensor.load %1 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >> -> tensor <4 x4 xi32 >
2516- %3 = iree_tensor_ext.dispatch.tensor.load %0 , offsets = [0 , 0 , 0 , 0 ], sizes = [2 , 2 , 2 , 2 ], strides = [1 , 1 , 1 , 1 ] : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2 x2 x2 x2 xi32 >> -> tensor <2 x2 x2 x2 xi32 >
2517- %4 = linalg.unpack %3 inner_dims_pos = [0 , 1 ] inner_tiles = [2 , 2 ] into %2 : tensor <2 x2 x2 x2 xi32 > -> tensor <4 x4 xi32 >
2518- iree_tensor_ext.dispatch.tensor.store %4 , %1 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : tensor <4 x4 xi32 > -> !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >>
2519- return
2520- }
2521- // CHECK: func.func @tensor_unpack
2522- // CHECK-DAG: %[[IN:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(0) alignment(64) offset(%c0) : memref<2x2x2x2xi32, #hal.descriptor_type<storage_buffer>>
2523- // CHECK-DAG: %[[OUT:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(1) alignment(64) offset(%c0) : memref<4x4xi32, #hal.descriptor_type<storage_buffer>>
2524- // CHECK: iree_linalg_ext.unpack %[[IN]]
2525- // CHECK-SAME: inner_dims_pos = [0, 1] inner_tiles = [2, 2] into %[[OUT]]
2526-
2527- // -----
2528-
2529- #pipeline_layout = #hal.pipeline.layout <bindings = [
2530- #hal.pipeline.binding <storage_buffer >,
2531- #hal.pipeline.binding <storage_buffer >
2532- ]>
2533- func.func @tensor_unpack_fully_dynamic () {
2534- %c0 = arith.constant 0 : index
2535- %inner_d0 = util.unfoldable_constant 2 : index
2536- %0 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (0 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2 x2 x2 x2 xi32 >>
2537- %1 = hal.interface.binding.subspan layout (#pipeline_layout ) binding (1 ) alignment (64 ) offset (%c0 ) : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >>
2538- %2 = iree_tensor_ext.dispatch.tensor.load %1 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >> -> tensor <4 x4 xi32 >
2539- %3 = iree_tensor_ext.dispatch.tensor.load %0 , offsets = [0 , 0 , 0 , 0 ], sizes = [2 , 2 , %inner_d0 , %inner_d0 ], strides = [1 , 1 , 1 , 1 ] : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2 x2 x2 x2 xi32 >> -> tensor <2 x2 x?x?xi32 >
2540- %4 = linalg.unpack %3 inner_dims_pos = [0 , 1 ] inner_tiles = [%inner_d0 , %inner_d0 ] into %2 : tensor <2 x2 x?x?xi32 > -> tensor <4 x4 xi32 >
2541- iree_tensor_ext.dispatch.tensor.store %4 , %1 , offsets = [0 , 0 ], sizes = [4 , 4 ], strides = [1 , 1 ] : tensor <4 x4 xi32 > -> !iree_tensor_ext.dispatch.tensor <writeonly :tensor <4 x4 xi32 >>
2542- return
2543- }
2544-
2545- // CHECK: func.func @tensor_unpack_fully_dynamic
2546- // CHECK-DAG: %[[D:.+]] = util.optimization_barrier %c2 : index
2547- // CHECK: iree_linalg_ext.unpack
2548- // CHECK-SAME: inner_dims_pos = [0, 1] inner_tiles = [%[[D]], %[[D]]]
2549-
2550- // -----
2551-
25522412#pipeline_layout = #hal.pipeline.layout <bindings = [
25532413 #hal.pipeline.binding <storage_buffer >,
25542414 #hal.pipeline.binding <storage_buffer >
0 commit comments