Remove ImplResult.
The ImplResult type is the same as ConstEval::Result after recent
changes. This CL replaces all usages and removes ImplResult.
Bug: tint:1718
Change-Id: If424f3d00f953d97a339de8ae18c94083f3346bf
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/114162
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/resolver/const_eval.cc b/src/tint/resolver/const_eval.cc
index 27d2592..0481b4a 100644
--- a/src/tint/resolver/const_eval.cc
+++ b/src/tint/resolver/const_eval.cc
@@ -232,25 +232,22 @@
return count;
}
-/// A result templated with a constant::Constant.
-using ImplResult = utils::Result<const constant::Constant*>;
-
// Forward declaration
const constant::Constant* CreateComposite(ProgramBuilder& builder,
const type::Type* type,
utils::VectorRef<const constant::Constant*> elements);
template <typename T>
-ImplResult ScalarConvert(const constant::Scalar<T>* scalar,
- ProgramBuilder& builder,
- const type::Type* target_ty,
- const Source& source) {
+ConstEval::Result ScalarConvert(const constant::Scalar<T>* scalar,
+ ProgramBuilder& builder,
+ const type::Type* target_ty,
+ const Source& source) {
TINT_BEGIN_DISABLE_WARNING(UNREACHABLE_CODE);
if (target_ty == scalar->type) {
// If the types are identical, then no conversion is needed.
return scalar;
}
- return ZeroTypeDispatch(target_ty, [&](auto zero_to) -> ImplResult {
+ return ZeroTypeDispatch(target_ty, [&](auto zero_to) -> ConstEval::Result {
// `value` is the source value.
// `FROM` is the source type.
// `TO` is the target type.
@@ -299,15 +296,15 @@
}
// Forward declare
-ImplResult ConvertInternal(const constant::Constant* c,
- ProgramBuilder& builder,
- const type::Type* target_ty,
- const Source& source);
+ConstEval::Result ConvertInternal(const constant::Constant* c,
+ ProgramBuilder& builder,
+ const type::Type* target_ty,
+ const Source& source);
-ImplResult SplatConvert(const constant::Splat* splat,
- ProgramBuilder& builder,
- const type::Type* target_ty,
- const Source& source) {
+ConstEval::Result SplatConvert(const constant::Splat* splat,
+ ProgramBuilder& builder,
+ const type::Type* target_ty,
+ const Source& source) {
// Convert the single splatted element type.
auto conv_el = ConvertInternal(splat->el, builder, type::Type::ElementOf(target_ty), source);
if (!conv_el) {
@@ -319,10 +316,10 @@
return builder.create<constant::Splat>(target_ty, conv_el.Get(), splat->count);
}
-ImplResult CompositeConvert(const constant::Composite* composite,
- ProgramBuilder& builder,
- const type::Type* target_ty,
- const Source& source) {
+ConstEval::Result CompositeConvert(const constant::Composite* composite,
+ ProgramBuilder& builder,
+ const type::Type* target_ty,
+ const Source& source) {
// Convert each of the composite element types.
utils::Vector<const constant::Constant*, 4> conv_els;
conv_els.Reserve(composite->elements.Length());
@@ -353,10 +350,10 @@
return CreateComposite(builder, target_ty, std::move(conv_els));
}
-ImplResult ConvertInternal(const constant::Constant* c,
- ProgramBuilder& builder,
- const type::Type* target_ty,
- const Source& source) {
+ConstEval::Result ConvertInternal(const constant::Constant* c,
+ ProgramBuilder& builder,
+ const type::Type* target_ty,
+ const Source& source) {
return Switch(
c,
[&](const constant::Scalar<tint::AFloat>* val) {
@@ -388,7 +385,10 @@
/// CreateScalar constructs and returns an constant::Scalar<T>.
template <typename T>
-ImplResult CreateScalar(ProgramBuilder& builder, const Source& source, const type::Type* t, T v) {
+ConstEval::Result CreateScalar(ProgramBuilder& builder,
+ const Source& source,
+ const type::Type* t,
+ T v) {
static_assert(IsNumber<T> || std::is_same_v<T, bool>, "T must be a Number or bool");
TINT_ASSERT(Resolver, t->is_scalar());
@@ -544,11 +544,11 @@
namespace detail {
/// Implementation of TransformElements
template <typename F, typename... CONSTANTS>
-ImplResult TransformElements(ProgramBuilder& builder,
- const type::Type* composite_ty,
- F&& f,
- size_t index,
- CONSTANTS&&... cs) {
+ConstEval::Result TransformElements(ProgramBuilder& builder,
+ const type::Type* composite_ty,
+ F&& f,
+ size_t index,
+ CONSTANTS&&... cs) {
uint32_t n = 0;
auto* ty = First(cs...)->Type();
auto* el_ty = type::Type::ElementOf(ty, &n);
@@ -581,10 +581,10 @@
/// If `f`'s last argument is a `size_t`, then the index of the most deeply nested element inside
/// the most deeply nested aggregate type will be passed in.
template <typename F, typename... CONSTANTS>
-ImplResult TransformElements(ProgramBuilder& builder,
- const type::Type* composite_ty,
- F&& f,
- CONSTANTS&&... cs) {
+ConstEval::Result TransformElements(ProgramBuilder& builder,
+ const type::Type* composite_ty,
+ F&& f,
+ CONSTANTS&&... cs) {
return detail::TransformElements(builder, composite_ty, f, 0, cs...);
}
@@ -593,11 +593,11 @@
/// Unlike TransformElements, this function handles the constants being of different arity, e.g.
/// vector-scalar, scalar-vector.
template <typename F>
-ImplResult TransformBinaryElements(ProgramBuilder& builder,
- const type::Type* composite_ty,
- F&& f,
- const constant::Constant* c0,
- const constant::Constant* c1) {
+ConstEval::Result TransformBinaryElements(ProgramBuilder& builder,
+ const type::Type* composite_ty,
+ F&& f,
+ const constant::Constant* c0,
+ const constant::Constant* c1) {
uint32_t n0 = 0;
type::Type::ElementOf(c0->Type(), &n0);
uint32_t n1 = 0;
@@ -1027,7 +1027,7 @@
}
auto ConstEval::SqrtFunc(const Source& source, const type::Type* elem_ty) {
- return [=](auto v) -> ImplResult {
+ return [=](auto v) -> ConstEval::Result {
if (auto r = Sqrt(source, v)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1041,7 +1041,7 @@
}
auto ConstEval::ClampFunc(const Source& source, const type::Type* elem_ty) {
- return [=](auto e, auto low, auto high) -> ImplResult {
+ return [=](auto e, auto low, auto high) -> ConstEval::Result {
if (auto r = Clamp(source, e, low, high)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1050,7 +1050,7 @@
}
auto ConstEval::AddFunc(const Source& source, const type::Type* elem_ty) {
- return [=](auto a1, auto a2) -> ImplResult {
+ return [=](auto a1, auto a2) -> ConstEval::Result {
if (auto r = Add(source, a1, a2)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1059,7 +1059,7 @@
}
auto ConstEval::SubFunc(const Source& source, const type::Type* elem_ty) {
- return [=](auto a1, auto a2) -> ImplResult {
+ return [=](auto a1, auto a2) -> ConstEval::Result {
if (auto r = Sub(source, a1, a2)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1068,7 +1068,7 @@
}
auto ConstEval::MulFunc(const Source& source, const type::Type* elem_ty) {
- return [=](auto a1, auto a2) -> ImplResult {
+ return [=](auto a1, auto a2) -> ConstEval::Result {
if (auto r = Mul(source, a1, a2)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1077,7 +1077,7 @@
}
auto ConstEval::DivFunc(const Source& source, const type::Type* elem_ty) {
- return [=](auto a1, auto a2) -> ImplResult {
+ return [=](auto a1, auto a2) -> ConstEval::Result {
if (auto r = Div(source, a1, a2)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1086,7 +1086,7 @@
}
auto ConstEval::ModFunc(const Source& source, const type::Type* elem_ty) {
- return [=](auto a1, auto a2) -> ImplResult {
+ return [=](auto a1, auto a2) -> ConstEval::Result {
if (auto r = Mod(source, a1, a2)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1095,7 +1095,7 @@
}
auto ConstEval::Dot2Func(const Source& source, const type::Type* elem_ty) {
- return [=](auto a1, auto a2, auto b1, auto b2) -> ImplResult {
+ return [=](auto a1, auto a2, auto b1, auto b2) -> ConstEval::Result {
if (auto r = Dot2(source, a1, a2, b1, b2)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1104,7 +1104,7 @@
}
auto ConstEval::Dot3Func(const Source& source, const type::Type* elem_ty) {
- return [=](auto a1, auto a2, auto a3, auto b1, auto b2, auto b3) -> ImplResult {
+ return [=](auto a1, auto a2, auto a3, auto b1, auto b2, auto b3) -> ConstEval::Result {
if (auto r = Dot3(source, a1, a2, a3, b1, b2, b3)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1113,13 +1113,13 @@
}
auto ConstEval::Dot4Func(const Source& source, const type::Type* elem_ty) {
- return
- [=](auto a1, auto a2, auto a3, auto a4, auto b1, auto b2, auto b3, auto b4) -> ImplResult {
- if (auto r = Dot4(source, a1, a2, a3, a4, b1, b2, b3, b4)) {
- return CreateScalar(builder, source, elem_ty, r.Get());
- }
- return utils::Failure;
- };
+ return [=](auto a1, auto a2, auto a3, auto a4, auto b1, auto b2, auto b3,
+ auto b4) -> ConstEval::Result {
+ if (auto r = Dot4(source, a1, a2, a3, a4, b1, b2, b3, b4)) {
+ return CreateScalar(builder, source, elem_ty, r.Get());
+ }
+ return utils::Failure;
+ };
}
ConstEval::Result ConstEval::Dot(const Source& source,
@@ -1191,7 +1191,7 @@
}
auto ConstEval::Det2Func(const Source& source, const type::Type* elem_ty) {
- return [=](auto a, auto b, auto c, auto d) -> ImplResult {
+ return [=](auto a, auto b, auto c, auto d) -> ConstEval::Result {
if (auto r = Det2(source, a, b, c, d)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1200,18 +1200,18 @@
}
auto ConstEval::Det3Func(const Source& source, const type::Type* elem_ty) {
- return
- [=](auto a, auto b, auto c, auto d, auto e, auto f, auto g, auto h, auto i) -> ImplResult {
- if (auto r = Det3(source, a, b, c, d, e, f, g, h, i)) {
- return CreateScalar(builder, source, elem_ty, r.Get());
- }
- return utils::Failure;
- };
+ return [=](auto a, auto b, auto c, auto d, auto e, auto f, auto g, auto h,
+ auto i) -> ConstEval::Result {
+ if (auto r = Det3(source, a, b, c, d, e, f, g, h, i)) {
+ return CreateScalar(builder, source, elem_ty, r.Get());
+ }
+ return utils::Failure;
+ };
}
auto ConstEval::Det4Func(const Source& source, const type::Type* elem_ty) {
return [=](auto a, auto b, auto c, auto d, auto e, auto f, auto g, auto h, auto i, auto j,
- auto k, auto l, auto m, auto n, auto o, auto p) -> ImplResult {
+ auto k, auto l, auto m, auto n, auto o, auto p) -> ConstEval::Result {
if (auto r = Det4(source, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)) {
return CreateScalar(builder, source, elem_ty, r.Get());
}
@@ -1226,7 +1226,7 @@
[&](const ast::BoolLiteralExpression* lit) {
return CreateScalar(builder, source, ty, lit->value);
},
- [&](const ast::IntLiteralExpression* lit) -> ImplResult {
+ [&](const ast::IntLiteralExpression* lit) -> ConstEval::Result {
switch (lit->suffix) {
case ast::IntLiteralExpression::Suffix::kNone:
return CreateScalar(builder, source, ty, AInt(lit->value));
@@ -1237,7 +1237,7 @@
}
return nullptr;
},
- [&](const ast::FloatLiteralExpression* lit) -> ImplResult {
+ [&](const ast::FloatLiteralExpression* lit) -> ConstEval::Result {
switch (lit->suffix) {
case ast::FloatLiteralExpression::Suffix::kNone:
return CreateScalar(builder, source, ty, AFloat(lit->value));
@@ -1500,7 +1500,7 @@
auto* elem_ty = vec_ty->type();
auto dot = [&](const constant::Constant* m, size_t row, const constant::Constant* v) {
- ImplResult result;
+ ConstEval::Result result;
switch (mat_ty->columns()) {
case 2:
result = Dispatch_fa_f32_f16(Dot2Func(source, elem_ty), //
@@ -1550,7 +1550,7 @@
auto* elem_ty = vec_ty->type();
auto dot = [&](const constant::Constant* v, const constant::Constant* m, size_t col) {
- ImplResult result;
+ ConstEval::Result result;
switch (mat_ty->rows()) {
case 2:
result = Dispatch_fa_f32_f16(Dot2Func(source, elem_ty), //
@@ -1607,7 +1607,7 @@
auto m1e = [&](size_t r, size_t c) { return m1->Index(c)->Index(r); };
auto m2e = [&](size_t r, size_t c) { return m2->Index(c)->Index(r); };
- ImplResult result;
+ ConstEval::Result result;
switch (mat1_ty->columns()) {
case 2:
result = Dispatch_fa_f32_f16(Dot2Func(source, elem_ty), //
@@ -1682,7 +1682,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), i == j);
};
return Dispatch_fia_fiu32_f16_bool(create, c0, c1);
@@ -1695,7 +1695,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), i != j);
};
return Dispatch_fia_fiu32_f16_bool(create, c0, c1);
@@ -1708,7 +1708,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), i < j);
};
return Dispatch_fia_fiu32_f16(create, c0, c1);
@@ -1721,7 +1721,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), i > j);
};
return Dispatch_fia_fiu32_f16(create, c0, c1);
@@ -1734,7 +1734,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), i <= j);
};
return Dispatch_fia_fiu32_f16(create, c0, c1);
@@ -1747,7 +1747,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), i >= j);
};
return Dispatch_fia_fiu32_f16(create, c0, c1);
@@ -1776,7 +1776,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
using T = decltype(i);
T result;
if constexpr (std::is_same_v<T, bool>) {
@@ -1796,7 +1796,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
using T = decltype(i);
T result;
if constexpr (std::is_same_v<T, bool>) {
@@ -1816,7 +1816,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto i, auto j) -> ImplResult {
+ auto create = [&](auto i, auto j) -> ConstEval::Result {
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty),
decltype(i){i ^ j});
};
@@ -1830,7 +1830,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto e1, auto e2) -> ImplResult {
+ auto create = [&](auto e1, auto e2) -> ConstEval::Result {
using NumberT = decltype(e1);
using T = UnwrapNumber<NumberT>;
using UT = std::make_unsigned_t<T>;
@@ -1916,7 +1916,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto e1, auto e2) -> ImplResult {
+ auto create = [&](auto e1, auto e2) -> ConstEval::Result {
using NumberT = decltype(e1);
using T = UnwrapNumber<NumberT>;
using UT = std::make_unsigned_t<T>;
@@ -2005,7 +2005,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
if (i < NumberT(-1.0) || i > NumberT(1.0)) {
AddError("acos must be called with a value in the range [-1 .. 1] (inclusive)",
@@ -2023,7 +2023,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
if (i < NumberT(1.0)) {
AddError("acosh must be called with a value >= 1.0", source);
@@ -2053,7 +2053,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
if (i < NumberT(-1.0) || i > NumberT(1.0)) {
AddError("asin must be called with a value in the range [-1 .. 1] (inclusive)",
@@ -2096,7 +2096,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
if (i <= NumberT(-1.0) || i >= NumberT(1.0)) {
AddError("atanh must be called with a value in the range (-1 .. 1) (exclusive)",
@@ -2150,7 +2150,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
return CreateScalar(builder, source, c0->Type(), NumberT(std::cos(i.value)));
};
@@ -2163,7 +2163,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
return CreateScalar(builder, source, c0->Type(), NumberT(std::cosh(i.value)));
};
@@ -2273,7 +2273,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto e) -> ImplResult {
+ auto create = [&](auto e) -> ConstEval::Result {
using NumberT = decltype(e);
using T = UnwrapNumber<NumberT>;
@@ -2334,7 +2334,7 @@
ConstEval::Result ConstEval::distance(const type::Type* ty,
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
- auto err = [&]() -> ImplResult {
+ auto err = [&]() -> ConstEval::Result {
AddNote("when calculating distance", source);
return utils::Failure;
};
@@ -2365,7 +2365,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto e0) -> ImplResult {
+ auto create = [&](auto e0) -> ConstEval::Result {
using NumberT = decltype(e0);
auto val = NumberT(std::exp(e0));
if (!std::isfinite(val.value)) {
@@ -2383,7 +2383,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto e0) -> ImplResult {
+ auto create = [&](auto e0) -> ConstEval::Result {
using NumberT = decltype(e0);
auto val = NumberT(std::exp2(e0));
if (!std::isfinite(val.value)) {
@@ -2401,7 +2401,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto in_e) -> ImplResult {
+ auto create = [&](auto in_e) -> ConstEval::Result {
using NumberT = decltype(in_e);
using T = UnwrapNumber<NumberT>;
using UT = std::make_unsigned_t<T>;
@@ -2558,7 +2558,7 @@
const Source& source) {
auto transform = [&](const constant::Constant* c1, const constant::Constant* c2,
const constant::Constant* c3) {
- auto create = [&](auto e1, auto e2, auto e3) -> ImplResult {
+ auto create = [&](auto e1, auto e2, auto e3) -> ConstEval::Result {
auto err_msg = [&] {
AddNote("when calculating fma", source);
return utils::Failure;
@@ -2584,7 +2584,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c1) {
- auto create = [&](auto e) -> ImplResult {
+ auto create = [&](auto e) -> ConstEval::Result {
using NumberT = decltype(e);
auto r = e - std::floor(e);
return CreateScalar(builder, source, c1->Type(), NumberT{r});
@@ -2600,8 +2600,8 @@
auto* arg = args[0];
struct FractExp {
- ImplResult fract;
- ImplResult exp;
+ ConstEval::Result fract;
+ ConstEval::Result exp;
};
auto scalar = [&](const constant::Constant* s) {
@@ -2671,7 +2671,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto in_e, auto in_newbits) -> ImplResult {
+ auto create = [&](auto in_e, auto in_newbits) -> ConstEval::Result {
using NumberT = decltype(in_e);
using T = UnwrapNumber<NumberT>;
using UT = std::make_unsigned_t<T>;
@@ -2723,7 +2723,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto e) -> ImplResult {
+ auto create = [&](auto e) -> ConstEval::Result {
using NumberT = decltype(e);
if (e <= NumberT(0)) {
@@ -2767,7 +2767,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto v) -> ImplResult {
+ auto create = [&](auto v) -> ConstEval::Result {
using NumberT = decltype(v);
if (v <= NumberT(0)) {
AddError("log must be called with a value > 0", source);
@@ -2784,7 +2784,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto v) -> ImplResult {
+ auto create = [&](auto v) -> ConstEval::Result {
using NumberT = decltype(v);
if (v <= NumberT(0)) {
AddError("log2 must be called with a value > 0", source);
@@ -2825,7 +2825,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1, size_t index) {
- auto create = [&](auto e1, auto e2) -> ImplResult {
+ auto create = [&](auto e1, auto e2) -> ConstEval::Result {
using NumberT = decltype(e1);
// e3 is either a vector or a scalar
NumberT e3;
@@ -3019,7 +3019,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto e1, auto e2) -> ImplResult {
+ auto create = [&](auto e1, auto e2) -> ConstEval::Result {
auto r = CheckedPow(e1, e2);
if (!r) {
AddError(OverflowErrorMessage(e1, "^", e2), source);
@@ -3036,7 +3036,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto e) -> ImplResult {
+ auto create = [&](auto e) -> ConstEval::Result {
using NumberT = decltype(e);
using T = UnwrapNumber<NumberT>;
@@ -3076,7 +3076,7 @@
}
// 2 * dot(e2, e1)
- auto mul2 = [&](auto v) -> ImplResult {
+ auto mul2 = [&](auto v) -> ConstEval::Result {
using NumberT = decltype(v);
return CreateScalar(builder, source, el_ty, NumberT{NumberT{2} * v});
};
@@ -3203,7 +3203,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto in_e) -> ImplResult {
+ auto create = [&](auto in_e) -> ConstEval::Result {
using NumberT = decltype(in_e);
using T = UnwrapNumber<NumberT>;
using UT = std::make_unsigned_t<T>;
@@ -3281,7 +3281,7 @@
const Source& source) {
auto cond = args[2]->As<bool>();
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto f, auto t) -> ImplResult {
+ auto create = [&](auto f, auto t) -> ConstEval::Result {
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), cond ? t : f);
};
return Dispatch_fia_fiu32_f16_bool(create, c0, c1);
@@ -3294,7 +3294,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1, size_t index) {
- auto create = [&](auto f, auto t) -> ImplResult {
+ auto create = [&](auto f, auto t) -> ConstEval::Result {
// Get corresponding bool value at the current vector value index
auto cond = args[2]->Index(index)->As<bool>();
return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), cond ? t : f);
@@ -3309,7 +3309,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto e) -> ImplResult {
+ auto create = [&](auto e) -> ConstEval::Result {
using NumberT = decltype(e);
NumberT result;
NumberT zero{0.0};
@@ -3331,7 +3331,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
return CreateScalar(builder, source, c0->Type(), NumberT(std::sin(i.value)));
};
@@ -3344,7 +3344,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
return CreateScalar(builder, source, c0->Type(), NumberT(std::sinh(i.value)));
};
@@ -3358,7 +3358,7 @@
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1,
const constant::Constant* c2) {
- auto create = [&](auto low, auto high, auto x) -> ImplResult {
+ auto create = [&](auto low, auto high, auto x) -> ConstEval::Result {
using NumberT = decltype(low);
auto err = [&] {
@@ -3408,7 +3408,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
- auto create = [&](auto edge, auto x) -> ImplResult {
+ auto create = [&](auto edge, auto x) -> ConstEval::Result {
using NumberT = decltype(edge);
NumberT result = x.value < edge.value ? NumberT(0.0) : NumberT(1.0);
return CreateScalar(builder, source, c0->Type(), result);
@@ -3432,7 +3432,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
return CreateScalar(builder, source, c0->Type(), NumberT(std::tan(i.value)));
};
@@ -3445,7 +3445,7 @@
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
auto transform = [&](const constant::Constant* c0) {
- auto create = [&](auto i) -> ImplResult {
+ auto create = [&](auto i) -> ConstEval::Result {
using NumberT = decltype(i);
return CreateScalar(builder, source, c0->Type(), NumberT(std::tanh(i.value)));
};
@@ -3591,7 +3591,7 @@
ConstEval::Result ConstEval::quantizeToF16(const type::Type* ty,
utils::VectorRef<const constant::Constant*> args,
const Source& source) {
- auto transform = [&](const constant::Constant* c) -> ImplResult {
+ auto transform = [&](const constant::Constant* c) -> ConstEval::Result {
auto value = c->As<f32>();
auto conv = CheckedConvert<f32>(f16(value));
if (!conv) {