[flang-commits] [flang] 80e5ff7 - [flang] add hlfir.no_reassoc definition

Jean Perier via flang-commits flang-commits at lists.llvm.org
Wed Dec 7 05:45:23 PST 2022


Author: Jean Perier
Date: 2022-12-07T14:44:35+01:00
New Revision: 80e5ff775f8b67a3318e5f7a9fca52d17f0a43b9

URL: https://github.com/llvm/llvm-project/commit/80e5ff775f8b67a3318e5f7a9fca52d17f0a43b9
DIFF: https://github.com/llvm/llvm-project/commit/80e5ff775f8b67a3318e5f7a9fca52d17f0a43b9.diff

LOG: [flang] add hlfir.no_reassoc definition

Same as fir.no_reassoc but accepts hlfir.expr type. It is needed because
FIR operation can only produce FIR types, and I do not want to change
that for now.

Depends on D139519

Differential Revision: https://reviews.llvm.org/D139520

Added: 
    flang/test/HLFIR/no_reassoc.fir

Modified: 
    flang/include/flang/Optimizer/HLFIR/HLFIROps.h
    flang/include/flang/Optimizer/HLFIR/HLFIROps.td

Removed: 
    


################################################################################
diff  --git a/flang/include/flang/Optimizer/HLFIR/HLFIROps.h b/flang/include/flang/Optimizer/HLFIR/HLFIROps.h
index 8e4d5a9d7f49..33530d12e617 100644
--- a/flang/include/flang/Optimizer/HLFIR/HLFIROps.h
+++ b/flang/include/flang/Optimizer/HLFIR/HLFIROps.h
@@ -13,6 +13,7 @@
 #include "flang/Optimizer/Dialect/FIRType.h"
 #include "flang/Optimizer/Dialect/FortranVariableInterface.h"
 #include "flang/Optimizer/HLFIR/HLFIRDialect.h"
+#include "mlir/Interfaces/InferTypeOpInterface.h"
 #include "mlir/Interfaces/SideEffectInterfaces.h"
 
 #define GET_OP_CLASSES

diff  --git a/flang/include/flang/Optimizer/HLFIR/HLFIROps.td b/flang/include/flang/Optimizer/HLFIR/HLFIROps.td
index 6bc744b8d312..4569049b2bc1 100644
--- a/flang/include/flang/Optimizer/HLFIR/HLFIROps.td
+++ b/flang/include/flang/Optimizer/HLFIR/HLFIROps.td
@@ -318,5 +318,18 @@ def hlfir_AsExprOp : hlfir_Op<"as_expr", []> {
   let builders = [OpBuilder<(ins "mlir::Value":$var)>];
 }
 
+def hlfir_NoReassocOp : hlfir_Op<"no_reassoc", [NoMemoryEffect, SameOperandsAndResultType]> {
+  let summary = "synthetic op to prevent reassociation";
+
+  let description = [{
+    Same as fir.reassoc, except it accepts hlfir.expr arguments.
+  }];
+
+  let arguments = (ins AnyFortranEntity:$val);
+  let results = (outs AnyFortranEntity);
+
+  let assemblyFormat = "$val attr-dict `:` type($val)";
+}
+
 
 #endif // FORTRAN_DIALECT_HLFIR_OPS

diff  --git a/flang/test/HLFIR/no_reassoc.fir b/flang/test/HLFIR/no_reassoc.fir
new file mode 100644
index 000000000000..b30119b9d618
--- /dev/null
+++ b/flang/test/HLFIR/no_reassoc.fir
@@ -0,0 +1,27 @@
+// Test hlfir.no_reassoc operation parse, verify (no errors), and unparse.
+
+// RUN: fir-opt %s | fir-opt | FileCheck %s
+
+func.func @no_reassoc_value(%arg0: i32) {
+  %0 = hlfir.no_reassoc %arg0 : i32
+  return
+}
+// CHECK-LABEL: func.func @no_reassoc_value(
+// CHECK-SAME:    %[[VAL_0:.*]]: i32) {
+// CHECK:   hlfir.no_reassoc %[[VAL_0]] : i32
+
+func.func @no_reassoc_var(%arg0: !fir.ref<i32>) {
+  %0 = hlfir.no_reassoc %arg0 : !fir.ref<i32>
+  return
+}
+// CHECK-LABEL: func.func @no_reassoc_var(
+// CHECK-SAME:    %[[VAL_0:.*]]: !fir.ref<i32>) {
+// CHECK:   hlfir.no_reassoc %[[VAL_0]] : !fir.ref<i32>
+
+func.func @no_reassoc_expr(%arg0: !hlfir.expr<10xi32>) {
+  %0 = hlfir.no_reassoc %arg0 : !hlfir.expr<10xi32>
+  return
+}
+// CHECK-LABEL: func.func @no_reassoc_expr(
+// CHECK-SAME:    %[[VAL_0:.*]]: !hlfir.expr<10xi32>) {
+// CHECK:   hlfir.no_reassoc %[[VAL_0]] : !hlfir.expr<10xi32>


        


More information about the flang-commits mailing list