@@ -18,11 +18,13 @@ func.func @hoist_vector_transfer_pairs(
1818 %val: index , %lb : index , %ub : index , %step: index , %cmp: i1 ) {
1919 %c0 = arith.constant 0 : index
2020 %cst = arith.constant 0.0 : f32
21+ %assume_align = memref.assume_alignment %memref0 , 64 : memref <?x?xf32 >
2122
2223// CHECK: vector.transfer_read %{{.*}} : memref<?x?xf32>, vector<1xf32>
23- // CHECK: scf.for %[[I:.*]] = %[[LB]] to %[[UB]] step %[[STEP]] iter_args({{.*}}) -> (vector<1xf32>) {
24+ // CHECK: vector.transfer_read %{{.*}} : memref<?x?xf32>, vector<1xf32>
25+ // CHECK: scf.for %[[I:.*]] = %[[LB]] to %[[UB]] step %[[STEP]] iter_args({{.*}}) -> (vector<1xf32>, vector<1xf32>) {
2426// CHECK: vector.transfer_read %{{.*}} : memref<?x?xf32>, vector<2xf32>
25- // CHECK: scf.for %[[J:.*]] = %[[LB]] to %[[UB]] step %[[STEP]] iter_args({{.*}}) -> (vector<1xf32>, vector<2xf32>) {
27+ // CHECK: scf.for %[[J:.*]] = %[[LB]] to %[[UB]] step %[[STEP]] iter_args({{.*}}) -> (vector<1xf32>, vector<2xf32>, vector<1xf32> ) {
2628// CHECK: vector.transfer_read %{{.*}} : memref<?x?xf32>, vector<3xf32>
2729// CHECK: vector.transfer_read %{{.*}} : memref<?x?xf32>, vector<4xf32>
2830// CHECK: "some_crippling_use"(%[[MEMREF4]]) : (memref<?x?xf32>) -> ()
@@ -43,6 +45,7 @@ func.func @hoist_vector_transfer_pairs(
4345// CHECK: scf.yield {{.*}} : vector<1xf32>
4446// CHECK: }
4547// CHECK: vector.transfer_write %{{.*}} : vector<1xf32>, memref<?x?xf32>
48+ // CHECK: vector.transfer_write %{{.*}} : vector<1xf32>, memref<?x?xf32>
4649// CHECK: "unrelated_use"(%[[MEMREF1]]) : (memref<?x?xf32>) -> ()
4750 scf.for %i = %lb to %ub step %step {
4851 scf.for %j = %lb to %ub step %step {
@@ -53,19 +56,22 @@ func.func @hoist_vector_transfer_pairs(
5356 " some_crippling_use" (%memref4 ) : (memref <?x?xf32 >) -> ()
5457 %r4 = vector.transfer_read %memref4 [%c0 , %c0 ], %cst: memref <?x?xf32 >, vector <5 xf32 >
5558 %r5 = vector.transfer_read %memref5 [%c0 , %c0 ], %cst: memref <?x?xf32 >, vector <6 xf32 >
59+ %r6 = vector.transfer_read %assume_align [%c0 , %c0 ], %cst: memref <?x?xf32 >, vector <1 xf32 >
5660 " some_crippling_use" (%memref5 ) : (memref <?x?xf32 >) -> ()
5761 %u0 = " some_use" (%r0 ) : (vector <1 xf32 >) -> vector <1 xf32 >
5862 %u1 = " some_use" (%r1 ) : (vector <2 xf32 >) -> vector <2 xf32 >
5963 %u2 = " some_use" (%memref2 , %r2 ) : (memref <?x?xf32 >, vector <3 xf32 >) -> vector <3 xf32 >
6064 %u3 = " some_use" (%r3 ) : (vector <4 xf32 >) -> vector <4 xf32 >
6165 %u4 = " some_use" (%r4 ) : (vector <5 xf32 >) -> vector <5 xf32 >
6266 %u5 = " some_use" (%r5 ) : (vector <6 xf32 >) -> vector <6 xf32 >
67+ %u6 = " some_use" (%r6 ) : (vector <1 xf32 >) -> vector <1 xf32 >
6368 vector.transfer_write %u0 , %memref1 [%c0 , %c0 ] : vector <1 xf32 >, memref <?x?xf32 >
6469 vector.transfer_write %u1 , %memref0 [%i , %i ] : vector <2 xf32 >, memref <?x?xf32 >
6570 vector.transfer_write %u2 , %memref2 [%c0 , %c0 ] : vector <3 xf32 >, memref <?x?xf32 >
6671 vector.transfer_write %u3 , %memref3 [%c0 , %c0 ] : vector <4 xf32 >, memref <?x?xf32 >
6772 vector.transfer_write %u4 , %memref4 [%c0 , %c0 ] : vector <5 xf32 >, memref <?x?xf32 >
6873 vector.transfer_write %u5 , %memref5 [%c0 , %c0 ] : vector <6 xf32 >, memref <?x?xf32 >
74+ vector.transfer_write %u6 , %assume_align [%c0 , %c0 ] : vector <1 xf32 >, memref <?x?xf32 >
6975 " some_crippling_use" (%memref3 ) : (memref <?x?xf32 >) -> ()
7076 }
7177 " unrelated_use" (%memref0 ) : (memref <?x?xf32 >) -> ()
0 commit comments