Refactor EmitC shared ops and conversions (#4855)
Makes the naming more consistent, similar to the order used in the the bytecode dispatcher.
diff --git a/iree/compiler/Dialect/VM/Conversion/VMToEmitC/ConvertVMToEmitC.cpp b/iree/compiler/Dialect/VM/Conversion/VMToEmitC/ConvertVMToEmitC.cpp
index c40b199..9aa4f8b 100644
--- a/iree/compiler/Dialect/VM/Conversion/VMToEmitC/ConvertVMToEmitC.cpp
+++ b/iree/compiler/Dialect/VM/Conversion/VMToEmitC/ConvertVMToEmitC.cpp
@@ -72,6 +72,10 @@
void populateVMToCPatterns(MLIRContext *context,
OwningRewritePatternList &patterns) {
+ // Constants
+ patterns.insert<CallOpConversion<IREE::VM::ConstI32Op>>(context,
+ "vm_const_i32");
+
// Conditional assignment ops
patterns.insert<CallOpConversion<IREE::VM::SelectI32Op>>(context,
"vm_select_i32");
@@ -132,9 +136,6 @@
patterns.insert<CallOpConversion<IREE::VM::CheckEQOp>>(context,
"VM_CHECK_EQ");
- // Const
- patterns.insert<CallOpConversion<IREE::VM::ConstI32Op>>(context,
- "vm_const_i32");
}
namespace IREE {
@@ -160,6 +161,9 @@
target.addLegalDialect<iree_compiler::IREEDialect>();
target.addLegalDialect<IREE::VM::VMDialect>();
+ // Constants
+ target.addIllegalOp<IREE::VM::ConstI32Op>();
+
// Conditional assignment ops
target.addIllegalOp<IREE::VM::SelectI32Op>();
@@ -201,8 +205,6 @@
// support for control flow ops has landed in the c module target
target.addIllegalOp<IREE::VM::CheckEQOp>();
- // Const ops
- target.addIllegalOp<IREE::VM::ConstI32Op>();
if (failed(
applyFullConversion(getOperation(), target, std::move(patterns)))) {
diff --git a/iree/compiler/Dialect/VM/Conversion/VMToEmitC/test/const.mlir b/iree/compiler/Dialect/VM/Conversion/VMToEmitC/test/const_ops.mlir
similarity index 100%
rename from iree/compiler/Dialect/VM/Conversion/VMToEmitC/test/const.mlir
rename to iree/compiler/Dialect/VM/Conversion/VMToEmitC/test/const_ops.mlir
diff --git a/iree/vm/ops.h b/iree/vm/ops.h
index b205445..502fbb9 100644
--- a/iree/vm/ops.h
+++ b/iree/vm/ops.h
@@ -18,6 +18,12 @@
#include <stdint.h>
//===------------------------------------------------------------------===//
+// Constants
+//===------------------------------------------------------------------===//
+
+static inline int32_t vm_const_i32(int32_t a) { return a; }
+
+//===------------------------------------------------------------------===//
// Conditional assignment
//===------------------------------------------------------------------===//
@@ -109,6 +115,9 @@
return (operand != 0) ? 1 : 0;
}
+//===------------------------------------------------------------------===//
+// Additional ops
+//===------------------------------------------------------------------===//
// Check ops
// TODO(simon-camp): These macros should be removed once control flow ops are
// supported in the c module target
@@ -118,7 +127,5 @@
iree_make_cstring_view("message")); \
}
-// Const ops
-inline int32_t vm_const_i32(int32_t a) { return a; }
#endif // IREE_VM_OPS_H_