In the case the function body is empty, shifting attributes as inserting argument...
authorRenaud-K <rkauffmann@nvidia.com>
Thu, 10 Nov 2022 01:55:03 +0000 (17:55 -0800)
committerRenaud-K <rkauffmann@nvidia.com>
Thu, 10 Nov 2022 16:53:34 +0000 (08:53 -0800)
Differential revision: https://reviews.llvm.org/D137757

flang/lib/Optimizer/Transforms/AbstractResult.cpp
flang/test/Fir/abstract-result-2.fir

index b295885..dcc6e90 100644 (file)
@@ -353,7 +353,12 @@ public:
         assert(func.getFunctionType() ==
                getNewFunctionType(funcTy, shouldBoxResult));
       } else {
+        llvm::SmallVector<mlir::DictionaryAttr> allArgs;
+        func.getAllArgAttrs(allArgs);
+        allArgs.insert(allArgs.begin(),
+                       mlir::DictionaryAttr::get(func->getContext()));
         func.setType(getNewFunctionType(funcTy, shouldBoxResult));
+        func.setAllArgAttrs(allArgs);
       }
     }
   }
index 3c13943..08b723b 100644 (file)
@@ -2,7 +2,8 @@
 
 // Check that the attributes are shifted along with their corresponding arguments
 
-//CHECK: func.func @_QMi8Pintrinsic_pack0(%arg0: !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, %arg1: !fir.box<!fir.array<?x?x?xi32>> {fir.bindc_name = "array"}, %arg2: !fir.ref<!fir.logical<4>> {fir.bindc_name = "mask"}, %arg3: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "vector", fir.optional})
+// CHECK-LABEL: func.func @_QMi8Pintrinsic_pack0
+// CHECK-SAME:(%arg0: !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, %arg1: !fir.box<!fir.array<?x?x?xi32>> {fir.bindc_name = "array"}, %arg2: !fir.ref<!fir.logical<4>> {fir.bindc_name = "mask"}, %arg3: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "vector", fir.optional})
 
 func.func @_QMi8Pintrinsic_pack0(%arg0: !fir.box<!fir.array<?x?x?xi32>> {fir.bindc_name = "array"}, %arg1: !fir.ref<!fir.logical<4>> {fir.bindc_name = "mask"}, %arg2: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "vector", fir.optional}) -> !fir.box<!fir.heap<!fir.array<?xi32>>> {
   %0 = fir.alloca !fir.box<!fir.heap<!fir.array<?xi32>>>
@@ -25,3 +26,7 @@ func.func @_QMi8Pintrinsic_pack0(%arg0: !fir.box<!fir.array<?x?x?xi32>> {fir.bin
   return %13 : !fir.box<!fir.heap<!fir.array<?xi32>>>
 }
 func.func private @_FortranAPack(!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.box<none>, !fir.box<none>) -> none attributes {fir.runtime}
+
+// CHECK-LABEL: func.func private @empty
+// CHECK-SAME:(!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, !fir.box<!fir.array<?x?x?xi32>> {fir.bindc_name = "array"}, !fir.ref<!fir.logical<4>> {fir.bindc_name = "mask"}, !fir.box<!fir.array<?xi32>> {fir.bindc_name = "vector", fir.optional})
+func.func private @empty(%arg0: !fir.box<!fir.array<?x?x?xi32>> {fir.bindc_name = "array"}, %arg1: !fir.ref<!fir.logical<4>> {fir.bindc_name = "mask"}, %arg2: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "vector", fir.optional}) -> !fir.box<!fir.heap<!fir.array<?xi32>>>