mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-21 18:59:21 +00:00
tint: Rename frexp().sig to frexp().fract
Fixed: tint:1757 Change-Id: Iacce6ab0f08f89abbe5831e6f2285a0c964e74d7 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/110100 Reviewed-by: Dan Sinclair <dsinclair@chromium.org> Commit-Queue: Dan Sinclair <dsinclair@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com> Auto-Submit: Ben Clayton <bclayton@google.com>
This commit is contained in:
committed by
Dawn LUCI CQ
parent
1ef277db0e
commit
10fae7ac79
@@ -34,6 +34,7 @@
|
||||
#include "src/tint/sem/member_accessor_expression.h"
|
||||
#include "src/tint/sem/sampled_texture.h"
|
||||
#include "src/tint/sem/statement.h"
|
||||
#include "src/tint/sem/test_helper.h"
|
||||
#include "src/tint/sem/variable.h"
|
||||
|
||||
using ::testing::ElementsAre;
|
||||
@@ -927,12 +928,12 @@ TEST_F(ResolverBuiltinFloatTest, FrexpScalar_f32) {
|
||||
ASSERT_NE(ty, nullptr);
|
||||
ASSERT_EQ(ty->Members().size(), 2u);
|
||||
|
||||
auto* sig = ty->Members()[0];
|
||||
EXPECT_TRUE(sig->Type()->Is<sem::F32>());
|
||||
EXPECT_EQ(sig->Offset(), 0u);
|
||||
EXPECT_EQ(sig->Size(), 4u);
|
||||
EXPECT_EQ(sig->Align(), 4u);
|
||||
EXPECT_EQ(sig->Name(), Sym("sig"));
|
||||
auto* fract = ty->Members()[0];
|
||||
EXPECT_TRUE(fract->Type()->Is<sem::F32>());
|
||||
EXPECT_EQ(fract->Offset(), 0u);
|
||||
EXPECT_EQ(fract->Size(), 4u);
|
||||
EXPECT_EQ(fract->Align(), 4u);
|
||||
EXPECT_EQ(fract->Name(), Sym("fract"));
|
||||
|
||||
auto* exp = ty->Members()[1];
|
||||
EXPECT_TRUE(exp->Type()->Is<sem::I32>());
|
||||
@@ -958,12 +959,12 @@ TEST_F(ResolverBuiltinFloatTest, FrexpScalar_f16) {
|
||||
ASSERT_NE(ty, nullptr);
|
||||
ASSERT_EQ(ty->Members().size(), 2u);
|
||||
|
||||
auto* sig = ty->Members()[0];
|
||||
EXPECT_TRUE(sig->Type()->Is<sem::F16>());
|
||||
EXPECT_EQ(sig->Offset(), 0u);
|
||||
EXPECT_EQ(sig->Size(), 2u);
|
||||
EXPECT_EQ(sig->Align(), 2u);
|
||||
EXPECT_EQ(sig->Name(), Sym("sig"));
|
||||
auto* fract = ty->Members()[0];
|
||||
EXPECT_TRUE(fract->Type()->Is<sem::F16>());
|
||||
EXPECT_EQ(fract->Offset(), 0u);
|
||||
EXPECT_EQ(fract->Size(), 2u);
|
||||
EXPECT_EQ(fract->Align(), 2u);
|
||||
EXPECT_EQ(fract->Name(), Sym("fract"));
|
||||
|
||||
auto* exp = ty->Members()[1];
|
||||
EXPECT_TRUE(exp->Type()->Is<sem::I32>());
|
||||
@@ -987,14 +988,14 @@ TEST_F(ResolverBuiltinFloatTest, FrexpVector_f32) {
|
||||
ASSERT_NE(ty, nullptr);
|
||||
ASSERT_EQ(ty->Members().size(), 2u);
|
||||
|
||||
auto* sig = ty->Members()[0];
|
||||
ASSERT_TRUE(sig->Type()->Is<sem::Vector>());
|
||||
EXPECT_EQ(sig->Type()->As<sem::Vector>()->Width(), 3u);
|
||||
EXPECT_TRUE(sig->Type()->As<sem::Vector>()->type()->Is<sem::F32>());
|
||||
EXPECT_EQ(sig->Offset(), 0u);
|
||||
EXPECT_EQ(sig->Size(), 12u);
|
||||
EXPECT_EQ(sig->Align(), 16u);
|
||||
EXPECT_EQ(sig->Name(), Sym("sig"));
|
||||
auto* fract = ty->Members()[0];
|
||||
ASSERT_TRUE(fract->Type()->Is<sem::Vector>());
|
||||
EXPECT_EQ(fract->Type()->As<sem::Vector>()->Width(), 3u);
|
||||
EXPECT_TRUE(fract->Type()->As<sem::Vector>()->type()->Is<sem::F32>());
|
||||
EXPECT_EQ(fract->Offset(), 0u);
|
||||
EXPECT_EQ(fract->Size(), 12u);
|
||||
EXPECT_EQ(fract->Align(), 16u);
|
||||
EXPECT_EQ(fract->Name(), Sym("fract"));
|
||||
|
||||
auto* exp = ty->Members()[1];
|
||||
ASSERT_TRUE(exp->Type()->Is<sem::Vector>());
|
||||
@@ -1022,14 +1023,14 @@ TEST_F(ResolverBuiltinFloatTest, FrexpVector_f16) {
|
||||
ASSERT_NE(ty, nullptr);
|
||||
ASSERT_EQ(ty->Members().size(), 2u);
|
||||
|
||||
auto* sig = ty->Members()[0];
|
||||
ASSERT_TRUE(sig->Type()->Is<sem::Vector>());
|
||||
EXPECT_EQ(sig->Type()->As<sem::Vector>()->Width(), 3u);
|
||||
EXPECT_TRUE(sig->Type()->As<sem::Vector>()->type()->Is<sem::F16>());
|
||||
EXPECT_EQ(sig->Offset(), 0u);
|
||||
EXPECT_EQ(sig->Size(), 6u);
|
||||
EXPECT_EQ(sig->Align(), 8u);
|
||||
EXPECT_EQ(sig->Name(), Sym("sig"));
|
||||
auto* fract = ty->Members()[0];
|
||||
ASSERT_TRUE(fract->Type()->Is<sem::Vector>());
|
||||
EXPECT_EQ(fract->Type()->As<sem::Vector>()->Width(), 3u);
|
||||
EXPECT_TRUE(fract->Type()->As<sem::Vector>()->type()->Is<sem::F16>());
|
||||
EXPECT_EQ(fract->Offset(), 0u);
|
||||
EXPECT_EQ(fract->Size(), 6u);
|
||||
EXPECT_EQ(fract->Align(), 8u);
|
||||
EXPECT_EQ(fract->Name(), Sym("fract"));
|
||||
|
||||
auto* exp = ty->Members()[1];
|
||||
ASSERT_TRUE(exp->Type()->Is<sem::Vector>());
|
||||
@@ -1044,6 +1045,29 @@ TEST_F(ResolverBuiltinFloatTest, FrexpVector_f16) {
|
||||
EXPECT_EQ(ty->SizeNoPadding(), 28u);
|
||||
}
|
||||
|
||||
// TODO(crbug.com/tint/1757): Remove once deprecation period for `frexp().sig` is over
|
||||
TEST_F(ResolverBuiltinFloatTest, FrexpVector_sig) {
|
||||
Enable(ast::Extension::kF16);
|
||||
|
||||
auto* call = Call("frexp", vec3<f16>());
|
||||
auto* expr = MemberAccessor(call, "sig");
|
||||
WrapInFunction(expr);
|
||||
|
||||
EXPECT_TRUE(r()->Resolve()) << r()->error();
|
||||
|
||||
ASSERT_NE(TypeOf(call), nullptr);
|
||||
auto* ty = TypeOf(call)->As<sem::Struct>();
|
||||
ASSERT_NE(ty, nullptr);
|
||||
ASSERT_EQ(ty->Members().size(), 2u);
|
||||
|
||||
auto* sig = ty->Members()[0];
|
||||
EXPECT_TYPE(sig->Type(), TypeOf(expr));
|
||||
|
||||
auto* access = Sem().Get<sem::StructMemberAccess>(expr);
|
||||
ASSERT_NE(access, nullptr);
|
||||
EXPECT_EQ(access->Member(), sig);
|
||||
}
|
||||
|
||||
TEST_F(ResolverBuiltinFloatTest, Frexp_Error_FirstParamInt) {
|
||||
GlobalVar("v", ty.i32(), ast::AddressSpace::kWorkgroup);
|
||||
auto* call = Call("frexp", 1_i, AddressOf("v"));
|
||||
|
||||
@@ -856,7 +856,7 @@ const sem::Struct* build_frexp_result(MatchState& state, const sem::Type* el) {
|
||||
display_name = "__frexp_result";
|
||||
}
|
||||
auto* i32 = state.builder.create<sem::I32>();
|
||||
return build_struct(state, display_name, {{"sig", el}, {"exp", i32}});
|
||||
return build_struct(state, display_name, {{"fract", el}, {"exp", i32}});
|
||||
}
|
||||
const sem::Struct* build_frexp_result_vec(MatchState& state, Number& n, const sem::Type* el) {
|
||||
std::string display_name;
|
||||
@@ -867,7 +867,7 @@ const sem::Struct* build_frexp_result_vec(MatchState& state, Number& n, const se
|
||||
}
|
||||
auto* vec = state.builder.create<sem::Vector>(el, n.Value());
|
||||
auto* vec_i32 = state.builder.create<sem::Vector>(state.builder.create<sem::I32>(), n.Value());
|
||||
return build_struct(state, display_name, {{"sig", vec}, {"exp", vec_i32}});
|
||||
return build_struct(state, display_name, {{"fract", vec}, {"exp", vec_i32}});
|
||||
}
|
||||
const sem::Struct* build_atomic_compare_exchange_result(MatchState& state, const sem::Type* ty) {
|
||||
return build_struct(
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -86,6 +86,7 @@
|
||||
#include "src/tint/utils/math.h"
|
||||
#include "src/tint/utils/reverse.h"
|
||||
#include "src/tint/utils/scoped_assignment.h"
|
||||
#include "src/tint/utils/string.h"
|
||||
#include "src/tint/utils/transform.h"
|
||||
#include "src/tint/utils/vector.h"
|
||||
|
||||
@@ -2380,18 +2381,29 @@ sem::Expression* Resolver::MemberAccessor(const ast::MemberAccessorExpression* e
|
||||
const sem::StructMember* member = nullptr;
|
||||
for (auto* m : str->Members()) {
|
||||
if (m->Name() == symbol) {
|
||||
ty = m->Type();
|
||||
member = m;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ty == nullptr) {
|
||||
// TODO(crbug.com/tint/1757): Remove
|
||||
if (utils::HasPrefix(builder_->Symbols().NameFor(str->Name()), "__frexp_result")) {
|
||||
if (builder_->Symbols().NameFor(symbol) == "sig") {
|
||||
AddWarning(
|
||||
"use of deprecated language feature: 'sig' has been renamed to 'fract'",
|
||||
expr->member->source);
|
||||
member = str->Members()[0];
|
||||
}
|
||||
}
|
||||
|
||||
if (member == nullptr) {
|
||||
AddError("struct member " + builder_->Symbols().NameFor(symbol) + " not found",
|
||||
expr->source);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ty = member->Type();
|
||||
|
||||
// If we're extracting from a reference, we return a reference.
|
||||
if (auto* ref = structure->As<sem::Reference>()) {
|
||||
ty = builder_->create<sem::Reference>(ty, ref->AddressSpace(), ref->Access());
|
||||
|
||||
Reference in New Issue
Block a user