diff options
Diffstat (limited to 'mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp')
-rw-r--r-- | mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp | 106 |
1 files changed, 54 insertions, 52 deletions
diff --git a/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp b/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp index a5c08a6..515fe5c 100644 --- a/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp +++ b/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp @@ -110,9 +110,9 @@ public: emitc::CmpPredicate predicate; switch (op.getPredicate()) { case arith::CmpFPredicate::AlwaysFalse: { - auto constant = rewriter.create<emitc::ConstantOp>( - op.getLoc(), rewriter.getI1Type(), - rewriter.getBoolAttr(/*value=*/false)); + auto constant = + emitc::ConstantOp::create(rewriter, op.getLoc(), rewriter.getI1Type(), + rewriter.getBoolAttr(/*value=*/false)); rewriter.replaceOp(op, constant); return success(); } @@ -179,9 +179,9 @@ public: return success(); } case arith::CmpFPredicate::AlwaysTrue: { - auto constant = rewriter.create<emitc::ConstantOp>( - op.getLoc(), rewriter.getI1Type(), - rewriter.getBoolAttr(/*value=*/true)); + auto constant = + emitc::ConstantOp::create(rewriter, op.getLoc(), rewriter.getI1Type(), + rewriter.getBoolAttr(/*value=*/true)); rewriter.replaceOp(op, constant); return success(); } @@ -189,8 +189,8 @@ public: // Compare the values naively auto cmpResult = - rewriter.create<emitc::CmpOp>(op.getLoc(), op.getType(), predicate, - adaptor.getLhs(), adaptor.getRhs()); + emitc::CmpOp::create(rewriter, op.getLoc(), op.getType(), predicate, + adaptor.getLhs(), adaptor.getRhs()); // Adjust the results for unordered/ordered semantics if (unordered) { @@ -213,16 +213,16 @@ private: Value isNaN(ConversionPatternRewriter &rewriter, Location loc, Value operand) const { // A value is NaN exactly when it compares unequal to itself. - return rewriter.create<emitc::CmpOp>( - loc, rewriter.getI1Type(), emitc::CmpPredicate::ne, operand, operand); + return emitc::CmpOp::create(rewriter, loc, rewriter.getI1Type(), + emitc::CmpPredicate::ne, operand, operand); } /// Return a value that is true if \p operand is not NaN. Value isNotNaN(ConversionPatternRewriter &rewriter, Location loc, Value operand) const { // A value is not NaN exactly when it compares equal to itself. - return rewriter.create<emitc::CmpOp>( - loc, rewriter.getI1Type(), emitc::CmpPredicate::eq, operand, operand); + return emitc::CmpOp::create(rewriter, loc, rewriter.getI1Type(), + emitc::CmpPredicate::eq, operand, operand); } /// Return a value that is true if the operands \p first and \p second are @@ -231,8 +231,8 @@ private: Location loc, Value first, Value second) const { auto firstIsNaN = isNaN(rewriter, loc, first); auto secondIsNaN = isNaN(rewriter, loc, second); - return rewriter.create<emitc::LogicalOrOp>(loc, rewriter.getI1Type(), - firstIsNaN, secondIsNaN); + return emitc::LogicalOrOp::create(rewriter, loc, rewriter.getI1Type(), + firstIsNaN, secondIsNaN); } /// Return a value that is true if the operands \p first and \p second are @@ -241,8 +241,8 @@ private: Value first, Value second) const { auto firstIsNotNaN = isNotNaN(rewriter, loc, first); auto secondIsNotNaN = isNotNaN(rewriter, loc, second); - return rewriter.create<emitc::LogicalAndOp>(loc, rewriter.getI1Type(), - firstIsNotNaN, secondIsNotNaN); + return emitc::LogicalAndOp::create(rewriter, loc, rewriter.getI1Type(), + firstIsNotNaN, secondIsNotNaN); } }; @@ -378,10 +378,10 @@ public: Type attrType = (emitc::isPointerWideType(operandType)) ? rewriter.getIndexType() : operandType; - auto constOne = rewriter.create<emitc::ConstantOp>( - op.getLoc(), operandType, rewriter.getOneAttr(attrType)); - auto oneAndOperand = rewriter.create<emitc::BitwiseAndOp>( - op.getLoc(), operandType, adaptor.getIn(), constOne); + auto constOne = emitc::ConstantOp::create( + rewriter, op.getLoc(), operandType, rewriter.getOneAttr(attrType)); + auto oneAndOperand = emitc::BitwiseAndOp::create( + rewriter, op.getLoc(), operandType, adaptor.getIn(), constOne); rewriter.replaceOpWithNewOp<emitc::CastOp>(op, opReturnType, oneAndOperand); return success(); @@ -402,8 +402,8 @@ public: Value actualOp = adaptValueType(adaptor.getIn(), rewriter, castSrcType); // Actual cast (may change bitwidth) - auto cast = rewriter.template create<emitc::CastOp>(op.getLoc(), - castDestType, actualOp); + auto cast = + emitc::CastOp::create(rewriter, op.getLoc(), castDestType, actualOp); // Cast to the expected output type auto result = adaptValueType(cast, rewriter, opReturnType); @@ -466,9 +466,8 @@ public: Value lhsAdapted = adaptValueType(uiBinOp.getLhs(), rewriter, unsignedType); Value rhsAdapted = adaptValueType(uiBinOp.getRhs(), rewriter, unsignedType); - auto newDivOp = - rewriter.create<EmitCOp>(uiBinOp.getLoc(), unsignedType, - ArrayRef<Value>{lhsAdapted, rhsAdapted}); + auto newDivOp = EmitCOp::create(rewriter, uiBinOp.getLoc(), unsignedType, + ArrayRef<Value>{lhsAdapted, rhsAdapted}); Value resultAdapted = adaptValueType(newDivOp, rewriter, newRetTy); rewriter.replaceOp(uiBinOp, resultAdapted); return success(); @@ -508,8 +507,8 @@ public: Value lhs = adaptValueType(adaptor.getLhs(), rewriter, arithmeticType); Value rhs = adaptValueType(adaptor.getRhs(), rewriter, arithmeticType); - Value arithmeticResult = rewriter.template create<EmitCOp>( - op.getLoc(), arithmeticType, lhs, rhs); + Value arithmeticResult = + EmitCOp::create(rewriter, op.getLoc(), arithmeticType, lhs, rhs); Value result = adaptValueType(arithmeticResult, rewriter, type); @@ -548,8 +547,8 @@ public: Value lhs = adaptValueType(adaptor.getLhs(), rewriter, arithmeticType); Value rhs = adaptValueType(adaptor.getRhs(), rewriter, arithmeticType); - Value arithmeticResult = rewriter.template create<EmitCOp>( - op.getLoc(), arithmeticType, lhs, rhs); + Value arithmeticResult = + EmitCOp::create(rewriter, op.getLoc(), arithmeticType, lhs, rhs); Value result = adaptValueType(arithmeticResult, rewriter, type); @@ -588,38 +587,40 @@ public: // Add a runtime check for overflow Value width; if (emitc::isPointerWideType(type)) { - Value eight = rewriter.create<emitc::ConstantOp>( - op.getLoc(), rhsType, rewriter.getIndexAttr(8)); - emitc::CallOpaqueOp sizeOfCall = rewriter.create<emitc::CallOpaqueOp>( - op.getLoc(), rhsType, "sizeof", ArrayRef<Value>{eight}); - width = rewriter.create<emitc::MulOp>(op.getLoc(), rhsType, eight, - sizeOfCall.getResult(0)); + Value eight = emitc::ConstantOp::create(rewriter, op.getLoc(), rhsType, + rewriter.getIndexAttr(8)); + emitc::CallOpaqueOp sizeOfCall = emitc::CallOpaqueOp::create( + rewriter, op.getLoc(), rhsType, "sizeof", ArrayRef<Value>{eight}); + width = emitc::MulOp::create(rewriter, op.getLoc(), rhsType, eight, + sizeOfCall.getResult(0)); } else { - width = rewriter.create<emitc::ConstantOp>( - op.getLoc(), rhsType, + width = emitc::ConstantOp::create( + rewriter, op.getLoc(), rhsType, rewriter.getIntegerAttr(rhsType, type.getIntOrFloatBitWidth())); } - Value excessCheck = rewriter.create<emitc::CmpOp>( - op.getLoc(), rewriter.getI1Type(), emitc::CmpPredicate::lt, rhs, width); + Value excessCheck = + emitc::CmpOp::create(rewriter, op.getLoc(), rewriter.getI1Type(), + emitc::CmpPredicate::lt, rhs, width); // Any concrete value is a valid refinement of poison. - Value poison = rewriter.create<emitc::ConstantOp>( - op.getLoc(), arithmeticType, + Value poison = emitc::ConstantOp::create( + rewriter, op.getLoc(), arithmeticType, (isa<IntegerType>(arithmeticType) ? rewriter.getIntegerAttr(arithmeticType, 0) : rewriter.getIndexAttr(0))); - emitc::ExpressionOp ternary = rewriter.create<emitc::ExpressionOp>( - op.getLoc(), arithmeticType, /*do_not_inline=*/false); + emitc::ExpressionOp ternary = emitc::ExpressionOp::create( + rewriter, op.getLoc(), arithmeticType, /*do_not_inline=*/false); Block &bodyBlock = ternary.getBodyRegion().emplaceBlock(); auto currentPoint = rewriter.getInsertionPoint(); rewriter.setInsertionPointToStart(&bodyBlock); Value arithmeticResult = - rewriter.create<EmitCOp>(op.getLoc(), arithmeticType, lhs, rhs); - Value resultOrPoison = rewriter.create<emitc::ConditionalOp>( - op.getLoc(), arithmeticType, excessCheck, arithmeticResult, poison); - rewriter.create<emitc::YieldOp>(op.getLoc(), resultOrPoison); + EmitCOp::create(rewriter, op.getLoc(), arithmeticType, lhs, rhs); + Value resultOrPoison = + emitc::ConditionalOp::create(rewriter, op.getLoc(), arithmeticType, + excessCheck, arithmeticResult, poison); + emitc::YieldOp::create(rewriter, op.getLoc(), resultOrPoison); rewriter.setInsertionPoint(op->getBlock(), currentPoint); Value result = adaptValueType(ternary, rewriter, type); @@ -700,11 +701,12 @@ public: /*isSigned=*/false); } - Value result = rewriter.create<emitc::CastOp>( - castOp.getLoc(), actualResultType, adaptor.getOperands()); + Value result = emitc::CastOp::create( + rewriter, castOp.getLoc(), actualResultType, adaptor.getOperands()); if (isa<arith::FPToUIOp>(castOp)) { - result = rewriter.create<emitc::CastOp>(castOp.getLoc(), dstType, result); + result = + emitc::CastOp::create(rewriter, castOp.getLoc(), dstType, result); } rewriter.replaceOp(castOp, result); @@ -746,8 +748,8 @@ public: } Value fpCastOperand = adaptor.getIn(); if (actualOperandType != operandType) { - fpCastOperand = rewriter.template create<emitc::CastOp>( - castOp.getLoc(), actualOperandType, fpCastOperand); + fpCastOperand = emitc::CastOp::create(rewriter, castOp.getLoc(), + actualOperandType, fpCastOperand); } rewriter.replaceOpWithNewOp<emitc::CastOp>(castOp, dstType, fpCastOperand); |