[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>
This commit is contained in:
dan sinclair 2020-07-25 14:33:35 +00:00 committed by dan sinclair
parent f75f2cd22e
commit 23508f4339
4 changed files with 11 additions and 10 deletions

View File

@ -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 @@ bool FunctionEmitter::EmitNormalTerminator(const BlockInfo& block_info) {
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

View File

@ -9947,7 +9947,7 @@ TEST_F(SpvParserTest, EmitBody_Kill_TopLevel) {
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 @@ TEST_F(SpvParserTest, EmitBody_Kill_InsideIf) {
ScalarConstructor{false}
)
{
Kill{}
Discard{}
}
}
Kill{}
Discard{}
)")) << ToString(fe.ast_body());
}
@ -10010,9 +10010,9 @@ TEST_F(SpvParserTest, EmitBody_Kill_InsideLoop) {
EXPECT_TRUE(fe.EmitBody()) << p->error();
EXPECT_THAT(ToString(fe.ast_body()), Eq(R"(Loop{
Kill{}
Discard{}
}
Kill{}
Discard{}
)")) << ToString(fe.ast_body());
}

View File

@ -42,6 +42,7 @@ const char* kWGSLReservedWords[] = {
"constant_id",
"continue",
"default",
"discard",
"do",
"else",
"elseif",
@ -62,7 +63,6 @@ const char* kWGSLReservedWords[] = {
"image",
"import",
"in",
"kill",
"let",
"location",
"loop",
@ -106,7 +106,8 @@ const char* kWGSLReservedWords[] = {
"while",
"workgroup",
};
}
} // namespace
Namer::Namer(const FailStream& fail_stream) : fail_stream_(fail_stream) {
for (const auto* reserved : kWGSLReservedWords) {

View File

@ -340,6 +340,7 @@ INSTANTIATE_TEST_SUITE_P(SpvParserTest_ReservedWords,
"constant_id",
"continue",
"default",
"discard",
"do",
"else",
"elseif",
@ -360,7 +361,6 @@ INSTANTIATE_TEST_SUITE_P(SpvParserTest_ReservedWords,
"image",
"import",
"in",
"kill",
"let",
"location",
"loop",