blob: 4b2c33e1050fa706af565d580efef4bd44a27c6d [file] [log] [blame]
* Copyright 2022 Google LLC
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
#include "include/core/SkTypes.h"
#include "src/core/SkTHash.h"
namespace SkSL {
class Expression;
class FunctionDeclaration;
class ProgramElement;
class Statement;
class Variable;
* Side-car class holding mutable information about a Program's IR
class ProgramUsage {
struct VariableCounts {
int fVarExists = 0; // if this is zero, the Variable might have already been deleted
int fRead = 0;
int fWrite = 0;
VariableCounts get(const Variable&) const;
bool isDead(const Variable&) const;
int get(const FunctionDeclaration&) const;
void add(const Expression* expr);
void add(const Statement* stmt);
void add(const ProgramElement& element);
void remove(const Expression* expr);
void remove(const Statement* stmt);
void remove(const ProgramElement& element);
bool operator==(const ProgramUsage& that) const;
bool operator!=(const ProgramUsage& that) const { return !(*this == that); }
skia_private::THashMap<const Variable*, VariableCounts> fVariableCounts;
skia_private::THashMap<const FunctionDeclaration*, int> fCallCounts;
} // namespace SkSL