15
15
#define FIR_REWRITE_PATTERNS
16
16
17
17
include "mlir/IR/OpBase.td"
18
+ include "mlir/Dialect/StandardOps/IR/Ops.td"
18
19
include "flang/Optimizer/Dialect/FIROps.td"
19
20
20
21
def IdenticalTypePred : Constraint<CPred<"$0.getType() == $1.getType()">>;
21
22
def IntegerTypePred : Constraint<CPred<"fir::isa_integer($0.getType())">>;
23
+ def IndexTypePred : Constraint<CPred<"$0.getType().isa<mlir::IndexType>()">>;
22
24
23
25
def SmallerWidthPred
24
- : Constraint<CPred<"$0.getType().getIntOrFloatBitWidth() < $1.getType().getIntOrFloatBitWidth()">>;
26
+ : Constraint<CPred<"$0.getType().getIntOrFloatBitWidth() "
27
+ "<= $1.getType().getIntOrFloatBitWidth()">>;
25
28
26
29
def ConvertConvertOptPattern
27
30
: Pat<(fir_ConvertOp (fir_ConvertOp $arg)),
@@ -42,4 +45,14 @@ def CombineConvertOptPattern
42
45
,(IntegerTypePred $irm)
43
46
,(SmallerWidthPred $arg, $irm)]>;
44
47
48
+ def createConstantOp
49
+ : NativeCodeCall<"$_builder.create<mlir::ConstantOp>"
50
+ "($_loc, $_builder.getIndexType(), "
51
+ "rewriter.getIndexAttr($1.dyn_cast<IntegerAttr>().getInt()))">;
52
+
53
+ def ForwardConstantConvertPattern
54
+ : Pat<(fir_ConvertOp:$res (ConstantOp $attr)),
55
+ (createConstantOp $res, $attr),
56
+ [(IndexTypePred $res)]>;
57
+
45
58
#endif // FIR_REWRITE_PATTERNS
0 commit comments