Skip to content

Commit

Permalink
[DSLX:cleanup] Follow through on renaming TODO, rename to TypeAndPara…
Browse files Browse the repository at this point in the history
…metricEnv.

PiperOrigin-RevId: 548804824
  • Loading branch information
cdleary authored and copybara-github committed Jul 17, 2023
1 parent 9862b35 commit ea54c50
Show file tree
Hide file tree
Showing 13 changed files with 158 additions and 134 deletions.
2 changes: 1 addition & 1 deletion xls/dslx/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ cc_library(
"//xls/dslx/type_system:deduce_ctx",
"//xls/dslx/type_system:parametric_constraint",
"//xls/dslx/type_system:parametric_instantiator",
"//xls/dslx/type_system:type_and_bindings",
"//xls/dslx/type_system:type_and_parametric_env",
"//xls/dslx/type_system:unwrap_meta_type",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/container:flat_hash_set",
Expand Down
172 changes: 89 additions & 83 deletions xls/dslx/dslx_builtins.cc

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions xls/dslx/dslx_builtins.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#include "xls/dslx/type_system/concrete_type.h"
#include "xls/dslx/type_system/deduce_ctx.h"
#include "xls/dslx/type_system/parametric_constraint.h"
#include "xls/dslx/type_system/type_and_bindings.h"
#include "xls/dslx/type_system/type_and_parametric_env.h"

namespace xls::dslx {

Expand Down Expand Up @@ -58,7 +58,7 @@ struct SignatureData {

// Deduction rule that determines the FunctionType and any associated symbolic
// bindings for a parametric builtin function.
using SignatureFn = std::function<absl::StatusOr<TypeAndBindings>(
using SignatureFn = std::function<absl::StatusOr<TypeAndParametricEnv>(
const SignatureData&, DeduceCtx*)>;

// Returns a function that produces the type of builtin_name.
Expand Down
20 changes: 12 additions & 8 deletions xls/dslx/type_system/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -60,18 +60,17 @@ cc_library(
hdrs = ["deduce_ctx.h"],
deps = [
":concrete_type",
":type_and_bindings",
":parametric_env",
":type_and_parametric_env",
":type_mismatch_error_data",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings:str_format",
"//xls/common:string_to_int",
"//xls/common/status:ret_check",
"//xls/dslx:errors",
"//xls/dslx:import_routines",
"//xls/dslx:interp_bindings",
"//xls/dslx:warning_collector",
"//xls/dslx/frontend:ast",
],
)

Expand All @@ -85,7 +84,7 @@ cc_library(
":deduce_ctx",
":parametric_constraint",
":parametric_instantiator",
":type_and_bindings",
":type_and_parametric_env",
":unwrap_meta_type",
"@com_google_absl//absl/algorithm:container",
"@com_google_absl//absl/cleanup",
Expand All @@ -98,6 +97,7 @@ cc_library(
"@com_google_absl//absl/strings:str_format",
"@com_google_absl//absl/types:span",
"@com_google_absl//absl/types:variant",
"//xls/common:casts",
"//xls/common:visitor",
"//xls/common/status:ret_check",
"//xls/common/status:status_macros",
Expand Down Expand Up @@ -131,6 +131,9 @@ cc_library(
":deduce_ctx",
":parametric_bind",
":parametric_constraint",
":parametric_env",
":type_and_parametric_env",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"//xls/common/status:ret_check",
"//xls/dslx:constexpr_evaluator",
Expand All @@ -150,7 +153,7 @@ cc_library(
":deduce_ctx",
":parametric_constraint",
":parametric_instantiator_internal",
":type_and_bindings",
":type_and_parametric_env",
":type_info",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/memory",
Expand Down Expand Up @@ -198,6 +201,7 @@ cc_library(
":maybe_explain_error",
":parametric_env",
":parametric_instantiator",
":type_and_parametric_env",
":unwrap_meta_type",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/status",
Expand Down Expand Up @@ -370,8 +374,8 @@ cc_test(
)

cc_library(
name = "type_and_bindings",
hdrs = ["type_and_bindings.h"],
name = "type_and_parametric_env",
hdrs = ["type_and_parametric_env.h"],
deps = [
"//xls/dslx/type_system:concrete_type",
"//xls/dslx/type_system:parametric_env",
Expand Down
25 changes: 13 additions & 12 deletions xls/dslx/type_system/deduce.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include "absl/strings/str_join.h"
#include "absl/types/span.h"
#include "absl/types/variant.h"
#include "xls/common/casts.h"
#include "xls/common/status/ret_check.h"
#include "xls/common/status/status_macros.h"
#include "xls/common/visitor.h"
Expand All @@ -53,7 +54,7 @@
#include "xls/dslx/type_system/concrete_type_zero_value.h"
#include "xls/dslx/type_system/deduce_ctx.h"
#include "xls/dslx/type_system/parametric_instantiator.h"
#include "xls/dslx/type_system/type_and_bindings.h"
#include "xls/dslx/type_system/type_and_parametric_env.h"
#include "xls/dslx/type_system/unwrap_meta_type.h"

namespace xls::dslx {
Expand Down Expand Up @@ -2089,7 +2090,7 @@ absl::StatusOr<std::unique_ptr<ConcreteType>> DeduceStructInstance(
std::vector<ParametricConstraint> parametric_constraints,
ParametricBindingsToConstraints(struct_def->parametric_bindings(), ctx));
XLS_ASSIGN_OR_RETURN(
TypeAndBindings tab,
TypeAndParametricEnv tab,
InstantiateStruct(node->span(), *struct_type, validated.args,
validated.member_types, ctx, parametric_constraints));

Expand Down Expand Up @@ -2173,7 +2174,7 @@ absl::StatusOr<std::unique_ptr<ConcreteType>> DeduceSplatStructInstance(
std::vector<ParametricConstraint> parametric_constraints,
ParametricBindingsToConstraints(struct_def->parametric_bindings(), ctx));
XLS_ASSIGN_OR_RETURN(
TypeAndBindings tab,
TypeAndParametricEnv tab,
InstantiateStruct(node->span(), *struct_type, validated.args,
validated.member_types, ctx, parametric_constraints));

Expand Down Expand Up @@ -2546,7 +2547,7 @@ absl::StatusOr<std::unique_ptr<ConcreteType>> DeduceRange(const Range* node,

// Generic function to do the heavy lifting of deducing the type of an
// Invocation or Spawn's constituent functions.
absl::StatusOr<TypeAndBindings> DeduceInstantiation(
absl::StatusOr<TypeAndParametricEnv> DeduceInstantiation(
DeduceCtx* ctx, const Invocation* invocation,
const std::vector<InstantiateArg>& args,
const std::function<absl::StatusOr<Function*>(const Instantiation*,
Expand All @@ -2570,10 +2571,10 @@ absl::StatusOr<TypeAndBindings> DeduceInstantiation(
// top.
XLS_ASSIGN_OR_RETURN(std::unique_ptr<ConcreteType> callee_type,
ctx->Deduce(invocation->callee()));
return TypeAndBindings{down_cast<FunctionType*>(callee_type.get())
->return_type()
.CloneToUnique(),
{}};
return TypeAndParametricEnv{down_cast<FunctionType*>(callee_type.get())
->return_type()
.CloneToUnique(),
{}};
}

absl::StatusOr<std::unique_ptr<ConcreteType>> DeduceSpawn(const Spawn* node,
Expand Down Expand Up @@ -2616,7 +2617,7 @@ absl::StatusOr<std::unique_ptr<ConcreteType>> DeduceSpawn(const Spawn* node,
};

XLS_ASSIGN_OR_RETURN(
TypeAndBindings init_tab,
TypeAndParametricEnv init_tab,
DeduceInstantiation(ctx, down_cast<Invocation*>(node->next()->args()[0]),
{}, resolve_init, {}));

Expand Down Expand Up @@ -2659,7 +2660,7 @@ absl::StatusOr<std::unique_ptr<ConcreteType>> DeduceSpawn(const Spawn* node,
down_cast<Invocation*>(node->next()->args()[0]),
/*concrete_type=*/nullptr));

XLS_ASSIGN_OR_RETURN(TypeAndBindings tab,
XLS_ASSIGN_OR_RETURN(TypeAndParametricEnv tab,
DeduceInstantiation(ctx, node->config(), config_args,
resolve_config, constexpr_env));

Expand Down Expand Up @@ -2706,7 +2707,7 @@ absl::StatusOr<std::unique_ptr<ConcreteType>> DeduceMapInvocation(
// Then get the type and bindings for the mapping fn.
Invocation* element_invocation =
CreateElementInvocation(ctx->module(), node->span(), args[1], args[0]);
XLS_ASSIGN_OR_RETURN(TypeAndBindings tab,
XLS_ASSIGN_OR_RETURN(TypeAndParametricEnv tab,
ctx->typecheck_invocation()(ctx, element_invocation,
/*constexpr_env=*/{}));
const ParametricEnv& caller_bindings =
Expand Down Expand Up @@ -2768,7 +2769,7 @@ absl::StatusOr<std::unique_ptr<ConcreteType>> DeduceInvocation(
return fn;
};

XLS_ASSIGN_OR_RETURN(TypeAndBindings tab,
XLS_ASSIGN_OR_RETURN(TypeAndParametricEnv tab,
DeduceInstantiation(ctx, node, args, resolve_fn));

ConcreteType* ct = ctx->type_info()->GetItem(node->callee()).value();
Expand Down
10 changes: 6 additions & 4 deletions xls/dslx/type_system/deduce_ctx.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@
#include "absl/container/flat_hash_map.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "xls/dslx/frontend/ast.h"
#include "xls/dslx/import_routines.h"
#include "xls/dslx/type_system/concrete_type.h"
#include "xls/dslx/type_system/type_and_bindings.h"
#include "xls/dslx/type_system/type_and_parametric_env.h"
#include "xls/dslx/type_system/type_mismatch_error_data.h"
#include "xls/dslx/warning_collector.h"

Expand Down Expand Up @@ -115,9 +116,10 @@ using DeduceFn = std::function<absl::StatusOr<std::unique_ptr<ConcreteType>>(
using TypecheckFunctionFn = std::function<absl::Status(Function*, DeduceCtx*)>;

// Similar to TypecheckFunctionFn, but for a [parametric] invocation.
using TypecheckInvocationFn = std::function<absl::StatusOr<TypeAndBindings>(
DeduceCtx* ctx, const Invocation*,
const absl::flat_hash_map<const Param*, InterpValue>&)>;
using TypecheckInvocationFn =
std::function<absl::StatusOr<TypeAndParametricEnv>(
DeduceCtx* ctx, const Invocation*,
const absl::flat_hash_map<const Param*, InterpValue>&)>;

// A single object that contains all the state/callbacks used in the
// typechecking process.
Expand Down
5 changes: 3 additions & 2 deletions xls/dslx/type_system/parametric_instantiator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "absl/strings/str_join.h"
#include "absl/types/span.h"
#include "xls/dslx/type_system/parametric_instantiator_internal.h"
#include "xls/dslx/type_system/type_and_parametric_env.h"

namespace xls::dslx {
namespace {
Expand Down Expand Up @@ -74,7 +75,7 @@ std::string ToString(

} // namespace

absl::StatusOr<TypeAndBindings> InstantiateFunction(
absl::StatusOr<TypeAndParametricEnv> InstantiateFunction(
Span span, const FunctionType& function_type,
absl::Span<const InstantiateArg> args, DeduceCtx* ctx,
absl::Span<const ParametricConstraint> parametric_constraints,
Expand All @@ -92,7 +93,7 @@ absl::StatusOr<TypeAndBindings> InstantiateFunction(
return instantiator->Instantiate();
}

absl::StatusOr<TypeAndBindings> InstantiateStruct(
absl::StatusOr<TypeAndParametricEnv> InstantiateStruct(
Span span, const StructType& struct_type,
absl::Span<const InstantiateArg> args,
absl::Span<std::unique_ptr<ConcreteType> const> member_types,
Expand Down
6 changes: 3 additions & 3 deletions xls/dslx/type_system/parametric_instantiator.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#include "xls/dslx/type_system/concrete_type.h"
#include "xls/dslx/type_system/deduce_ctx.h"
#include "xls/dslx/type_system/parametric_constraint.h"
#include "xls/dslx/type_system/type_and_bindings.h"
#include "xls/dslx/type_system/type_and_parametric_env.h"

namespace xls::dslx {

Expand All @@ -49,7 +49,7 @@ namespace xls::dslx {
// parametric_constraints expressions; e.g. for the example above if the
// caller invoked `const M: u32 = 42; f<M>(x)`, this environment would
// be `{N: u32:42}` (since M is passed as the N value for the callee).
absl::StatusOr<TypeAndBindings> InstantiateFunction(
absl::StatusOr<TypeAndParametricEnv> InstantiateFunction(
Span span, const FunctionType& function_type,
absl::Span<const InstantiateArg> args, DeduceCtx* ctx,
absl::Span<const ParametricConstraint> parametric_constraints,
Expand All @@ -58,7 +58,7 @@ absl::StatusOr<TypeAndBindings> InstantiateFunction(
// Instantiates a struct using the bindings derived from args' types.
//
// See InstantiateFunction() above.
absl::StatusOr<TypeAndBindings> InstantiateStruct(
absl::StatusOr<TypeAndParametricEnv> InstantiateStruct(
Span span, const StructType& struct_type,
absl::Span<const InstantiateArg> args,
absl::Span<std::unique_ptr<ConcreteType> const> member_types,
Expand Down
16 changes: 12 additions & 4 deletions xls/dslx/type_system/parametric_instantiator_internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,19 @@

#include "xls/dslx/type_system/parametric_instantiator_internal.h"

#include <utility>

#include "absl/status/statusor.h"
#include "absl/strings/match.h"
#include "xls/common/status/ret_check.h"
#include "xls/dslx/bytecode/bytecode_emitter.h"
#include "xls/dslx/bytecode/bytecode_interpreter.h"
#include "xls/dslx/constexpr_evaluator.h"
#include "xls/dslx/errors.h"
#include "xls/dslx/type_system/concrete_type.h"
#include "xls/dslx/type_system/parametric_bind.h"
#include "xls/dslx/type_system/parametric_env.h"
#include "xls/dslx/type_system/type_and_parametric_env.h"

namespace xls::dslx {
namespace internal {
Expand Down Expand Up @@ -222,7 +228,7 @@ FunctionInstantiator::Make(
parametric_constraints, explicit_parametrics));
}

absl::StatusOr<TypeAndBindings> FunctionInstantiator::Instantiate() {
absl::StatusOr<TypeAndParametricEnv> FunctionInstantiator::Instantiate() {
// Phase 1: instantiate actuals against parametrics in left-to-right order.
XLS_VLOG(10) << "Phase 1: isntantiate actuals";
for (int64_t i = 0; i < args().size(); ++i) {
Expand Down Expand Up @@ -262,7 +268,8 @@ absl::StatusOr<TypeAndBindings> FunctionInstantiator::Instantiate() {
"Instantiated return type did not have all parametrics resolved.");
}

return TypeAndBindings{std::move(resolved), ParametricEnv(parametric_env())};
return TypeAndParametricEnv{std::move(resolved),
ParametricEnv(parametric_env())};
}

/* static */ absl::StatusOr<std::unique_ptr<StructInstantiator>>
Expand All @@ -278,7 +285,7 @@ StructInstantiator::Make(
parametric_bindings));
}

absl::StatusOr<TypeAndBindings> StructInstantiator::Instantiate() {
absl::StatusOr<TypeAndParametricEnv> StructInstantiator::Instantiate() {
// Phase 1: instantiate actuals against parametrics in left-to-right order.
for (int64_t i = 0; i < member_types_.size(); ++i) {
const ConcreteType& member_type = *member_types_[i];
Expand All @@ -300,7 +307,8 @@ absl::StatusOr<TypeAndBindings> StructInstantiator::Instantiate() {

XLS_ASSIGN_OR_RETURN(std::unique_ptr<ConcreteType> resolved,
Resolve(*struct_type_));
return TypeAndBindings{std::move(resolved), ParametricEnv(parametric_env())};
return TypeAndParametricEnv{std::move(resolved),
ParametricEnv(parametric_env())};
}

} // namespace internal
Expand Down
8 changes: 5 additions & 3 deletions xls/dslx/type_system/parametric_instantiator_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@
#ifndef XLS_DSLX_TYPE_SYSTEM_PARAMETRIC_INSTANTIATOR_INTERNAL_H_
#define XLS_DSLX_TYPE_SYSTEM_PARAMETRIC_INSTANTIATOR_INTERNAL_H_

#include "absl/status/statusor.h"
#include "xls/dslx/frontend/pos.h"
#include "xls/dslx/type_system/concrete_type.h"
#include "xls/dslx/type_system/deduce_ctx.h"
#include "xls/dslx/type_system/parametric_constraint.h"
#include "xls/dslx/type_system/type_and_parametric_env.h"

namespace xls::dslx {
namespace internal {
Expand Down Expand Up @@ -54,7 +56,7 @@ class ParametricInstantiator {

virtual ~ParametricInstantiator();

virtual absl::StatusOr<TypeAndBindings> Instantiate() = 0;
virtual absl::StatusOr<TypeAndParametricEnv> Instantiate() = 0;

// e.g. "struct" or "function"
virtual std::string_view GetKindName() = 0;
Expand Down Expand Up @@ -134,7 +136,7 @@ class FunctionInstantiator : public ParametricInstantiator {
//
// Instantiates the parameters of function_type_ according to the presented
// args_' types.
absl::StatusOr<TypeAndBindings> Instantiate() override;
absl::StatusOr<TypeAndParametricEnv> Instantiate() override;

std::string_view GetKindName() override { return "function"; }

Expand Down Expand Up @@ -163,7 +165,7 @@ class StructInstantiator : public ParametricInstantiator {
DeduceCtx* ctx,
absl::Span<const ParametricConstraint> parametric_bindings);

absl::StatusOr<TypeAndBindings> Instantiate() override;
absl::StatusOr<TypeAndParametricEnv> Instantiate() override;

std::string_view GetKindName() override { return "struct"; }

Expand Down
Loading

0 comments on commit ea54c50

Please sign in to comment.