mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-18 09:25:25 +00:00
tint/utils/UniqueVector: Use utils::Vector and utils::Hashset
For fewer heap allocations, faster lookups. Change-Id: I02da7c1a63608096ec898b0d89f9f97c6db8733f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/98141 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: Dan Sinclair <dsinclair@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Dawn LUCI CQ
parent
b79238d7ec
commit
dce63f5717
@@ -81,7 +81,7 @@ class Function final : public Castable<Function, CallTarget> {
|
||||
}
|
||||
|
||||
/// @returns all directly referenced global variables
|
||||
const utils::UniqueVector<const GlobalVariable*>& DirectlyReferencedGlobals() const {
|
||||
const utils::UniqueVector<const GlobalVariable*, 4>& DirectlyReferencedGlobals() const {
|
||||
return directly_referenced_globals_;
|
||||
}
|
||||
|
||||
@@ -89,12 +89,12 @@ class Function final : public Castable<Function, CallTarget> {
|
||||
/// Note: Implicitly adds this global to the transtively-called globals.
|
||||
/// @param global the module-scope variable
|
||||
void AddDirectlyReferencedGlobal(const sem::GlobalVariable* global) {
|
||||
directly_referenced_globals_.add(global);
|
||||
transitively_referenced_globals_.add(global);
|
||||
directly_referenced_globals_.Add(global);
|
||||
transitively_referenced_globals_.Add(global);
|
||||
}
|
||||
|
||||
/// @returns all transitively referenced global variables
|
||||
const utils::UniqueVector<const GlobalVariable*>& TransitivelyReferencedGlobals() const {
|
||||
const utils::UniqueVector<const GlobalVariable*, 8>& TransitivelyReferencedGlobals() const {
|
||||
return transitively_referenced_globals_;
|
||||
}
|
||||
|
||||
@@ -102,29 +102,29 @@ class Function final : public Castable<Function, CallTarget> {
|
||||
/// variable.
|
||||
/// @param global the module-scoped variable
|
||||
void AddTransitivelyReferencedGlobal(const sem::GlobalVariable* global) {
|
||||
transitively_referenced_globals_.add(global);
|
||||
transitively_referenced_globals_.Add(global);
|
||||
}
|
||||
|
||||
/// @returns the list of functions that this function transitively calls.
|
||||
const utils::UniqueVector<const Function*>& TransitivelyCalledFunctions() const {
|
||||
const utils::UniqueVector<const Function*, 8>& TransitivelyCalledFunctions() const {
|
||||
return transitively_called_functions_;
|
||||
}
|
||||
|
||||
/// Records that this function transitively calls `function`.
|
||||
/// @param function the function this function transitively calls
|
||||
void AddTransitivelyCalledFunction(const Function* function) {
|
||||
transitively_called_functions_.add(function);
|
||||
transitively_called_functions_.Add(function);
|
||||
}
|
||||
|
||||
/// @returns the list of builtins that this function directly calls.
|
||||
const utils::UniqueVector<const Builtin*>& DirectlyCalledBuiltins() const {
|
||||
const utils::UniqueVector<const Builtin*, 4>& DirectlyCalledBuiltins() const {
|
||||
return directly_called_builtins_;
|
||||
}
|
||||
|
||||
/// Records that this function transitively calls `builtin`.
|
||||
/// @param builtin the builtin this function directly calls
|
||||
void AddDirectlyCalledBuiltin(const Builtin* builtin) {
|
||||
directly_called_builtins_.add(builtin);
|
||||
directly_called_builtins_.Add(builtin);
|
||||
}
|
||||
|
||||
/// Adds the given texture/sampler pair to the list of unique pairs
|
||||
@@ -134,12 +134,14 @@ class Function final : public Castable<Function, CallTarget> {
|
||||
/// @param texture the texture (must be non-null)
|
||||
/// @param sampler the sampler (null indicates a texture-only reference)
|
||||
void AddTextureSamplerPair(const sem::Variable* texture, const sem::Variable* sampler) {
|
||||
texture_sampler_pairs_.add(VariablePair(texture, sampler));
|
||||
texture_sampler_pairs_.Add(VariablePair(texture, sampler));
|
||||
}
|
||||
|
||||
/// @returns the list of texture/sampler pairs that this function uses
|
||||
/// (directly or indirectly).
|
||||
const std::vector<VariablePair>& TextureSamplerPairs() const { return texture_sampler_pairs_; }
|
||||
const utils::Vector<VariablePair, 8>& TextureSamplerPairs() const {
|
||||
return texture_sampler_pairs_;
|
||||
}
|
||||
|
||||
/// @returns the list of direct calls to functions / builtins made by this
|
||||
/// function
|
||||
@@ -253,17 +255,20 @@ class Function final : public Castable<Function, CallTarget> {
|
||||
sem::Behaviors& Behaviors() { return behaviors_; }
|
||||
|
||||
private:
|
||||
Function(const Function&) = delete;
|
||||
Function(Function&&) = delete;
|
||||
|
||||
VariableBindings TransitivelyReferencedSamplerVariablesImpl(ast::SamplerKind kind) const;
|
||||
VariableBindings TransitivelyReferencedSampledTextureVariablesImpl(bool multisampled) const;
|
||||
|
||||
const ast::Function* const declaration_;
|
||||
|
||||
sem::WorkgroupSize workgroup_size_;
|
||||
utils::UniqueVector<const GlobalVariable*> directly_referenced_globals_;
|
||||
utils::UniqueVector<const GlobalVariable*> transitively_referenced_globals_;
|
||||
utils::UniqueVector<const Function*> transitively_called_functions_;
|
||||
utils::UniqueVector<const Builtin*> directly_called_builtins_;
|
||||
utils::UniqueVector<VariablePair> texture_sampler_pairs_;
|
||||
utils::UniqueVector<const GlobalVariable*, 4> directly_referenced_globals_;
|
||||
utils::UniqueVector<const GlobalVariable*, 8> transitively_referenced_globals_;
|
||||
utils::UniqueVector<const Function*, 8> transitively_called_functions_;
|
||||
utils::UniqueVector<const Builtin*, 4> directly_called_builtins_;
|
||||
utils::UniqueVector<VariablePair, 8> texture_sampler_pairs_;
|
||||
std::vector<const Call*> direct_calls_;
|
||||
std::vector<const Call*> callsites_;
|
||||
std::vector<const Function*> ancestor_entry_points_;
|
||||
|
||||
@@ -21,7 +21,7 @@ TINT_INSTANTIATE_TYPEINFO(tint::sem::Module);
|
||||
|
||||
namespace tint::sem {
|
||||
|
||||
Module::Module(std::vector<const ast::Node*> dep_ordered_decls, ast::Extensions extensions)
|
||||
Module::Module(utils::VectorRef<const ast::Node*> dep_ordered_decls, ast::Extensions extensions)
|
||||
: dep_ordered_decls_(std::move(dep_ordered_decls)), extensions_(std::move(extensions)) {}
|
||||
|
||||
Module::~Module() = default;
|
||||
|
||||
@@ -15,10 +15,9 @@
|
||||
#ifndef SRC_TINT_SEM_MODULE_H_
|
||||
#define SRC_TINT_SEM_MODULE_H_
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "src/tint/ast/extension.h"
|
||||
#include "src/tint/sem/node.h"
|
||||
#include "src/tint/utils/vector.h"
|
||||
|
||||
// Forward declarations
|
||||
namespace tint::ast {
|
||||
@@ -34,13 +33,13 @@ class Module final : public Castable<Module, Node> {
|
||||
/// Constructor
|
||||
/// @param dep_ordered_decls the dependency-ordered module-scope declarations
|
||||
/// @param extensions the list of enabled extensions in the module
|
||||
Module(std::vector<const ast::Node*> dep_ordered_decls, ast::Extensions extensions);
|
||||
Module(utils::VectorRef<const ast::Node*> dep_ordered_decls, ast::Extensions extensions);
|
||||
|
||||
/// Destructor
|
||||
~Module() override;
|
||||
|
||||
/// @returns the dependency-ordered global declarations for the module
|
||||
const std::vector<const ast::Node*>& DependencyOrderedDeclarations() const {
|
||||
const utils::Vector<const ast::Node*, 64>& DependencyOrderedDeclarations() const {
|
||||
return dep_ordered_decls_;
|
||||
}
|
||||
|
||||
@@ -48,7 +47,7 @@ class Module final : public Castable<Module, Node> {
|
||||
const ast::Extensions& Extensions() const { return extensions_; }
|
||||
|
||||
private:
|
||||
const std::vector<const ast::Node*> dep_ordered_decls_;
|
||||
const utils::Vector<const ast::Node*, 64> dep_ordered_decls_;
|
||||
ast::Extensions extensions_;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user