resolver: Delay copy of TemplateState
Shows up in profiling, and doesn't always need to be done. Change-Id: If8bf061563979d17dea4c48334dab4834770d921 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/116865 Reviewed-by: Antonio Maiorano <amaiorano@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Ben Clayton <bclayton@google.com> Auto-Submit: Ben Clayton <bclayton@google.com>
This commit is contained in:
parent
c231e180d7
commit
6345562a98
|
@ -1154,7 +1154,7 @@ class Impl : public IntrinsicTable {
|
||||||
Candidate ScoreOverload(const OverloadInfo* overload,
|
Candidate ScoreOverload(const OverloadInfo* overload,
|
||||||
utils::VectorRef<const type::Type*> args,
|
utils::VectorRef<const type::Type*> args,
|
||||||
sem::EvaluationStage earliest_eval_stage,
|
sem::EvaluationStage earliest_eval_stage,
|
||||||
TemplateState templates) const;
|
const TemplateState& templates) const;
|
||||||
|
|
||||||
/// Performs overload resolution given the list of candidates, by ranking the conversions of
|
/// Performs overload resolution given the list of candidates, by ranking the conversions of
|
||||||
/// arguments to the each of the candidate's parameter types.
|
/// arguments to the each of the candidate's parameter types.
|
||||||
|
@ -1560,7 +1560,7 @@ IntrinsicPrototype Impl::MatchIntrinsic(const IntrinsicInfo& intrinsic,
|
||||||
Impl::Candidate Impl::ScoreOverload(const OverloadInfo* overload,
|
Impl::Candidate Impl::ScoreOverload(const OverloadInfo* overload,
|
||||||
utils::VectorRef<const type::Type*> args,
|
utils::VectorRef<const type::Type*> args,
|
||||||
sem::EvaluationStage earliest_eval_stage,
|
sem::EvaluationStage earliest_eval_stage,
|
||||||
TemplateState templates) const {
|
const TemplateState& in_templates) const {
|
||||||
// Penalty weights for overload mismatching.
|
// Penalty weights for overload mismatching.
|
||||||
// This scoring is used to order the suggested overloads in diagnostic on overload mismatch, and
|
// This scoring is used to order the suggested overloads in diagnostic on overload mismatch, and
|
||||||
// has no impact for a correct program.
|
// has no impact for a correct program.
|
||||||
|
@ -1580,6 +1580,10 @@ Impl::Candidate Impl::ScoreOverload(const OverloadInfo* overload,
|
||||||
std::min(num_parameters, num_arguments));
|
std::min(num_parameters, num_arguments));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make a mutable copy of the input templates so we can implicitly match more templated
|
||||||
|
// arguments.
|
||||||
|
TemplateState templates(in_templates);
|
||||||
|
|
||||||
// Invoke the matchers for each parameter <-> argument pair.
|
// Invoke the matchers for each parameter <-> argument pair.
|
||||||
// If any arguments cannot be matched, then `score` will be increased.
|
// If any arguments cannot be matched, then `score` will be increased.
|
||||||
// If the overload has any template types or numbers then these will be set based on the
|
// If the overload has any template types or numbers then these will be set based on the
|
||||||
|
|
Loading…
Reference in New Issue