Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
src
sksl
transform
SkSLAddConstToVarModifiers.cpp
Go to the documentation of this file.
1
/*
2
* Copyright 2022 Google LLC
3
*
4
* Use of this source code is governed by a BSD-style license that can be
5
* found in the LICENSE file.
6
*/
7
8
#include "
src/base/SkEnumBitMask.h
"
9
#include "
src/sksl/SkSLAnalysis.h
"
10
#include "
src/sksl/analysis/SkSLProgramUsage.h
"
11
#include "
src/sksl/ir/SkSLModifierFlags.h
"
12
#include "
src/sksl/ir/SkSLVariable.h
"
13
#include "
src/sksl/transform/SkSLTransform.h
"
14
15
namespace
SkSL
{
16
17
class
Expression;
18
19
ModifierFlags
Transform::AddConstToVarModifiers
(
const
Variable
& var,
20
const
Expression
* initialValue,
21
const
ProgramUsage
*
usage
) {
22
// If the variable is already marked as `const`, keep our existing modifiers.
23
ModifierFlags
flags
= var.
modifierFlags
();
24
if
(
flags
.isConst()) {
25
return
flags
;
26
}
27
// If the variable doesn't have a compile-time-constant initial value, we can't `const` it.
28
if
(!initialValue || !
Analysis::IsCompileTimeConstant
(*initialValue)) {
29
return
flags
;
30
}
31
// This only works for variables that are written-to a single time.
32
ProgramUsage::VariableCounts
counts =
usage
->get(var);
33
if
(counts.fWrite != 1) {
34
return
flags
;
35
}
36
// Add `const` to our variable's modifier flags, making it eligible for constant-folding.
37
return
flags
|
ModifierFlag::kConst
;
38
}
39
40
}
// namespace SkSL
SkEnumBitMask.h
SkSLAnalysis.h
SkSLModifierFlags.h
SkSLProgramUsage.h
SkSLTransform.h
SkSLVariable.h
SkSL::Expression
Definition
SkSLExpression.h:30
SkSL::ModifierFlags
Definition
SkSLModifierFlags.h:53
SkSL::ProgramUsage
Definition
SkSLProgramUsage.h:26
SkSL::Variable
Definition
SkSLVariable.h:48
SkSL::Variable::modifierFlags
ModifierFlags modifierFlags() const
Definition
SkSLVariable.h:89
flags
FlutterSemanticsFlag flags
Definition
fl_accessible_node.cc:105
SkSL::Analysis::IsCompileTimeConstant
bool IsCompileTimeConstant(const Expression &expr)
Definition
SkSLAnalysis.cpp:429
SkSL::Transform::AddConstToVarModifiers
ModifierFlags AddConstToVarModifiers(const Variable &var, const Expression *initialValue, const ProgramUsage *usage)
Definition
SkSLAddConstToVarModifiers.cpp:19
SkSL
Definition
SkCapabilities.h:15
SkSL::ModifierFlag::kConst
@ kConst
usage
static void usage(char *argv0)
Definition
skdiff_main.cpp:552
SkSL::ProgramUsage::VariableCounts
Definition
SkSLProgramUsage.h:28
Generated on Fri Apr 26 2024 06:17:34 for Flutter Engine by
1.9.8