@@ -424,6 +424,36 @@ util.func public @ElideRedundantTransfer(%operand: tensor<4x?xf32>, %dim: index)
424
424
425
425
// -----
426
426
427
+ // CHECK-LABEL: @ElideChainedTransferTwoTransfers
428
+ // CHECK-SAME: (%[[OPERAND:.+]]: tensor<1xf16>)
429
+ util.func public @ElideChainedTransferTwoTransfers (%operand: tensor <1 xf16 >) -> tensor <1 xf16 > {
430
+ // CHECK-NOT: flow.tensor.transfer
431
+ %redundant = flow.tensor.transfer %operand : tensor <1 xf16 > to " target1"
432
+ // CHECK: %[[RESULT:.+]] = flow.tensor.transfer %[[OPERAND]]
433
+ %result = flow.tensor.transfer %redundant : tensor <1 xf16 > to " target2"
434
+ // CHECK-NEXT: util.return %[[RESULT]]
435
+ util.return %result : tensor <1 xf16 >
436
+ }
437
+
438
+ // -----
439
+
440
+ // CHECK-LABEL: @ElideChainedTransferFourTransfers
441
+ // CHECK-SAME: (%[[OPERAND:.+]]: tensor<1xf16>)
442
+ util.func public @ElideChainedTransferFourTransfers (%operand: tensor <1 xf16 >) -> tensor <1 xf16 > {
443
+ // CHECK-NOT: flow.tensor.transfer
444
+ %redundant = flow.tensor.transfer %operand : tensor <1 xf16 > to " target1"
445
+ // CHECK-NOT: flow.tensor.transfer
446
+ %redundant2 = flow.tensor.transfer %redundant : tensor <1 xf16 > to " target2"
447
+ // CHECK-NOT: flow.tensor.transfer
448
+ %redundant3 = flow.tensor.transfer %redundant2 : tensor <1 xf16 > to " target3"
449
+ // CHECK: %[[RESULT:.+]] = flow.tensor.transfer %[[OPERAND]]
450
+ %result = flow.tensor.transfer %redundant3 : tensor <1 xf16 > to " target4"
451
+ // CHECK-NEXT: util.return %[[RESULT]]
452
+ util.return %result : tensor <1 xf16 >
453
+ }
454
+
455
+ // -----
456
+
427
457
// CHECK-LABEL: @sliceConst0D
428
458
util.func public @sliceConst0D () -> tensor <i32 > {
429
459
%0 = arith.constant dense <0 > : tensor <i32 >
0 commit comments