[spirv-reader] Convert from KillStatement to DiscardStatement

This CL changes the SPIRV-Reader to generate DiscardStatements instead
of KillStatements for an OpKill.

Bug: tint:168
Change-Id: Ic4223b614c822c6ad449f61aedaddc9605c42535
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/25642
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index cfd830e..46dcec2 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -38,11 +38,11 @@
 #include "src/ast/case_statement.h"
 #include "src/ast/cast_expression.h"
 #include "src/ast/continue_statement.h"
+#include "src/ast/discard_statement.h"
 #include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
-#include "src/ast/kill_statement.h"
 #include "src/ast/loop_statement.h"
 #include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
@@ -2194,7 +2194,7 @@
     case SpvOpKill:
       // For now, assume SPIR-V OpKill has same semantics as WGSL kill.
       // TODO(dneto): https://github.com/gpuweb/gpuweb/issues/676
-      AddStatement(std::make_unique<ast::KillStatement>());
+      AddStatement(std::make_unique<ast::DiscardStatement>());
       return true;
     case SpvOpUnreachable:
       // Translate as if it's a return. This avoids the problem where WGSL
diff --git a/src/reader/spirv/function_cfg_test.cc b/src/reader/spirv/function_cfg_test.cc
index 8a73eb1..42961bc 100644
--- a/src/reader/spirv/function_cfg_test.cc
+++ b/src/reader/spirv/function_cfg_test.cc
@@ -9947,7 +9947,7 @@
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
 
-  EXPECT_THAT(ToString(fe.ast_body()), Eq(R"(Kill{}
+  EXPECT_THAT(ToString(fe.ast_body()), Eq(R"(Discard{}
 )")) << ToString(fe.ast_body());
 }
 
@@ -9976,10 +9976,10 @@
     ScalarConstructor{false}
   )
   {
-    Kill{}
+    Discard{}
   }
 }
-Kill{}
+Discard{}
 )")) << ToString(fe.ast_body());
 }
 
@@ -10010,9 +10010,9 @@
   EXPECT_TRUE(fe.EmitBody()) << p->error();
 
   EXPECT_THAT(ToString(fe.ast_body()), Eq(R"(Loop{
-  Kill{}
+  Discard{}
 }
-Kill{}
+Discard{}
 )")) << ToString(fe.ast_body());
 }
 
diff --git a/src/reader/spirv/namer.cc b/src/reader/spirv/namer.cc
index 1087c64..8ba38fa 100644
--- a/src/reader/spirv/namer.cc
+++ b/src/reader/spirv/namer.cc
@@ -42,6 +42,7 @@
     "constant_id",
     "continue",
     "default",
+    "discard",
     "do",
     "else",
     "elseif",
@@ -62,7 +63,6 @@
     "image",
     "import",
     "in",
-    "kill",
     "let",
     "location",
     "loop",
@@ -106,7 +106,8 @@
     "while",
     "workgroup",
 };
-}
+
+}  // namespace
 
 Namer::Namer(const FailStream& fail_stream) : fail_stream_(fail_stream) {
   for (const auto* reserved : kWGSLReservedWords) {
diff --git a/src/reader/spirv/namer_test.cc b/src/reader/spirv/namer_test.cc
index 484e6f4..96dc0e3 100644
--- a/src/reader/spirv/namer_test.cc
+++ b/src/reader/spirv/namer_test.cc
@@ -340,6 +340,7 @@
                              "constant_id",
                              "continue",
                              "default",
+                             "discard",
                              "do",
                              "else",
                              "elseif",
@@ -360,7 +361,6 @@
                              "image",
                              "import",
                              "in",
-                             "kill",
                              "let",
                              "location",
                              "loop",