[ir] Remove type from Not builder.

Remove the type parameter from the IR `Not` builder and infer from
the value. Remove the `Unary` builder which takes a type as it is no
longer necessary.

Change-Id: Ib2fe3f959bd547e3de94c1bb2fc822fa5a8eaf2b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/274395
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/core/ir/binary/roundtrip_test.cc b/src/tint/lang/core/ir/binary/roundtrip_test.cc
index 3c6f7e0..c771c93 100644
--- a/src/tint/lang/core/ir/binary/roundtrip_test.cc
+++ b/src/tint/lang/core/ir/binary/roundtrip_test.cc
@@ -534,7 +534,7 @@
     auto* x = b.FunctionParam<bool>("x");
     auto* fn = b.Function("Function", ty.bool_());
     fn->SetParams({x});
-    b.Append(fn->Block(), [&] { b.Return(fn, b.Not<bool>(x)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Not(x)); });
     RUN_TEST();
 }
 
@@ -551,9 +551,8 @@
     auto* x = b.FunctionParam<vec4<f32>>("x");
     auto* fn = b.Function("Function", ty.vec3<f32>());
     fn->SetParams({x});
-    b.Append(fn->Block(), [&] {
-        b.Return(fn, b.Swizzle<vec3<f32>>(x, Vector<uint32_t, 3>{1, 0, 2}));
-    });
+    b.Append(fn->Block(),
+             [&] { b.Return(fn, b.Swizzle<vec3<f32>>(x, Vector<uint32_t, 3>{1, 0, 2})); });
     RUN_TEST();
 }
 
diff --git a/src/tint/lang/core/ir/builder.h b/src/tint/lang/core/ir/builder.h
index 8b710109..d59d744 100644
--- a/src/tint/lang/core/ir/builder.h
+++ b/src/tint/lang/core/ir/builder.h
@@ -991,17 +991,6 @@
 
     /// Creates an op for `op val`
     /// @param op the unary operator
-    /// @param type the result type of the binary expression
-    /// @param val the value of the operation
-    /// @returns the operation
-    template <typename VAL>
-    ir::CoreUnary* Unary(UnaryOp op, const core::type::Type* type, VAL&& val) {
-        auto* value = Value(std::forward<VAL>(val));
-        return Append(ir.CreateInstruction<ir::CoreUnary>(InstructionResult(type), op, value));
-    }
-
-    /// Creates an op for `op val`
-    /// @param op the unary operator
     /// @param val the value of the operation
     /// @returns the operation
     template <typename VAL>
@@ -1032,22 +1021,11 @@
     }
 
     /// Creates a Not operation
-    /// @param type the result type of the expression
     /// @param val the value
     /// @returns the operation
     template <typename VAL>
-    ir::CoreUnary* Not(const core::type::Type* type, VAL&& val) {
-        return Unary(UnaryOp::kNot, type, std::forward<VAL>(val));
-    }
-
-    /// Creates a Not operation
-    /// @tparam TYPE the result type of the expression
-    /// @param val the value
-    /// @returns the operation
-    template <typename TYPE, typename VAL>
     ir::CoreUnary* Not(VAL&& val) {
-        auto* type = ir.Types().Get<TYPE>();
-        return Not(type, std::forward<VAL>(val));
+        return Unary(UnaryOp::kNot, std::forward<VAL>(val));
     }
 
     /// Creates a bitcast instruction
diff --git a/src/tint/lang/core/ir/core_unary_test.cc b/src/tint/lang/core/ir/core_unary_test.cc
index aadef60..59bb202 100644
--- a/src/tint/lang/core/ir/core_unary_test.cc
+++ b/src/tint/lang/core/ir/core_unary_test.cc
@@ -65,7 +65,7 @@
 }
 
 TEST_F(IR_UnaryTest, CreateNot) {
-    auto* inst = b.Not(mod.Types().bool_(), true);
+    auto* inst = b.Not(true);
 
     ASSERT_TRUE(inst->Is<Unary>());
     EXPECT_EQ(inst->Op(), UnaryOp::kNot);
diff --git a/src/tint/lang/core/ir/transform/demote_to_helper.cc b/src/tint/lang/core/ir/transform/demote_to_helper.cc
index a7c09d9..4b5f122 100644
--- a/src/tint/lang/core/ir/transform/demote_to_helper.cc
+++ b/src/tint/lang/core/ir/transform/demote_to_helper.cc
@@ -192,7 +192,7 @@
                     if (ret->Func()->IsFragment()) {
                         b.InsertBefore(ret, [&] {
                             auto* cond = b.Load(continue_execution);
-                            auto* ifelse = b.If(b.Not<bool>(cond));
+                            auto* ifelse = b.If(b.Not(cond));
                             b.Append(ifelse->True(), [&] {  //
                                 b.TerminateInvocation();
                             });
diff --git a/src/tint/lang/glsl/writer/unary_test.cc b/src/tint/lang/glsl/writer/unary_test.cc
index 7a2ded0..fd85b5a 100644
--- a/src/tint/lang/glsl/writer/unary_test.cc
+++ b/src/tint/lang/glsl/writer/unary_test.cc
@@ -58,7 +58,7 @@
     auto* func = b.ComputeFunction("main");
     b.Append(func->Block(), [&] {
         auto* l = b.Let("left", b.Constant(false));
-        auto* op = b.Not(ty.bool_(), l);
+        auto* op = b.Not(l);
         b.Let("val", op);
         b.Return(func);
     });
@@ -77,7 +77,7 @@
     auto* func = b.ComputeFunction("main");
     b.Append(func->Block(), [&] {
         auto* l = b.Let("left", b.Splat(ty.vec3<bool>(), false));
-        auto* op = b.Not(ty.vec3<bool>(), l);
+        auto* op = b.Not(l);
         b.Let("val", op);
         b.Return(func);
     });
diff --git a/src/tint/lang/hlsl/writer/unary_test.cc b/src/tint/lang/hlsl/writer/unary_test.cc
index cd692e6..31bb575 100644
--- a/src/tint/lang/hlsl/writer/unary_test.cc
+++ b/src/tint/lang/hlsl/writer/unary_test.cc
@@ -58,7 +58,7 @@
     auto* func = b.ComputeFunction("main");
     b.Append(func->Block(), [&] {
         auto* a = b.Var("a", b.Zero<bool>());
-        b.Var("b", b.Not<bool>(b.Load(a)));
+        b.Var("b", b.Not(b.Load(a)));
         b.Return(func);
     });
 
diff --git a/src/tint/lang/spirv/reader/parser/parser.cc b/src/tint/lang/spirv/reader/parser/parser.cc
index baff4be..e2ced54 100644
--- a/src/tint/lang/spirv/reader/parser/parser.cc
+++ b/src/tint/lang/spirv/reader/parser/parser.cc
@@ -3540,7 +3540,7 @@
                 return true;
             }
             if (false_id == merge_id && true_is_header) {
-                auto* val = b_.Not(cond->Type(), cond);
+                auto* val = b_.Not(cond);
                 EmitWithoutSpvResult(val);
                 EmitWithoutResult(b_.BreakIf(loop, val));
                 return true;
@@ -4168,7 +4168,7 @@
                    core::UnaryOp op,
                    uint32_t first_operand_idx = 2) {
         auto* val = Value(inst.GetSingleWordOperand(first_operand_idx));
-        auto* unary = b_.Unary(op, Type(inst.type_id()), val);
+        auto* unary = b_.Unary(op, val);
         Emit(unary, inst.result_id());
     }
 
@@ -4192,7 +4192,7 @@
         auto* binary = b_.Binary(op, Type(inst.type_id()), lhs, rhs);
         EmitWithoutSpvResult(binary);
 
-        auto* res = b_.Not(Type(inst.type_id()), binary);
+        auto* res = b_.Not(binary);
         Emit(res, inst.result_id());
     }
 
diff --git a/src/tint/lang/spirv/writer/loop_test.cc b/src/tint/lang/spirv/writer/loop_test.cc
index cbce8cf..74ef722 100644
--- a/src/tint/lang/spirv/writer/loop_test.cc
+++ b/src/tint/lang/spirv/writer/loop_test.cc
@@ -704,7 +704,7 @@
         loop->Continuing()->SetParams({cont_param_a, cont_param_b});
         b.Append(loop->Continuing(), [&] {
             auto* cmp = b.GreaterThan(ty.bool_(), cont_param_a, 5_i);
-            auto* not_b = b.Not(ty.bool_(), cont_param_b);
+            auto* not_b = b.Not(cont_param_b);
             b.BreakIf(loop, cmp, b.Values(cont_param_a, not_b), Empty);
         });
 
diff --git a/src/tint/lang/spirv/writer/raise/merge_return.cc b/src/tint/lang/spirv/writer/raise/merge_return.cc
index 7058558..d9d7d0c 100644
--- a/src/tint/lang/spirv/writer/raise/merge_return.cc
+++ b/src/tint/lang/spirv/writer/raise/merge_return.cc
@@ -181,7 +181,7 @@
             if (exit_target->IsAnyOf<core::ir::Loop, core::ir::Switch>()) {
                 b.InsertBefore(next, [&] {
                     auto* load = b.Load(continue_execution);
-                    auto* cond = b.If(b.Not<bool>(load));
+                    auto* cond = b.If(b.Not(load));
                     b.Append(cond->True(), [&] {  //
                         ExitFromControl(exit_target);
                     });
diff --git a/src/tint/lang/spirv/writer/unary_test.cc b/src/tint/lang/spirv/writer/unary_test.cc
index 91ad1d1..f44280a 100644
--- a/src/tint/lang/spirv/writer/unary_test.cc
+++ b/src/tint/lang/spirv/writer/unary_test.cc
@@ -55,7 +55,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arg});
     b.Append(func->Block(), [&] {
-        auto* result = b.Unary(params.op, MakeScalarType(params.type), arg);
+        auto* result = b.Unary(params.op, arg);
         mod.SetName(result, "result");
         b.Return(func);
     });
@@ -77,7 +77,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arg});
     b.Append(func->Block(), [&] {
-        auto* result = b.Unary(params.op, MakeVectorType(params.type), arg);
+        auto* result = b.Unary(params.op, arg);
         mod.SetName(result, "result");
         b.Return(func);
     });
@@ -104,7 +104,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arg});
     b.Append(func->Block(), [&] {
-        auto* result = b.Unary(core::UnaryOp::kNegation, MakeVectorType(kI32), arg);
+        auto* result = b.Unary(core::UnaryOp::kNegation, arg);
         b.Return(func);
         mod.SetName(result, "result");
     });
@@ -153,7 +153,7 @@
     auto* func = b.Function("foo", ty.void_());
     func->SetParams({arg});
     b.Append(func->Block(), [&] {
-        auto* result = b.Unary(core::UnaryOp::kNegation, MakeScalarType(kI32), arg);
+        auto* result = b.Unary(core::UnaryOp::kNegation, arg);
         b.Return(func);
         mod.SetName(result, "result");
     });
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc b/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc
index 92e089a..9583c45 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc
@@ -937,7 +937,6 @@
                     return;
                 }
                 core::ir::Instruction* inst = nullptr;
-                auto* sem = impl.program_.Sem().Get(expr);
                 switch (expr->op) {
                     case core::UnaryOp::kAddressOf:
                     case core::UnaryOp::kIndirection:
@@ -954,8 +953,7 @@
                         break;
                     }
                     case core::UnaryOp::kNot: {
-                        auto* ty = sem->Type()->Clone(impl.clone_ctx_.type_ctx);
-                        inst = impl.builder_.Not(ty, val);
+                        inst = impl.builder_.Not(val);
                         break;
                     }
                 }
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
index 5a0f9f9..e6c202a 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
@@ -1051,7 +1051,7 @@
     auto* i = b.FunctionParam("b", ty.bool_());
     fn->SetParams({i});
 
-    b.Append(fn->Block(), [&] { b.Return(fn, b.Not(ty.bool_(), i)); });
+    b.Append(fn->Block(), [&] { b.Return(fn, b.Not(i)); });
 
     EXPECT_WGSL(R"(
 fn f(b : bool) -> bool {
@@ -3483,7 +3483,7 @@
         auto* lhs = b.Override("cond", true);
         lhs->SetOverrideId(OverrideId{10});
 
-        o = b.Override("o", b.Not<bool>(lhs));
+        o = b.Override("o", b.Not(lhs));
     });
 
     auto* fn = b.Function("f", ty.bool_());