[ir] Add Unary expressions
This CL adds support for UnaryOpExpressions and converts them into Unary
instructions in the IR.
Bug: tint:1718
Change-Id: I736e29cec5e722b7c7f1b0f4f22ce55a3d3e4109
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/129221
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/ir/builder.h b/src/tint/ir/builder.h
index f53e4c8..4a87e08 100644
--- a/src/tint/ir/builder.h
+++ b/src/tint/ir/builder.h
@@ -32,6 +32,7 @@
#include "src/tint/ir/runtime.h"
#include "src/tint/ir/switch.h"
#include "src/tint/ir/terminator.h"
+#include "src/tint/ir/unary.h"
#include "src/tint/ir/user_call.h"
#include "src/tint/ir/value.h"
#include "src/tint/type/bool.h"
@@ -280,6 +281,43 @@
/// @returns the operation
Binary* Modulo(const type::Type* type, Value* lhs, Value* rhs);
+ /// Creates an op for `kind val`
+ /// @param kind the kind of operation
+ /// @param type the result type of the binary expression
+ /// @param val the value of the operation
+ /// @returns the operation
+ Unary* CreateUnary(Unary::Kind kind, const type::Type* type, Value* val);
+
+ /// Creates an AddressOf operation
+ /// @param type the result type of the expression
+ /// @param val the value
+ /// @returns the operation
+ Unary* AddressOf(const type::Type* type, Value* val);
+
+ /// Creates a Complement operation
+ /// @param type the result type of the expression
+ /// @param val the value
+ /// @returns the operation
+ Unary* Complement(const type::Type* type, Value* val);
+
+ /// Creates an Indirection operation
+ /// @param type the result type of the expression
+ /// @param val the value
+ /// @returns the operation
+ Unary* Indirection(const type::Type* type, Value* val);
+
+ /// Creates a Negation operation
+ /// @param type the result type of the expression
+ /// @param val the value
+ /// @returns the operation
+ Unary* Negation(const type::Type* type, Value* val);
+
+ /// Creates a Not operation
+ /// @param type the result type of the expression
+ /// @param val the value
+ /// @returns the operation
+ Unary* Not(const type::Type* type, Value* val);
+
/// Creates a bitcast instruction
/// @param type the result type of the bitcast
/// @param val the value being bitcast