[Mlir-commits] [mlir] [mlir][emitc] Lower arith.andi, arith.ori, arith.xori to EmitC (PR #93666)
Corentin Ferry
llvmlistbot at llvm.org
Mon Jun 3 00:19:20 PDT 2024
================
@@ -265,6 +288,46 @@ class IntegerOpConversion final : public OpConversionPattern<ArithOp> {
}
};
+template <typename ArithOp, typename EmitCOp>
+class BitwiseOpConversion : public OpConversionPattern<ArithOp> {
+public:
+ using OpConversionPattern<ArithOp>::OpConversionPattern;
+
+ LogicalResult
+ matchAndRewrite(ArithOp op, typename ArithOp::Adaptor adaptor,
+ ConversionPatternRewriter &rewriter) const override {
+
+ Type type = this->getTypeConverter()->convertType(op.getType());
+ if (!isa_and_nonnull<IntegerType>(type)) {
+ return rewriter.notifyMatchFailure(
+ op,
+ "expected integer type, vector/tensor support not yet implemented");
+ }
+
+ // Bitwise ops can be performed directly on booleans
+ if (type.isInteger(1)) {
+ rewriter.replaceOpWithNewOp<EmitCOp>(op, type, adaptor.getLhs(),
+ adaptor.getRhs());
+ return success();
+ }
+
+ // Bitwise ops are defined by the C standard on unsigned operands.
----------------
cferry-AMD wrote:
For this, see https://learn.microsoft.com/en-us/cpp/c-language/c-bitwise-operators?view=msvc-170.
https://github.com/llvm/llvm-project/pull/93666
More information about the Mlir-commits
mailing list