File tree Expand file tree Collapse file tree 3 files changed +32
-0
lines changed 
include/mlir/Dialect/MemRef/IR Expand file tree Collapse file tree 3 files changed +32
-0
lines changed Original file line number Diff line number Diff line change @@ -2333,6 +2333,7 @@ def MemRef_ViewOp : MemRef_Op<"view", [
23332333
23342334  let hasCanonicalizer = 1;
23352335  let hasVerifier = 1;
2336+   let hasFolder = 1;
23362337}
23372338
23382339//===----------------------------------------------------------------------===//
Original file line number Diff line number Diff line change @@ -3463,6 +3463,16 @@ LogicalResult ViewOp::verify() {
34633463
34643464Value ViewOp::getViewSource () { return  getSource (); }
34653465
3466+ OpFoldResult ViewOp::fold (FoldAdaptor adaptor) {
3467+   MemRefType sourceMemrefType = getSource ().getType ();
3468+   MemRefType resultMemrefType = getResult ().getType ();
3469+ 
3470+   if  (resultMemrefType == sourceMemrefType && resultMemrefType.hasStaticShape ())
3471+     return  getViewSource ();
3472+ 
3473+   return  {};
3474+ }
3475+ 
34663476namespace  {
34673477
34683478struct  ViewOpShapeFolder  : public  OpRewritePattern <ViewOp> {
Original file line number Diff line number Diff line change @@ -1208,3 +1208,24 @@ func.func @fold_assume_alignment_chain(%0: memref<128xf32>) -> memref<128xf32> {
12081208  // CHECK: return %[[ALIGN]] 
12091209  return  %2  : memref <128 xf32 >
12101210}
1211+ 
1212+ // ----- 
1213+ 
1214+ // CHECK-LABEL: func @fold_view_same_source_result_types 
1215+ func.func  @fold_view_same_source_result_types (%0:  memref <128 xi8 >) -> memref <128 xi8 > {
1216+   %c0  = arith.constant  0 : index 
1217+   // CHECK-NOT: memref.view 
1218+   %res  = memref.view  %0 [%c0 ][] : memref <128 xi8 > to  memref <128 xi8 >
1219+   return  %res  : memref <128 xi8 >
1220+ }
1221+ 
1222+ // ----- 
1223+ 
1224+ // CHECK-LABEL: func @non_fold_view_same_source_res_types 
1225+ //  CHECK-SAME:   %[[ARG0:[a-zA-Z0-9]+]] 
1226+ func.func  @non_fold_view_same_source_res_types (%0:  memref <?xi8 >, %arg0  : index ) -> memref <?xi8 > {
1227+   %c0  = arith.constant  0 : index 
1228+   // CHECK: memref.view 
1229+   %res  = memref.view  %0 [%c0 ][%arg0 ] : memref <?xi8 > to  memref <?xi8 >
1230+   return  %res  : memref <?xi8 >
1231+ }
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments