37 using ProgramWriter::visitProgramElement;
39 bool visitExpressionPtr(std::unique_ptr<Expression>& expr)
override {
44 if (fCandidates.contains(var.
variable())) {
46 if (
const Expression*
value = ConstantFolder::GetConstantValueOrNull(var)) {
48 fUsage->remove(expr.get());
49 expr =
value->clone();
50 fUsage->add(expr.get());
55 return INHERITED::visitExpressionPtr(expr);
64 ConstVarReplacer visitor{
usage};
66 for (
const auto& [var,
count] :
usage->fVariableCounts) {
71 if (!var->modifierFlags().isConst()) {
74 if (!var->initialValue()) {
82 size_t totalOldSize = var->description().size() +
86 count.fRead * var->name().size();
89 size_t totalNewSize =
count.fRead * initialvalueSize;
91 if (totalNewSize <= totalOldSize) {
92 visitor.fCandidates.add(var);
96 if (!visitor.fCandidates.empty()) {
97 for (std::unique_ptr<ProgramElement>& pe :
module.fElements) {
98 if (pe->is<FunctionDefinition>()) {
99 visitor.visitProgramElement(*pe);
static void usage(char *argv0)