Eliminate unused local variables during SkSL optimization.

This can eliminate const variables which have been completely folded
away, unnecessary synthetic variables created during codegen/inlining,
or code that simply didn't need to exist at all.

Change-Id: I37a65e455e6527a6a6c2f4dde918f48d84dc2638
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/383496
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This commit is contained in:
John Stiles 2021-03-16 12:19:54 -04:00 committed by Skia Commit-Bot
parent f10eff363b
commit 2654187396
50 changed files with 1768 additions and 2024 deletions

View File

@ -595,6 +595,86 @@ bool Compiler::removeDeadGlobalVariables(Program& program, ProgramUsage* usage)
return madeChanges;
}
bool Compiler::removeDeadLocalVariables(Program& program, ProgramUsage* usage) {
class DeadLocalVariableEliminator : public ProgramWriter {
public:
DeadLocalVariableEliminator(const Context& context, ProgramUsage* usage)
: fContext(context)
, fUsage(usage) {}
using ProgramWriter::visitProgramElement;
bool visitExpressionPtr(std::unique_ptr<Expression>& expr) override {
// We don't need to look inside expressions at all.
return false;
}
bool visitStatementPtr(std::unique_ptr<Statement>& stmt) override {
if (stmt->is<VarDeclaration>()) {
VarDeclaration& varDecl = stmt->as<VarDeclaration>();
const Variable* var = &varDecl.var();
ProgramUsage::VariableCounts* counts = fUsage->fVariableCounts.find(var);
SkASSERT(counts);
SkASSERT(counts->fDeclared);
if (CanEliminate(var, *counts)) {
if (var->initialValue()) {
// The variable has an initial-value expression, which might have side
// effects. ExpressionStatement::Make will preserve side effects, but
// replaces pure expressions with Nop.
fUsage->remove(stmt.get());
stmt = ExpressionStatement::Make(fContext, std::move(varDecl.value()));
fUsage->add(stmt.get());
} else {
// The variable has no initial-value and can be cleanly eliminated.
fUsage->remove(stmt.get());
stmt = std::make_unique<Nop>();
}
fMadeChanges = true;
}
return false;
}
return INHERITED::visitStatementPtr(stmt);
}
static bool CanEliminate(const Variable* var, const ProgramUsage::VariableCounts& counts) {
if (!counts.fDeclared || counts.fRead || var->storage() != VariableStorage::kLocal) {
return false;
}
if (var->initialValue()) {
SkASSERT(counts.fWrite >= 1);
return counts.fWrite == 1;
} else {
return counts.fWrite == 0;
}
}
bool fMadeChanges = false;
const Context& fContext;
ProgramUsage* fUsage;
using INHERITED = ProgramWriter;
};
DeadLocalVariableEliminator visitor{*fContext, usage};
if (program.fConfig->fSettings.fRemoveDeadVariables) {
for (auto& [var, counts] : usage->fVariableCounts) {
if (DeadLocalVariableEliminator::CanEliminate(var, counts)) {
// This program contains at least one dead local variable.
// Scan the program for any dead local variables and eliminate them all.
for (std::unique_ptr<ProgramElement>& pe : program.ownedElements()) {
if (pe->is<FunctionDefinition>()) {
visitor.visitProgramElement(*pe);
}
}
break;
}
}
}
return visitor.fMadeChanges;
}
bool Compiler::optimize(Program& program) {
// The optimizer only needs to run when it is enabled.
if (!program.fConfig->fSettings.fOptimize) {
@ -608,6 +688,7 @@ bool Compiler::optimize(Program& program) {
bool madeChanges = fInliner.analyze(program.ownedElements(), program.fSymbols, usage);
madeChanges |= this->removeDeadFunctions(program, usage);
madeChanges |= this->removeDeadLocalVariables(program, usage);
if (program.fConfig->fKind != ProgramKind::kFragmentProcessor) {
madeChanges |= this->removeDeadGlobalVariables(program, usage);

View File

@ -190,8 +190,9 @@ private:
/** Eliminates unused functions from a Program, according to the stats in ProgramUsage. */
bool removeDeadFunctions(Program& program, ProgramUsage* usage);
/** Eliminates unreferenced globals from a Program, according to the stats in ProgramUsage. */
/** Eliminates unreferenced variables from a Program, according to the stats in ProgramUsage. */
bool removeDeadGlobalVariables(Program& program, ProgramUsage* usage);
bool removeDeadLocalVariables(Program& program, ProgramUsage* usage);
Position position(int offset);

View File

@ -195,6 +195,7 @@ struct Program {
// Can be used to iterate over *just* the elements owned by the Program, not shared builtins.
// The iterator's value type is 'std::unique_ptr<ProgramElement>', and mutation is allowed.
std::vector<std::unique_ptr<ProgramElement>>& ownedElements() { return fElements; }
const std::vector<std::unique_ptr<ProgramElement>>& ownedElements() const { return fElements; }
std::unique_ptr<String> fSource;

View File

@ -1,7 +1,6 @@
out vec4 sk_FragColor;
void main() {
float _1_y = 123.0;
float z = 0.0;
float _0_y = z;
++_0_y;

View File

@ -34,7 +34,6 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
(void)_out;
float2 a = float2(1.0);
float3 b = float3(2.0);
float4x4 c = float4x4(3.0);
float3x3 d = float3x3(4.0);
_out.sk_FragColor = _skOutParamHelper0_fn(_out, _globals, a.x, b, _globals.glob, d);
return _out;

View File

@ -26,7 +26,6 @@ OpName %ah2x4 "ah2x4"
OpName %af4 "af4"
OpName %s "s"
OpName %l "l"
OpName %r "r"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
@ -58,12 +57,12 @@ OpDecorate %77 RelaxedPrecision
OpDecorate %_arr_v4float_int_1 ArrayStride 16
OpDecorate %98 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %136 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -126,7 +125,7 @@ OpDecorate %140 RelaxedPrecision
%99 = OpConstantComposite %v2float %float_5 %float_5
%103 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%_ptr_Private_float = OpTypePointer Private %float
%117 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%116 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%_ptr_Function_v3float = OpTypePointer Function %v3float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%_entrypoint = OpFunction %void None %24
@ -147,7 +146,6 @@ OpFunctionEnd
%af4 = OpVariable %_ptr_Function__arr_v4float_int_1 Function
%s = OpVariable %_ptr_Function_S Function
%l = OpVariable %_ptr_Function_float Function
%r = OpVariable %_ptr_Function_float Function
OpStore %i %int_0
OpStore %i4 %39
%54 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
@ -193,44 +191,44 @@ OpStore %globalVar %103
%104 = OpAccessChain %_ptr_Private_float %globalStruct %int_0
OpStore %104 %float_0
OpStore %l %float_0
%108 = OpAccessChain %_ptr_Function_int %ai %int_0
%109 = OpLoad %int %108
%110 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
%111 = OpLoad %v4int %110
%112 = OpCompositeExtract %int %111 0
%113 = OpIAdd %int %109 %112
OpStore %108 %113
%114 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %114 %float_1
%115 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
OpStore %115 %float_2
%116 = OpAccessChain %_ptr_Function_v4float %s %int_2
OpStore %116 %87
%118 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
OpStore %118 %117
%119 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%120 = OpLoad %v4float %119
%121 = OpAccessChain %_ptr_Function_v3float %ah2x4 %int_0 %int_0
%123 = OpLoad %v3float %121
%124 = OpCompositeExtract %float %123 0
%125 = OpVectorTimesScalar %v4float %120 %124
OpStore %119 %125
%126 = OpAccessChain %_ptr_Function_int %i4 %int_1
%127 = OpLoad %int %126
%128 = OpLoad %int %i
%129 = OpIMul %int %127 %128
OpStore %126 %129
%130 = OpAccessChain %_ptr_Function_float %x %int_1
%131 = OpLoad %float %130
%132 = OpLoad %float %l
%133 = OpFMul %float %131 %132
OpStore %130 %133
%134 = OpAccessChain %_ptr_Function_float %s %int_0
%135 = OpLoad %float %134
%136 = OpLoad %float %l
%137 = OpFMul %float %135 %136
OpStore %134 %137
%138 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%140 = OpLoad %v4float %138
OpReturnValue %140
%107 = OpAccessChain %_ptr_Function_int %ai %int_0
%108 = OpLoad %int %107
%109 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
%110 = OpLoad %v4int %109
%111 = OpCompositeExtract %int %110 0
%112 = OpIAdd %int %108 %111
OpStore %107 %112
%113 = OpAccessChain %_ptr_Function_float %s %int_0
OpStore %113 %float_1
%114 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
OpStore %114 %float_2
%115 = OpAccessChain %_ptr_Function_v4float %s %int_2
OpStore %115 %87
%117 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
OpStore %117 %116
%118 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
%119 = OpLoad %v4float %118
%120 = OpAccessChain %_ptr_Function_v3float %ah2x4 %int_0 %int_0
%122 = OpLoad %v3float %120
%123 = OpCompositeExtract %float %122 0
%124 = OpVectorTimesScalar %v4float %119 %123
OpStore %118 %124
%125 = OpAccessChain %_ptr_Function_int %i4 %int_1
%126 = OpLoad %int %125
%127 = OpLoad %int %i
%128 = OpIMul %int %126 %127
OpStore %125 %128
%129 = OpAccessChain %_ptr_Function_float %x %int_1
%130 = OpLoad %float %129
%131 = OpLoad %float %l
%132 = OpFMul %float %130 %131
OpStore %129 %132
%133 = OpAccessChain %_ptr_Function_float %s %int_0
%134 = OpLoad %float %133
%135 = OpLoad %float %l
%136 = OpFMul %float %134 %135
OpStore %133 %136
%137 = OpAccessChain %_ptr_Uniform_v4float %19 %int_0
%139 = OpLoad %v4float %137
OpReturnValue %139
OpFunctionEnd

View File

@ -36,7 +36,6 @@ vec4 main() {
globalVar = vec4(0.0);
globalStruct.f = 0.0;
float l;
float r;
l = 0.0;
ai[0] += ai4[0].x;
s.f = 1.0;

View File

@ -50,7 +50,6 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _unifo
_globals.globalVar = float4(0.0);
_globals.globalStruct.f = 0.0;
float l;
float r;
l = 0.0;
ai[0] += ai4[0].x;
s.f = 1.0;

View File

@ -10,7 +10,6 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
OpMemberName %_UniformBuffer 1 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %a "a"
OpName %b "b"
OpName %c "c"
OpDecorate %sk_FragColor RelaxedPrecision
@ -25,8 +24,8 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %39 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %45 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -41,10 +40,8 @@ OpDecorate %45 RelaxedPrecision
%15 = OpTypeFunction %void
%18 = OpTypeFunction %v4float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_0 = OpConstant %float 0
%23 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%float_1 = OpConstant %float 1
%26 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%v4bool = OpTypeVector %bool 4
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
@ -58,28 +55,26 @@ OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%a = OpVariable %_ptr_Function_v4float Function
%b = OpVariable %_ptr_Function_v4float Function
%c = OpVariable %_ptr_Function_v4float Function
OpStore %a %23
OpStore %b %26
%29 = OpLoad %v4float %b
%28 = OpExtInst %v4float %1 FAbs %29
OpStore %c %28
%30 = OpLoad %v4float %b
%31 = OpLoad %v4float %c
%32 = OpFOrdNotEqual %v4bool %30 %31
%34 = OpAny %bool %32
OpSelectionMerge %37 None
OpBranchConditional %34 %35 %36
%35 = OpLabel
%38 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%42 = OpLoad %v4float %38
OpStore %b %23
%26 = OpLoad %v4float %b
%25 = OpExtInst %v4float %1 FAbs %26
OpStore %c %25
%27 = OpLoad %v4float %b
%28 = OpLoad %v4float %c
%29 = OpFOrdNotEqual %v4bool %27 %28
%31 = OpAny %bool %29
OpSelectionMerge %34 None
OpBranchConditional %31 %32 %33
%32 = OpLabel
%35 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%39 = OpLoad %v4float %35
OpReturnValue %39
%33 = OpLabel
%40 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%42 = OpLoad %v4float %40
OpReturnValue %42
%36 = OpLabel
%43 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%45 = OpLoad %v4float %43
OpReturnValue %45
%37 = OpLabel
%34 = OpLabel
OpUnreachable
OpFunctionEnd

View File

@ -3,7 +3,6 @@ out vec4 sk_FragColor;
uniform vec4 colorGreen;
uniform vec4 colorRed;
vec4 main() {
const vec4 a = vec4(0.0);
const vec4 b = vec4(1.0);
vec4 c = abs(b);
if (b != c) {

View File

@ -14,7 +14,6 @@ struct Outputs {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
const float4 a = float4(0.0);
const float4 b = float4(1.0);
float4 c = abs(b);
if (any(b != c)) {

View File

@ -10,7 +10,6 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
OpMemberName %_UniformBuffer 1 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %x "x"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
@ -23,7 +22,7 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %27 RelaxedPrecision
OpDecorate %24 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -37,8 +36,6 @@ OpDecorate %27 RelaxedPrecision
%void = OpTypeVoid
%15 = OpTypeFunction %void
%18 = OpTypeFunction %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%true = OpConstantTrue %bool
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
@ -50,9 +47,7 @@ OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%x = OpVariable %_ptr_Function_bool Function
OpStore %x %true
%23 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%27 = OpLoad %v4float %23
OpReturnValue %27
%20 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%24 = OpLoad %v4float %20
OpReturnValue %24
OpFunctionEnd

View File

@ -3,6 +3,5 @@ out vec4 sk_FragColor;
uniform vec4 colorGreen;
uniform vec4 colorRed;
vec4 main() {
const bool x = true;
return colorGreen;
}

View File

@ -14,7 +14,6 @@ struct Outputs {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
const bool x = true;
_out.sk_FragColor = _uniforms.colorGreen;
return _out;
}

View File

@ -12,8 +12,6 @@ OpName %_entrypoint "_entrypoint"
OpName %unpremul "unpremul"
OpName %live_fn "live_fn"
OpName %main "main"
OpName %TRUE "TRUE"
OpName %FALSE "FALSE"
OpName %a "a"
OpName %b "b"
OpDecorate %sk_FragColor RelaxedPrecision
@ -34,11 +32,11 @@ OpDecorate %37 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %45 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %85 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %90 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -58,16 +56,14 @@ OpDecorate %90 RelaxedPrecision
%float_1 = OpConstant %float 1
%40 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float
%47 = OpTypeFunction %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%true = OpConstantTrue %bool
%false = OpConstantFalse %bool
%float_3 = OpConstant %float 3
%57 = OpConstantComposite %v4float %float_3 %float_3 %float_3 %float_3
%52 = OpConstantComposite %v4float %float_3 %float_3 %float_3 %float_3
%float_n5 = OpConstant %float -5
%60 = OpConstantComposite %v4float %float_n5 %float_n5 %float_n5 %float_n5
%63 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%55 = OpConstantComposite %v4float %float_n5 %float_n5 %float_n5 %float_n5
%58 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%false = OpConstantFalse %bool
%float_0 = OpConstant %float 0
%68 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%64 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%v4bool = OpTypeVector %bool 4
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
@ -108,48 +104,44 @@ OpReturnValue %46
OpFunctionEnd
%main = OpFunction %v4float None %47
%48 = OpLabel
%TRUE = OpVariable %_ptr_Function_bool Function
%FALSE = OpVariable %_ptr_Function_bool Function
%a = OpVariable %_ptr_Function_v4float Function
%b = OpVariable %_ptr_Function_v4float Function
%58 = OpVariable %_ptr_Function_v4float Function
%61 = OpVariable %_ptr_Function_v4float Function
%64 = OpVariable %_ptr_Function_v4float Function
%78 = OpVariable %_ptr_Function_v4float Function
OpStore %TRUE %true
OpStore %FALSE %false
OpStore %58 %57
OpStore %61 %60
%62 = OpFunctionCall %v4float %live_fn %58 %61
OpStore %a %62
OpStore %64 %63
%65 = OpFunctionCall %v4float %unpremul %64
OpStore %b %65
%66 = OpLoad %v4float %a
%69 = OpFOrdNotEqual %v4bool %66 %68
%71 = OpAny %bool %69
OpSelectionMerge %73 None
OpBranchConditional %71 %72 %73
%72 = OpLabel
%74 = OpLoad %v4float %b
%75 = OpFOrdNotEqual %v4bool %74 %68
%76 = OpAny %bool %75
OpBranch %73
%73 = OpLabel
%77 = OpPhi %bool %false %48 %76 %72
OpSelectionMerge %81 None
OpBranchConditional %77 %79 %80
%79 = OpLabel
%82 = OpAccessChain %_ptr_Uniform_v4float %12 %int_0
%86 = OpLoad %v4float %82
OpStore %78 %86
OpBranch %81
%80 = OpLabel
%87 = OpAccessChain %_ptr_Uniform_v4float %12 %int_1
%89 = OpLoad %v4float %87
OpStore %78 %89
OpBranch %81
%81 = OpLabel
%90 = OpLoad %v4float %78
OpReturnValue %90
%53 = OpVariable %_ptr_Function_v4float Function
%56 = OpVariable %_ptr_Function_v4float Function
%59 = OpVariable %_ptr_Function_v4float Function
%74 = OpVariable %_ptr_Function_v4float Function
OpStore %53 %52
OpStore %56 %55
%57 = OpFunctionCall %v4float %live_fn %53 %56
OpStore %a %57
OpStore %59 %58
%60 = OpFunctionCall %v4float %unpremul %59
OpStore %b %60
%62 = OpLoad %v4float %a
%65 = OpFOrdNotEqual %v4bool %62 %64
%67 = OpAny %bool %65
OpSelectionMerge %69 None
OpBranchConditional %67 %68 %69
%68 = OpLabel
%70 = OpLoad %v4float %b
%71 = OpFOrdNotEqual %v4bool %70 %64
%72 = OpAny %bool %71
OpBranch %69
%69 = OpLabel
%73 = OpPhi %bool %false %48 %72 %68
OpSelectionMerge %77 None
OpBranchConditional %73 %75 %76
%75 = OpLabel
%78 = OpAccessChain %_ptr_Uniform_v4float %12 %int_0
%82 = OpLoad %v4float %78
OpStore %74 %82
OpBranch %77
%76 = OpLabel
%83 = OpAccessChain %_ptr_Uniform_v4float %12 %int_1
%85 = OpLoad %v4float %83
OpStore %74 %85
OpBranch %77
%77 = OpLabel
%86 = OpLoad %v4float %74
OpReturnValue %86
OpFunctionEnd

View File

@ -9,8 +9,6 @@ vec4 live_fn(vec4 a, vec4 b) {
return a + b;
}
vec4 main() {
const bool TRUE = true;
const bool FALSE = false;
vec4 a;
vec4 b;
{

View File

@ -20,8 +20,6 @@ float4 live_fn(float4 a, float4 b) {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
const bool TRUE = true;
const bool FALSE = false;
float4 a;
float4 b;
{

File diff suppressed because it is too large Load Diff

View File

@ -12,9 +12,7 @@ layout (binding = 0) uniform uniformBuffer {
};
layout (location = 0) in vec2 vLocalCoord_Stage0;
vec4 MatrixEffect_Stage1_c0_c0(vec4 _input, vec2 _coords) {
vec4 _output;
vec2 _0_coords = (umatrix_Stage1_c0_c0 * vec3(_coords, 1.0)).xy;
vec4 _1_output;
vec2 _2_inCoord = _0_coords;
_2_inCoord *= unorm_Stage1_c0_c0_c0.xy;
vec2 _3_subsetCoord;

View File

@ -23,9 +23,7 @@ struct Globals {
sampler uTextureSampler_0_Stage1Smplr;
};
float4 MatrixEffect_Stage1_c0_c0(thread Globals& _globals, float4 _input, float2 _coords) {
float4 _output;
float2 _0_coords = (_globals._anonInterface0->umatrix_Stage1_c0_c0 * float3(_coords, 1.0)).xy;
float4 _1_output;
float2 _2_inCoord = _0_coords;
_2_inCoord *= _globals._anonInterface0->unorm_Stage1_c0_c0_c0.xy;
float2 _3_subsetCoord;

View File

@ -10,9 +10,7 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %_0_x "_0_x"
OpName %x "x"
OpName %_1_x "_1_x"
OpName %y "y"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
@ -23,7 +21,7 @@ OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %58 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -42,10 +40,10 @@ OpDecorate %58 RelaxedPrecision
%float_2 = OpConstant %float 2
%v2float = OpTypeVector %float 2
%_ptr_Function_v2float = OpTypePointer Function %v2float
%37 = OpConstantComposite %v2float %float_1 %float_2
%35 = OpConstantComposite %v2float %float_1 %float_2
%float_3 = OpConstant %float 3
%float_4 = OpConstant %float 4
%45 = OpConstantComposite %v2float %float_3 %float_4
%43 = OpConstantComposite %v2float %float_3 %float_4
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
@ -58,9 +56,7 @@ OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%_0_x = OpVariable %_ptr_Function_float Function
%x = OpVariable %_ptr_Function_float Function
%_1_x = OpVariable %_ptr_Function_v2float Function
%y = OpVariable %_ptr_Function_v2float Function
OpStore %_0_x %float_1
%24 = OpLoad %float %_0_x
%23 = OpExtInst %float %1 Length %24
@ -74,27 +70,23 @@ OpStore %_0_x %28
%31 = OpLoad %float %_0_x
%30 = OpExtInst %float %1 Normalize %31
OpStore %_0_x %30
%33 = OpLoad %float %_0_x
OpStore %x %33
OpStore %_1_x %37
%39 = OpLoad %v2float %_1_x
%38 = OpExtInst %float %1 Length %39
%40 = OpCompositeConstruct %v2float %38 %38
OpStore %_1_x %40
%42 = OpLoad %v2float %_1_x
%41 = OpExtInst %float %1 Distance %42 %45
%46 = OpCompositeConstruct %v2float %41 %41
OpStore %_1_x %46
%48 = OpLoad %v2float %_1_x
%47 = OpDot %float %48 %45
%49 = OpCompositeConstruct %v2float %47 %47
OpStore %_1_x %49
%51 = OpLoad %v2float %_1_x
%50 = OpExtInst %v2float %1 Normalize %51
OpStore %_1_x %50
%53 = OpLoad %v2float %_1_x
OpStore %y %53
%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%58 = OpLoad %v4float %54
OpReturnValue %58
OpStore %_1_x %35
%37 = OpLoad %v2float %_1_x
%36 = OpExtInst %float %1 Length %37
%38 = OpCompositeConstruct %v2float %36 %36
OpStore %_1_x %38
%40 = OpLoad %v2float %_1_x
%39 = OpExtInst %float %1 Distance %40 %43
%44 = OpCompositeConstruct %v2float %39 %39
OpStore %_1_x %44
%46 = OpLoad %v2float %_1_x
%45 = OpDot %float %46 %43
%47 = OpCompositeConstruct %v2float %45 %45
OpStore %_1_x %47
%49 = OpLoad %v2float %_1_x
%48 = OpExtInst %v2float %1 Normalize %49
OpStore %_1_x %48
%50 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%54 = OpLoad %v4float %50
OpReturnValue %54
OpFunctionEnd

View File

@ -7,12 +7,10 @@ vec4 main() {
_0_x = distance(_0_x, 2.0);
_0_x = dot(_0_x, 2.0);
_0_x = normalize(_0_x);
float x = _0_x;
vec2 _1_x = vec2(1.0, 2.0);
_1_x = vec2(length(_1_x));
_1_x = vec2(distance(_1_x, vec2(3.0, 4.0)));
_1_x = vec2(dot(_1_x, vec2(3.0, 4.0)));
_1_x = normalize(_1_x);
vec2 y = _1_x;
return colorGreen;
}

View File

@ -18,13 +18,11 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _unifo
_0_x = abs(_0_x - 2.0);
_0_x = (_0_x * 2.0);
_0_x = sign(_0_x);
float x = _0_x;
float2 _1_x = float2(1.0, 2.0);
_1_x = float2(length(_1_x));
_1_x = float2(distance(_1_x, float2(3.0, 4.0)));
_1_x = float2(dot(_1_x, float2(3.0, 4.0)));
_1_x = normalize(_1_x);
float2 y = _1_x;
_out.sk_FragColor = _uniforms.colorGreen;
return _out;
}

View File

@ -10,29 +10,19 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
OpMemberName %_UniformBuffer 1 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %test_half "test_half"
OpName %v1 "v1"
OpName %v2 "v2"
OpName %m1 "m1"
OpName %m2 "m2"
OpName %m3 "m3"
OpName %m4 "m4"
OpName %m5 "m5"
OpName %m6 "m6"
OpName %m7 "m7"
OpName %m9 "m9"
OpName %m10 "m10"
OpName %m11 "m11"
OpName %main "main"
OpName %_0_v1 "_0_v1"
OpName %_1_v2 "_1_v2"
OpName %_2_m1 "_2_m1"
OpName %_3_m2 "_3_m2"
OpName %_4_m3 "_4_m3"
OpName %_5_m4 "_5_m4"
OpName %_6_m5 "_6_m5"
OpName %_7_m6 "_7_m6"
OpName %_8_m7 "_8_m7"
OpName %_9_m9 "_9_m9"
OpName %_10_m10 "_10_m10"
OpName %_11_m11 "_11_m11"
OpDecorate %sk_FragColor RelaxedPrecision
@ -47,62 +37,43 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %27 RelaxedPrecision
OpDecorate %28 RelaxedPrecision
OpDecorate %30 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %29 RelaxedPrecision
OpDecorate %25 RelaxedPrecision
OpDecorate %25 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %37 RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %39 RelaxedPrecision
OpDecorate %40 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %50 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %64 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %53 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %57 RelaxedPrecision
OpDecorate %69 RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %75 RelaxedPrecision
OpDecorate %76 RelaxedPrecision
OpDecorate %77 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %108 RelaxedPrecision
OpDecorate %109 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %116 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %113 RelaxedPrecision
OpDecorate %113 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %237 RelaxedPrecision
OpDecorate %240 RelaxedPrecision
OpDecorate %241 RelaxedPrecision
OpDecorate %169 RelaxedPrecision
OpDecorate %172 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -116,31 +87,21 @@ OpDecorate %241 RelaxedPrecision
%void = OpTypeVoid
%16 = OpTypeFunction %void
%19 = OpTypeFunction %bool
%v3float = OpTypeVector %float 3
%_ptr_Function_v3float = OpTypePointer Function %v3float
%float_1 = OpConstant %float 1
%float_0 = OpConstant %float 0
%mat3v3float = OpTypeMatrix %v3float 3
%float_2 = OpConstant %float 2
%32 = OpConstantComposite %v3float %float_2 %float_2 %float_2
%v2float = OpTypeVector %float 2
%mat2v2float = OpTypeMatrix %v2float 2
%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
%float_1 = OpConstant %float 1
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%float_4 = OpConstant %float 4
%50 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%float_0 = OpConstant %float 0
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2float = OpTypePointer Function %v2float
%float_5 = OpConstant %float 5
%float_6 = OpConstant %float 6
%float_7 = OpConstant %float 7
%float_8 = OpConstant %float 8
%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
%mat4v4float = OpTypeMatrix %v4float 4
%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
%true = OpConstantTrue %bool
%134 = OpTypeFunction %v4float
%95 = OpTypeFunction %v4float
%false = OpConstantFalse %bool
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
@ -153,239 +114,171 @@ OpReturn
OpFunctionEnd
%test_half = OpFunction %bool None %19
%20 = OpLabel
%v1 = OpVariable %_ptr_Function_v3float Function
%v2 = OpVariable %_ptr_Function_v3float Function
%m1 = OpVariable %_ptr_Function_mat2v2float Function
%m2 = OpVariable %_ptr_Function_mat2v2float Function
%m3 = OpVariable %_ptr_Function_mat2v2float Function
%m4 = OpVariable %_ptr_Function_mat2v2float Function
%m5 = OpVariable %_ptr_Function_mat2v2float Function
%m6 = OpVariable %_ptr_Function_mat2v2float Function
%m7 = OpVariable %_ptr_Function_mat2v2float Function
%m9 = OpVariable %_ptr_Function_mat3v3float Function
%m10 = OpVariable %_ptr_Function_mat4v4float Function
%m11 = OpVariable %_ptr_Function_mat4v4float Function
%27 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
%28 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
%29 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
%25 = OpCompositeConstruct %mat3v3float %27 %28 %29
%33 = OpMatrixTimesVector %v3float %25 %32
OpStore %v1 %33
%36 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
%37 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
%38 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
%35 = OpCompositeConstruct %mat3v3float %36 %37 %38
%39 = OpVectorTimesMatrix %v3float %32 %35
OpStore %v2 %39
%47 = OpCompositeConstruct %v2float %float_1 %float_2
%48 = OpCompositeConstruct %v2float %float_3 %float_4
%46 = OpCompositeConstruct %mat2v2float %47 %48
OpStore %m1 %46
%52 = OpCompositeExtract %float %50 0
%53 = OpCompositeExtract %float %50 1
%54 = OpCompositeExtract %float %50 2
%55 = OpCompositeExtract %float %50 3
%56 = OpCompositeConstruct %v2float %52 %53
%57 = OpCompositeConstruct %v2float %54 %55
%51 = OpCompositeConstruct %mat2v2float %56 %57
OpStore %m2 %51
%59 = OpLoad %mat2v2float %m1
OpStore %m3 %59
%62 = OpCompositeConstruct %v2float %float_1 %float_0
%63 = OpCompositeConstruct %v2float %float_0 %float_1
%61 = OpCompositeConstruct %mat2v2float %62 %63
OpStore %m4 %61
%64 = OpLoad %mat2v2float %m3
%65 = OpLoad %mat2v2float %m4
%66 = OpMatrixTimesMatrix %mat2v2float %64 %65
OpStore %m3 %66
%70 = OpAccessChain %_ptr_Function_v2float %m1 %int_0
%72 = OpLoad %v2float %70
%73 = OpCompositeExtract %float %72 0
%75 = OpCompositeConstruct %v2float %73 %float_0
%76 = OpCompositeConstruct %v2float %float_0 %73
%74 = OpCompositeConstruct %mat2v2float %75 %76
OpStore %m5 %74
%79 = OpCompositeConstruct %v2float %float_1 %float_2
%80 = OpCompositeConstruct %v2float %float_3 %float_4
%78 = OpCompositeConstruct %mat2v2float %79 %80
OpStore %m6 %78
%81 = OpLoad %mat2v2float %m6
%82 = OpLoad %mat2v2float %m5
%83 = OpCompositeExtract %v2float %81 0
%84 = OpCompositeExtract %v2float %82 0
%85 = OpFAdd %v2float %83 %84
%86 = OpCompositeExtract %v2float %81 1
%87 = OpCompositeExtract %v2float %82 1
%88 = OpFAdd %v2float %86 %87
%89 = OpCompositeConstruct %mat2v2float %85 %88
OpStore %m6 %89
%96 = OpCompositeConstruct %v2float %float_5 %float_6
%97 = OpCompositeConstruct %v2float %float_7 %float_8
%95 = OpCompositeConstruct %mat2v2float %96 %97
OpStore %m7 %95
%101 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
%102 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
%103 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
%100 = OpCompositeConstruct %mat3v3float %101 %102 %103
OpStore %m9 %100
%108 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
%109 = OpCompositeConstruct %v4float %float_0 %float_1 %float_0 %float_0
%110 = OpCompositeConstruct %v4float %float_0 %float_0 %float_1 %float_0
%111 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_1
%107 = OpCompositeConstruct %mat4v4float %108 %109 %110 %111
OpStore %m10 %107
%114 = OpCompositeConstruct %v4float %float_2 %float_0 %float_0 %float_0
%115 = OpCompositeConstruct %v4float %float_0 %float_2 %float_0 %float_0
%116 = OpCompositeConstruct %v4float %float_0 %float_0 %float_2 %float_0
%117 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_2
%113 = OpCompositeConstruct %mat4v4float %114 %115 %116 %117
OpStore %m11 %113
%118 = OpLoad %mat4v4float %m11
%119 = OpLoad %mat4v4float %m10
%120 = OpCompositeExtract %v4float %118 0
%121 = OpCompositeExtract %v4float %119 0
%122 = OpFSub %v4float %120 %121
%123 = OpCompositeExtract %v4float %118 1
%124 = OpCompositeExtract %v4float %119 1
%125 = OpFSub %v4float %123 %124
%126 = OpCompositeExtract %v4float %118 2
%127 = OpCompositeExtract %v4float %119 2
%128 = OpFSub %v4float %126 %127
%129 = OpCompositeExtract %v4float %118 3
%130 = OpCompositeExtract %v4float %119 3
%131 = OpFSub %v4float %129 %130
%132 = OpCompositeConstruct %mat4v4float %122 %125 %128 %131
OpStore %m11 %132
%30 = OpCompositeConstruct %v2float %float_1 %float_2
%31 = OpCompositeConstruct %v2float %float_3 %float_4
%29 = OpCompositeConstruct %mat2v2float %30 %31
OpStore %m1 %29
%33 = OpLoad %mat2v2float %m1
OpStore %m3 %33
%37 = OpCompositeConstruct %v2float %float_1 %float_0
%38 = OpCompositeConstruct %v2float %float_0 %float_1
%35 = OpCompositeConstruct %mat2v2float %37 %38
OpStore %m4 %35
%39 = OpLoad %mat2v2float %m3
%40 = OpLoad %mat2v2float %m4
%41 = OpMatrixTimesMatrix %mat2v2float %39 %40
OpStore %m3 %41
%45 = OpAccessChain %_ptr_Function_v2float %m1 %int_0
%47 = OpLoad %v2float %45
%48 = OpCompositeExtract %float %47 0
%50 = OpCompositeConstruct %v2float %48 %float_0
%51 = OpCompositeConstruct %v2float %float_0 %48
%49 = OpCompositeConstruct %mat2v2float %50 %51
OpStore %m5 %49
%54 = OpCompositeConstruct %v2float %float_1 %float_2
%55 = OpCompositeConstruct %v2float %float_3 %float_4
%53 = OpCompositeConstruct %mat2v2float %54 %55
OpStore %m6 %53
%56 = OpLoad %mat2v2float %m6
%57 = OpLoad %mat2v2float %m5
%58 = OpCompositeExtract %v2float %56 0
%59 = OpCompositeExtract %v2float %57 0
%60 = OpFAdd %v2float %58 %59
%61 = OpCompositeExtract %v2float %56 1
%62 = OpCompositeExtract %v2float %57 1
%63 = OpFAdd %v2float %61 %62
%64 = OpCompositeConstruct %mat2v2float %60 %63
OpStore %m6 %64
%69 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
%70 = OpCompositeConstruct %v4float %float_0 %float_1 %float_0 %float_0
%71 = OpCompositeConstruct %v4float %float_0 %float_0 %float_1 %float_0
%72 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_1
%68 = OpCompositeConstruct %mat4v4float %69 %70 %71 %72
OpStore %m10 %68
%75 = OpCompositeConstruct %v4float %float_2 %float_0 %float_0 %float_0
%76 = OpCompositeConstruct %v4float %float_0 %float_2 %float_0 %float_0
%77 = OpCompositeConstruct %v4float %float_0 %float_0 %float_2 %float_0
%78 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_2
%74 = OpCompositeConstruct %mat4v4float %75 %76 %77 %78
OpStore %m11 %74
%79 = OpLoad %mat4v4float %m11
%80 = OpLoad %mat4v4float %m10
%81 = OpCompositeExtract %v4float %79 0
%82 = OpCompositeExtract %v4float %80 0
%83 = OpFSub %v4float %81 %82
%84 = OpCompositeExtract %v4float %79 1
%85 = OpCompositeExtract %v4float %80 1
%86 = OpFSub %v4float %84 %85
%87 = OpCompositeExtract %v4float %79 2
%88 = OpCompositeExtract %v4float %80 2
%89 = OpFSub %v4float %87 %88
%90 = OpCompositeExtract %v4float %79 3
%91 = OpCompositeExtract %v4float %80 3
%92 = OpFSub %v4float %90 %91
%93 = OpCompositeConstruct %mat4v4float %83 %86 %89 %92
OpStore %m11 %93
OpReturnValue %true
OpFunctionEnd
%main = OpFunction %v4float None %134
%135 = OpLabel
%_0_v1 = OpVariable %_ptr_Function_v3float Function
%_1_v2 = OpVariable %_ptr_Function_v3float Function
%main = OpFunction %v4float None %95
%96 = OpLabel
%_2_m1 = OpVariable %_ptr_Function_mat2v2float Function
%_3_m2 = OpVariable %_ptr_Function_mat2v2float Function
%_4_m3 = OpVariable %_ptr_Function_mat2v2float Function
%_5_m4 = OpVariable %_ptr_Function_mat2v2float Function
%_6_m5 = OpVariable %_ptr_Function_mat2v2float Function
%_7_m6 = OpVariable %_ptr_Function_mat2v2float Function
%_8_m7 = OpVariable %_ptr_Function_mat2v2float Function
%_9_m9 = OpVariable %_ptr_Function_mat3v3float Function
%_10_m10 = OpVariable %_ptr_Function_mat4v4float Function
%_11_m11 = OpVariable %_ptr_Function_mat4v4float Function
%230 = OpVariable %_ptr_Function_v4float Function
%138 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
%139 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
%140 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
%137 = OpCompositeConstruct %mat3v3float %138 %139 %140
%141 = OpMatrixTimesVector %v3float %137 %32
OpStore %_0_v1 %141
%144 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
%145 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
%146 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
%143 = OpCompositeConstruct %mat3v3float %144 %145 %146
%147 = OpVectorTimesMatrix %v3float %32 %143
OpStore %_1_v2 %147
%150 = OpCompositeConstruct %v2float %float_1 %float_2
%151 = OpCompositeConstruct %v2float %float_3 %float_4
%149 = OpCompositeConstruct %mat2v2float %150 %151
OpStore %_2_m1 %149
%154 = OpCompositeExtract %float %50 0
%155 = OpCompositeExtract %float %50 1
%156 = OpCompositeExtract %float %50 2
%157 = OpCompositeExtract %float %50 3
%158 = OpCompositeConstruct %v2float %154 %155
%159 = OpCompositeConstruct %v2float %156 %157
%153 = OpCompositeConstruct %mat2v2float %158 %159
OpStore %_3_m2 %153
%161 = OpLoad %mat2v2float %_2_m1
OpStore %_4_m3 %161
%164 = OpCompositeConstruct %v2float %float_1 %float_0
%165 = OpCompositeConstruct %v2float %float_0 %float_1
%163 = OpCompositeConstruct %mat2v2float %164 %165
OpStore %_5_m4 %163
%166 = OpLoad %mat2v2float %_4_m3
%167 = OpLoad %mat2v2float %_5_m4
%168 = OpMatrixTimesMatrix %mat2v2float %166 %167
OpStore %_4_m3 %168
%170 = OpAccessChain %_ptr_Function_v2float %_2_m1 %int_0
%171 = OpLoad %v2float %170
%172 = OpCompositeExtract %float %171 0
%174 = OpCompositeConstruct %v2float %172 %float_0
%175 = OpCompositeConstruct %v2float %float_0 %172
%173 = OpCompositeConstruct %mat2v2float %174 %175
OpStore %_6_m5 %173
%178 = OpCompositeConstruct %v2float %float_1 %float_2
%179 = OpCompositeConstruct %v2float %float_3 %float_4
%177 = OpCompositeConstruct %mat2v2float %178 %179
OpStore %_7_m6 %177
%180 = OpLoad %mat2v2float %_7_m6
%181 = OpLoad %mat2v2float %_6_m5
%182 = OpCompositeExtract %v2float %180 0
%183 = OpCompositeExtract %v2float %181 0
%184 = OpFAdd %v2float %182 %183
%185 = OpCompositeExtract %v2float %180 1
%186 = OpCompositeExtract %v2float %181 1
%187 = OpFAdd %v2float %185 %186
%188 = OpCompositeConstruct %mat2v2float %184 %187
OpStore %_7_m6 %188
%191 = OpCompositeConstruct %v2float %float_5 %float_6
%192 = OpCompositeConstruct %v2float %float_7 %float_8
%190 = OpCompositeConstruct %mat2v2float %191 %192
OpStore %_8_m7 %190
%195 = OpCompositeConstruct %v3float %float_1 %float_0 %float_0
%196 = OpCompositeConstruct %v3float %float_0 %float_1 %float_0
%197 = OpCompositeConstruct %v3float %float_0 %float_0 %float_1
%194 = OpCompositeConstruct %mat3v3float %195 %196 %197
OpStore %_9_m9 %194
%200 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
%201 = OpCompositeConstruct %v4float %float_0 %float_1 %float_0 %float_0
%202 = OpCompositeConstruct %v4float %float_0 %float_0 %float_1 %float_0
%203 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_1
%199 = OpCompositeConstruct %mat4v4float %200 %201 %202 %203
OpStore %_10_m10 %199
%206 = OpCompositeConstruct %v4float %float_2 %float_0 %float_0 %float_0
%207 = OpCompositeConstruct %v4float %float_0 %float_2 %float_0 %float_0
%208 = OpCompositeConstruct %v4float %float_0 %float_0 %float_2 %float_0
%209 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_2
%205 = OpCompositeConstruct %mat4v4float %206 %207 %208 %209
OpStore %_11_m11 %205
%210 = OpLoad %mat4v4float %_11_m11
%211 = OpLoad %mat4v4float %_10_m10
%212 = OpCompositeExtract %v4float %210 0
%213 = OpCompositeExtract %v4float %211 0
%214 = OpFSub %v4float %212 %213
%215 = OpCompositeExtract %v4float %210 1
%216 = OpCompositeExtract %v4float %211 1
%217 = OpFSub %v4float %215 %216
%218 = OpCompositeExtract %v4float %210 2
%219 = OpCompositeExtract %v4float %211 2
%220 = OpFSub %v4float %218 %219
%221 = OpCompositeExtract %v4float %210 3
%222 = OpCompositeExtract %v4float %211 3
%223 = OpFSub %v4float %221 %222
%224 = OpCompositeConstruct %mat4v4float %214 %217 %220 %223
OpStore %_11_m11 %224
OpSelectionMerge %227 None
OpBranchConditional %true %226 %227
%226 = OpLabel
%228 = OpFunctionCall %bool %test_half
OpBranch %227
%227 = OpLabel
%229 = OpPhi %bool %false %135 %228 %226
OpSelectionMerge %234 None
OpBranchConditional %229 %232 %233
%232 = OpLabel
%235 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%237 = OpLoad %v4float %235
OpStore %230 %237
OpBranch %234
%233 = OpLabel
%238 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%240 = OpLoad %v4float %238
OpStore %230 %240
OpBranch %234
%234 = OpLabel
%241 = OpLoad %v4float %230
OpReturnValue %241
%162 = OpVariable %_ptr_Function_v4float Function
%99 = OpCompositeConstruct %v2float %float_1 %float_2
%100 = OpCompositeConstruct %v2float %float_3 %float_4
%98 = OpCompositeConstruct %mat2v2float %99 %100
OpStore %_2_m1 %98
%102 = OpLoad %mat2v2float %_2_m1
OpStore %_4_m3 %102
%105 = OpCompositeConstruct %v2float %float_1 %float_0
%106 = OpCompositeConstruct %v2float %float_0 %float_1
%104 = OpCompositeConstruct %mat2v2float %105 %106
OpStore %_5_m4 %104
%107 = OpLoad %mat2v2float %_4_m3
%108 = OpLoad %mat2v2float %_5_m4
%109 = OpMatrixTimesMatrix %mat2v2float %107 %108
OpStore %_4_m3 %109
%111 = OpAccessChain %_ptr_Function_v2float %_2_m1 %int_0
%112 = OpLoad %v2float %111
%113 = OpCompositeExtract %float %112 0
%115 = OpCompositeConstruct %v2float %113 %float_0
%116 = OpCompositeConstruct %v2float %float_0 %113
%114 = OpCompositeConstruct %mat2v2float %115 %116
OpStore %_6_m5 %114
%119 = OpCompositeConstruct %v2float %float_1 %float_2
%120 = OpCompositeConstruct %v2float %float_3 %float_4
%118 = OpCompositeConstruct %mat2v2float %119 %120
OpStore %_7_m6 %118
%121 = OpLoad %mat2v2float %_7_m6
%122 = OpLoad %mat2v2float %_6_m5
%123 = OpCompositeExtract %v2float %121 0
%124 = OpCompositeExtract %v2float %122 0
%125 = OpFAdd %v2float %123 %124
%126 = OpCompositeExtract %v2float %121 1
%127 = OpCompositeExtract %v2float %122 1
%128 = OpFAdd %v2float %126 %127
%129 = OpCompositeConstruct %mat2v2float %125 %128
OpStore %_7_m6 %129
%132 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
%133 = OpCompositeConstruct %v4float %float_0 %float_1 %float_0 %float_0
%134 = OpCompositeConstruct %v4float %float_0 %float_0 %float_1 %float_0
%135 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_1
%131 = OpCompositeConstruct %mat4v4float %132 %133 %134 %135
OpStore %_10_m10 %131
%138 = OpCompositeConstruct %v4float %float_2 %float_0 %float_0 %float_0
%139 = OpCompositeConstruct %v4float %float_0 %float_2 %float_0 %float_0
%140 = OpCompositeConstruct %v4float %float_0 %float_0 %float_2 %float_0
%141 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_2
%137 = OpCompositeConstruct %mat4v4float %138 %139 %140 %141
OpStore %_11_m11 %137
%142 = OpLoad %mat4v4float %_11_m11
%143 = OpLoad %mat4v4float %_10_m10
%144 = OpCompositeExtract %v4float %142 0
%145 = OpCompositeExtract %v4float %143 0
%146 = OpFSub %v4float %144 %145
%147 = OpCompositeExtract %v4float %142 1
%148 = OpCompositeExtract %v4float %143 1
%149 = OpFSub %v4float %147 %148
%150 = OpCompositeExtract %v4float %142 2
%151 = OpCompositeExtract %v4float %143 2
%152 = OpFSub %v4float %150 %151
%153 = OpCompositeExtract %v4float %142 3
%154 = OpCompositeExtract %v4float %143 3
%155 = OpFSub %v4float %153 %154
%156 = OpCompositeConstruct %mat4v4float %146 %149 %152 %155
OpStore %_11_m11 %156
OpSelectionMerge %159 None
OpBranchConditional %true %158 %159
%158 = OpLabel
%160 = OpFunctionCall %bool %test_half
OpBranch %159
%159 = OpLabel
%161 = OpPhi %bool %false %96 %160 %158
OpSelectionMerge %166 None
OpBranchConditional %161 %164 %165
%164 = OpLabel
%167 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%169 = OpLoad %v4float %167
OpStore %162 %169
OpBranch %166
%165 = OpLabel
%170 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%172 = OpLoad %v4float %170
OpStore %162 %172
OpBranch %166
%166 = OpLabel
%173 = OpLoad %v4float %162
OpReturnValue %173
OpFunctionEnd

View File

@ -3,36 +3,26 @@ out vec4 sk_FragColor;
uniform vec4 colorGreen;
uniform vec4 colorRed;
bool test_half() {
vec3 v1 = mat3(1.0) * vec3(2.0);
vec3 v2 = vec3(2.0) * mat3(1.0);
mat2 m1 = mat2(1.0, 2.0, 3.0, 4.0);
mat2 m2 = mat2(vec4(0.0));
mat2 m3 = m1;
mat2 m4 = mat2(1.0);
m3 *= m4;
mat2 m5 = mat2(m1[0].x);
mat2 m6 = mat2(1.0, 2.0, 3.0, 4.0);
m6 += m5;
mat2 m7 = mat2(5.0, 6.0, 7.0, 8.0);
mat3 m9 = mat3(1.0);
mat4 m10 = mat4(1.0);
mat4 m11 = mat4(2.0);
m11 -= m10;
return true;
}
vec4 main() {
vec3 _0_v1 = mat3(1.0) * vec3(2.0);
vec3 _1_v2 = vec3(2.0) * mat3(1.0);
mat2 _2_m1 = mat2(1.0, 2.0, 3.0, 4.0);
mat2 _3_m2 = mat2(vec4(0.0));
mat2 _4_m3 = _2_m1;
mat2 _5_m4 = mat2(1.0);
_4_m3 *= _5_m4;
mat2 _6_m5 = mat2(_2_m1[0].x);
mat2 _7_m6 = mat2(1.0, 2.0, 3.0, 4.0);
_7_m6 += _6_m5;
mat2 _8_m7 = mat2(5.0, 6.0, 7.0, 8.0);
mat3 _9_m9 = mat3(1.0);
mat4 _10_m10 = mat4(1.0);
mat4 _11_m11 = mat4(2.0);
_11_m11 -= _10_m10;

View File

@ -10,27 +10,19 @@ struct Inputs {
struct Outputs {
float4 sk_FragColor [[color(0)]];
};
float2x2 float2x2_from_float4(float4 x0) {
return float2x2(float2(x0[0], x0[1]), float2(x0[2], x0[3]));
}
thread float2x2& operator*=(thread float2x2& left, thread const float2x2& right) {
left = left * right;
return left;
}
bool test_half() {
float3 v1 = float3x3(1.0) * float3(2.0);
float3 v2 = float3(2.0) * float3x3(1.0);
float2x2 m1 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
float2x2 m2 = float2x2_from_float4(float4(0.0));
float2x2 m3 = m1;
float2x2 m4 = float2x2(1.0);
m3 *= m4;
float2x2 m5 = float2x2(m1[0].x);
float2x2 m6 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
m6 += m5;
float2x2 m7 = float2x2(float2(5.0, 6.0), float2(7.0, 8.0));
float3x3 m9 = float3x3(1.0);
float4x4 m10 = float4x4(1.0);
float4x4 m11 = float4x4(2.0);
m11 -= m10;
@ -39,18 +31,13 @@ bool test_half() {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
float3 _0_v1 = float3x3(1.0) * float3(2.0);
float3 _1_v2 = float3(2.0) * float3x3(1.0);
float2x2 _2_m1 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
float2x2 _3_m2 = float2x2_from_float4(float4(0.0));
float2x2 _4_m3 = _2_m1;
float2x2 _5_m4 = float2x2(1.0);
_4_m3 *= _5_m4;
float2x2 _6_m5 = float2x2(_2_m1[0].x);
float2x2 _7_m6 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
_7_m6 += _6_m5;
float2x2 _8_m7 = float2x2(float2(5.0, 6.0), float2(7.0, 8.0));
float3x3 _9_m9 = float3x3(1.0);
float4x4 _10_m10 = float4x4(1.0);
float4x4 _11_m11 = float4x4(2.0);
_11_m11 -= _10_m10;

View File

@ -13,11 +13,6 @@ OpName %main "main"
OpName %x "x"
OpName %y "y"
OpName %z "z"
OpName %b "b"
OpName %c "c"
OpName %d "d"
OpName %e "e"
OpName %f "f"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
@ -30,15 +25,9 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %81 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %85 RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -61,10 +50,6 @@ OpDecorate %145 RelaxedPrecision
%int_2 = OpConstant %int 2
%int_4 = OpConstant %int 4
%int_1 = OpConstant %int 1
%_ptr_Function_bool = OpTypePointer Function %bool
%true = OpConstantTrue %bool
%float_4 = OpConstant %float 4
%false = OpConstantFalse %bool
%float_12 = OpConstant %float 12
%float_10 = OpConstant %float 10
%int_0 = OpConstant %int 0
@ -72,6 +57,7 @@ OpDecorate %145 RelaxedPrecision
%int_5 = OpConstant %int 5
%float_6 = OpConstant %float 6
%int_6 = OpConstant %int 6
%false = OpConstantFalse %bool
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%_entrypoint = OpFunction %void None %15
@ -85,12 +71,7 @@ OpFunctionEnd
%x = OpVariable %_ptr_Function_float Function
%y = OpVariable %_ptr_Function_float Function
%z = OpVariable %_ptr_Function_int Function
%b = OpVariable %_ptr_Function_bool Function
%c = OpVariable %_ptr_Function_bool Function
%d = OpVariable %_ptr_Function_bool Function
%e = OpVariable %_ptr_Function_bool Function
%f = OpVariable %_ptr_Function_bool Function
%135 = OpVariable %_ptr_Function_v4float Function
%96 = OpVariable %_ptr_Function_v4float Function
OpStore %x %float_1
OpStore %y %float_2
OpStore %z %int_3
@ -121,118 +102,70 @@ OpStore %y %46
%53 = OpShiftRightArithmetic %int %52 %int_2
%55 = OpShiftLeftLogical %int %53 %int_1
OpStore %z %55
%56 = OpLoad %float %x
%58 = OpFAdd %float %56 %float_12
OpStore %x %58
%59 = OpLoad %float %x
%61 = OpFOrdGreaterThan %bool %59 %float_4
%62 = OpLoad %float %x
%63 = OpFOrdLessThan %bool %62 %float_2
%64 = OpLogicalEqual %bool %61 %63
OpSelectionMerge %66 None
OpBranchConditional %64 %66 %65
%65 = OpLabel
%68 = OpExtInst %float %1 Sqrt %float_2
%69 = OpFOrdGreaterThanEqual %bool %float_2 %68
OpSelectionMerge %71 None
OpBranchConditional %69 %70 %71
%70 = OpLabel
%72 = OpLoad %float %y
%73 = OpLoad %float %x
%74 = OpFOrdLessThanEqual %bool %72 %73
OpBranch %71
%71 = OpLabel
%75 = OpPhi %bool %false %65 %74 %70
OpBranch %66
%66 = OpLabel
%76 = OpPhi %bool %true %19 %75 %71
OpStore %b %76
%78 = OpExtInst %float %1 Sqrt %float_2
%79 = OpFOrdGreaterThan %bool %78 %float_2
OpStore %c %79
%81 = OpLoad %bool %b
%82 = OpLoad %bool %c
%83 = OpLogicalNotEqual %bool %81 %82
OpStore %d %83
%85 = OpLoad %bool %b
OpSelectionMerge %87 None
OpBranchConditional %85 %86 %87
%86 = OpLabel
%88 = OpLoad %bool %c
OpBranch %87
%87 = OpLabel
%89 = OpPhi %bool %false %66 %88 %86
OpStore %e %89
%91 = OpLoad %bool %b
OpSelectionMerge %93 None
OpBranchConditional %91 %93 %92
%92 = OpLabel
%94 = OpLoad %bool %c
OpBranch %93
%93 = OpLabel
%95 = OpPhi %bool %true %87 %94 %92
OpStore %f %95
%96 = OpLoad %float %x
%98 = OpFAdd %float %96 %float_12
OpStore %x %98
%99 = OpLoad %float %x
%100 = OpFSub %float %99 %float_12
OpStore %x %100
%101 = OpLoad %float %x
%102 = OpLoad %float %y
%104 = OpFDiv %float %102 %float_10
OpStore %y %104
%105 = OpFMul %float %101 %104
OpStore %x %105
%106 = OpLoad %int %z
%108 = OpBitwiseOr %int %106 %int_0
OpStore %z %108
%109 = OpLoad %int %z
%111 = OpBitwiseAnd %int %109 %int_n1
OpStore %z %111
%112 = OpLoad %int %z
%113 = OpBitwiseXor %int %112 %int_0
OpStore %z %113
%114 = OpLoad %int %z
%115 = OpShiftRightArithmetic %int %114 %int_2
OpStore %z %115
%116 = OpLoad %int %z
%117 = OpShiftLeftLogical %int %116 %int_4
OpStore %z %117
%118 = OpLoad %int %z
%120 = OpSMod %int %118 %int_5
OpStore %z %120
%60 = OpFSub %float %59 %float_12
OpStore %x %60
%61 = OpLoad %float %x
%62 = OpLoad %float %y
%64 = OpFDiv %float %62 %float_10
OpStore %y %64
%65 = OpFMul %float %61 %64
OpStore %x %65
%66 = OpLoad %int %z
%68 = OpBitwiseOr %int %66 %int_0
OpStore %z %68
%69 = OpLoad %int %z
%71 = OpBitwiseAnd %int %69 %int_n1
OpStore %z %71
%72 = OpLoad %int %z
%73 = OpBitwiseXor %int %72 %int_0
OpStore %z %73
%74 = OpLoad %int %z
%75 = OpShiftRightArithmetic %int %74 %int_2
OpStore %z %75
%76 = OpLoad %int %z
%77 = OpShiftLeftLogical %int %76 %int_4
OpStore %z %77
%78 = OpLoad %int %z
%80 = OpSMod %int %78 %int_5
OpStore %z %80
OpStore %x %float_6
OpStore %y %float_6
OpStore %z %int_6
%123 = OpLoad %float %x
%124 = OpFOrdEqual %bool %123 %float_6
OpSelectionMerge %126 None
OpBranchConditional %124 %125 %126
%125 = OpLabel
%127 = OpLoad %float %y
%128 = OpFOrdEqual %bool %127 %float_6
OpBranch %126
%126 = OpLabel
%129 = OpPhi %bool %false %93 %128 %125
OpSelectionMerge %131 None
OpBranchConditional %129 %130 %131
%130 = OpLabel
%132 = OpLoad %int %z
%133 = OpIEqual %bool %132 %int_6
OpBranch %131
%131 = OpLabel
%134 = OpPhi %bool %false %126 %133 %130
OpSelectionMerge %139 None
OpBranchConditional %134 %137 %138
%137 = OpLabel
%140 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%142 = OpLoad %v4float %140
OpStore %135 %142
OpBranch %139
%138 = OpLabel
%143 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%144 = OpLoad %v4float %143
OpStore %135 %144
OpBranch %139
%139 = OpLabel
%145 = OpLoad %v4float %135
OpReturnValue %145
%84 = OpLoad %float %x
%85 = OpFOrdEqual %bool %84 %float_6
OpSelectionMerge %87 None
OpBranchConditional %85 %86 %87
%86 = OpLabel
%88 = OpLoad %float %y
%89 = OpFOrdEqual %bool %88 %float_6
OpBranch %87
%87 = OpLabel
%90 = OpPhi %bool %false %19 %89 %86
OpSelectionMerge %92 None
OpBranchConditional %90 %91 %92
%91 = OpLabel
%93 = OpLoad %int %z
%94 = OpIEqual %bool %93 %int_6
OpBranch %92
%92 = OpLabel
%95 = OpPhi %bool %false %87 %94 %91
OpSelectionMerge %100 None
OpBranchConditional %95 %98 %99
%98 = OpLabel
%101 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%103 = OpLoad %v4float %101
OpStore %96 %103
OpBranch %100
%99 = OpLabel
%104 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%105 = OpLoad %v4float %104
OpStore %96 %105
OpBranch %100
%100 = OpLabel
%106 = OpLoad %v4float %96
OpReturnValue %106
OpFunctionEnd

View File

@ -9,11 +9,6 @@ vec4 main() {
x = (x - x) + ((y * x) * x) * (y - x);
y = (x / y) / x;
z = (((z / 2) % 3 << 4) >> 2) << 1;
bool b = x > 4.0 == x < 2.0 || 2.0 >= sqrt(2.0) && y <= x;
bool c = sqrt(2.0) > 2.0;
bool d = b ^^ c;
bool e = b && c;
bool f = b || c;
x += 12.0;
x -= 12.0;
x *= (y /= 10.0);

View File

@ -20,11 +20,6 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _unifo
x = (x - x) + ((y * x) * x) * (y - x);
y = (x / y) / x;
z = (((z / 2) % 3 << 4) >> 2) << 1;
bool b = x > 4.0 == x < 2.0 || 2.0 >= sqrt(2.0) && y <= x;
bool c = sqrt(2.0) > 2.0;
bool d = b != c;
bool e = b && c;
bool f = b || c;
x += 12.0;
x -= 12.0;
x *= (y /= 10.0);

View File

@ -5,8 +5,6 @@ OpEntryPoint Fragment %main "main" %sk_Clockwise
OpExecutionMode %main OriginUpperLeft
OpName %sk_Clockwise "sk_Clockwise"
OpName %main "main"
OpName %_0_y "_0_y"
OpName %_1_z "_1_z"
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
%bool = OpTypeBool
@ -14,16 +12,8 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%void = OpTypeVoid
%7 = OpTypeFunction %void
%float = OpTypeFloat 32
%_ptr_Function_float = OpTypePointer Function %float
%float_0 = OpConstant %float 0
%false = OpConstantFalse %bool
%main = OpFunction %void None %7
%8 = OpLabel
%_0_y = OpVariable %_ptr_Function_float Function
%_1_z = OpVariable %_ptr_Function_float Function
OpStore %_0_y %float_0
%14 = OpLoad %float %_0_y
OpStore %_1_z %14
OpReturn
OpFunctionEnd

View File

@ -1,6 +1,4 @@
void main() {
float _0_y = 0.0;
float _1_z = _0_y;
false;
}

View File

@ -9,8 +9,6 @@ struct Outputs {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
float _0_y = 0.0;
float _1_z = _0_y;
false;
return _out;
}

View File

@ -11,7 +11,6 @@ OpMemberName %_UniformBuffer 1 "colorRed"
OpMemberName %_UniformBuffer 2 "colorWhite"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %result "result"
OpName %h "h"
OpName %h2 "h2"
OpName %h3 "h3"
@ -49,84 +48,84 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %28 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %26 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %40 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %50 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %75 RelaxedPrecision
OpDecorate %76 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
OpDecorate %85 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %90 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %141 RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
OpDecorate %177 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %195 RelaxedPrecision
OpDecorate %203 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %218 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %233 RelaxedPrecision
OpDecorate %241 RelaxedPrecision
OpDecorate %246 RelaxedPrecision
OpDecorate %251 RelaxedPrecision
OpDecorate %253 RelaxedPrecision
OpDecorate %259 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %109 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %124 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %152 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %167 RelaxedPrecision
OpDecorate %172 RelaxedPrecision
OpDecorate %176 RelaxedPrecision
OpDecorate %182 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %194 RelaxedPrecision
OpDecorate %202 RelaxedPrecision
OpDecorate %210 RelaxedPrecision
OpDecorate %217 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %240 RelaxedPrecision
OpDecorate %245 RelaxedPrecision
OpDecorate %250 RelaxedPrecision
OpDecorate %252 RelaxedPrecision
OpDecorate %258 RelaxedPrecision
OpDecorate %262 RelaxedPrecision
OpDecorate %263 RelaxedPrecision
OpDecorate %264 RelaxedPrecision
OpDecorate %265 RelaxedPrecision
OpDecorate %266 RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %268 RelaxedPrecision
OpDecorate %269 RelaxedPrecision
OpDecorate %270 RelaxedPrecision
OpDecorate %272 RelaxedPrecision
OpDecorate %274 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %280 RelaxedPrecision
OpDecorate %282 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %287 RelaxedPrecision
OpDecorate %314 RelaxedPrecision
OpDecorate %329 RelaxedPrecision
OpDecorate %332 RelaxedPrecision
OpDecorate %335 RelaxedPrecision
OpDecorate %340 RelaxedPrecision
OpDecorate %345 RelaxedPrecision
OpDecorate %349 RelaxedPrecision
OpDecorate %355 RelaxedPrecision
OpDecorate %271 RelaxedPrecision
OpDecorate %273 RelaxedPrecision
OpDecorate %275 RelaxedPrecision
OpDecorate %277 RelaxedPrecision
OpDecorate %279 RelaxedPrecision
OpDecorate %281 RelaxedPrecision
OpDecorate %283 RelaxedPrecision
OpDecorate %286 RelaxedPrecision
OpDecorate %313 RelaxedPrecision
OpDecorate %328 RelaxedPrecision
OpDecorate %331 RelaxedPrecision
OpDecorate %334 RelaxedPrecision
OpDecorate %339 RelaxedPrecision
OpDecorate %344 RelaxedPrecision
OpDecorate %348 RelaxedPrecision
OpDecorate %354 RelaxedPrecision
OpDecorate %356 RelaxedPrecision
OpDecorate %357 RelaxedPrecision
OpDecorate %358 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -140,7 +139,6 @@ OpDecorate %358 RelaxedPrecision
%void = OpTypeVoid
%15 = OpTypeFunction %void
%18 = OpTypeFunction %v4float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
@ -150,6 +148,7 @@ OpDecorate %358 RelaxedPrecision
%_ptr_Function_v2float = OpTypePointer Function %v2float
%v3float = OpTypeVector %float 3
%_ptr_Function_v3float = OpTypePointer Function %v3float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%int_1 = OpConstant %int 1
%mat2v2float = OpTypeMatrix %v2float 2
%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
@ -184,7 +183,6 @@ OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%result = OpVariable %_ptr_Function_v4float Function
%h = OpVariable %_ptr_Function_float Function
%h2 = OpVariable %_ptr_Function_v2float Function
%h3 = OpVariable %_ptr_Function_v3float Function
@ -208,351 +206,351 @@ OpFunctionEnd
%b3 = OpVariable %_ptr_Function_v3bool Function
%b4 = OpVariable %_ptr_Function_v4bool Function
%ok = OpVariable %_ptr_Function_bool Function
%350 = OpVariable %_ptr_Function_v4float Function
%24 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%28 = OpLoad %v4float %24
%29 = OpCompositeExtract %float %28 0
OpStore %h %29
%34 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%35 = OpLoad %v4float %34
%36 = OpCompositeExtract %float %35 1
%37 = OpCompositeConstruct %v2float %36 %36
OpStore %h2 %37
%41 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%42 = OpLoad %v4float %41
%43 = OpCompositeExtract %float %42 2
%44 = OpCompositeConstruct %v3float %43 %43 %43
OpStore %h3 %44
%46 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%47 = OpLoad %v4float %46
%48 = OpCompositeExtract %float %47 3
%49 = OpCompositeConstruct %v4float %48 %48 %48 %48
OpStore %h4 %49
%50 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%51 = OpLoad %v4float %50
%52 = OpCompositeExtract %float %51 0
%53 = OpAccessChain %_ptr_Function_float %h3 %int_1
OpStore %53 %52
%55 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%56 = OpLoad %v4float %55
%57 = OpCompositeExtract %float %56 1
%58 = OpCompositeConstruct %v2float %57 %57
%59 = OpLoad %v3float %h3
%60 = OpVectorShuffle %v3float %59 %58 3 1 4
OpStore %h3 %60
%61 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%62 = OpLoad %v4float %61
%63 = OpCompositeExtract %float %62 3
%64 = OpCompositeConstruct %v4float %63 %63 %63 %63
%65 = OpLoad %v4float %h4
%66 = OpVectorShuffle %v4float %65 %64 6 7 4 5
OpStore %h4 %66
%70 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%71 = OpLoad %v4float %70
%72 = OpCompositeExtract %float %71 0
%75 = OpCompositeConstruct %v2float %72 %float_0
%76 = OpCompositeConstruct %v2float %float_0 %72
%73 = OpCompositeConstruct %mat2v2float %75 %76
OpStore %h2x2 %73
%80 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%81 = OpLoad %v4float %80
%82 = OpCompositeExtract %float %81 1
%84 = OpCompositeConstruct %v3float %82 %float_0 %float_0
%85 = OpCompositeConstruct %v3float %float_0 %82 %float_0
%86 = OpCompositeConstruct %v3float %float_0 %float_0 %82
%83 = OpCompositeConstruct %mat3v3float %84 %85 %86
OpStore %h3x3 %83
%90 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%91 = OpLoad %v4float %90
%92 = OpCompositeExtract %float %91 2
%94 = OpCompositeConstruct %v4float %92 %float_0 %float_0 %float_0
%95 = OpCompositeConstruct %v4float %float_0 %92 %float_0 %float_0
%96 = OpCompositeConstruct %v4float %float_0 %float_0 %92 %float_0
%97 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %92
%93 = OpCompositeConstruct %mat4v4float %94 %95 %96 %97
OpStore %h4x4 %93
%98 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%99 = OpLoad %v4float %98
%100 = OpCompositeExtract %float %99 2
%101 = OpCompositeConstruct %v3float %100 %100 %100
%102 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_1
OpStore %102 %101
%103 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%104 = OpLoad %v4float %103
%105 = OpCompositeExtract %float %104 0
%107 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_3
%108 = OpAccessChain %_ptr_Function_float %107 %int_3
OpStore %108 %105
%109 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%110 = OpLoad %v4float %109
%111 = OpCompositeExtract %float %110 0
%113 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
%114 = OpAccessChain %_ptr_Function_float %113 %int_0
OpStore %114 %111
%117 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%118 = OpLoad %v4float %117
%119 = OpCompositeExtract %float %118 0
%120 = OpConvertFToS %int %119
OpStore %i %120
%124 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%125 = OpLoad %v4float %124
%126 = OpCompositeExtract %float %125 1
%127 = OpConvertFToS %int %126
%128 = OpCompositeConstruct %v2int %127 %127
OpStore %i2 %128
%132 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%133 = OpLoad %v4float %132
%134 = OpCompositeExtract %float %133 2
%135 = OpConvertFToS %int %134
%136 = OpCompositeConstruct %v3int %135 %135 %135
OpStore %i3 %136
%140 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%141 = OpLoad %v4float %140
%142 = OpCompositeExtract %float %141 3
%143 = OpConvertFToS %int %142
%144 = OpCompositeConstruct %v4int %143 %143 %143 %143
OpStore %i4 %144
%145 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%146 = OpLoad %v4float %145
%147 = OpCompositeExtract %float %146 2
%148 = OpConvertFToS %int %147
%149 = OpCompositeConstruct %v3int %148 %148 %148
%150 = OpLoad %v4int %i4
%151 = OpVectorShuffle %v4int %150 %149 4 5 6 3
OpStore %i4 %151
%152 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%153 = OpLoad %v4float %152
%154 = OpCompositeExtract %float %153 0
%155 = OpConvertFToS %int %154
%156 = OpAccessChain %_ptr_Function_int %i2 %int_1
OpStore %156 %155
%158 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%159 = OpLoad %v4float %158
%160 = OpCompositeExtract %float %159 0
OpStore %f %160
%162 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%163 = OpLoad %v4float %162
%164 = OpCompositeExtract %float %163 1
%165 = OpCompositeConstruct %v2float %164 %164
OpStore %f2 %165
%167 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%168 = OpLoad %v4float %167
%169 = OpCompositeExtract %float %168 2
%170 = OpCompositeConstruct %v3float %169 %169 %169
OpStore %f3 %170
%172 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%173 = OpLoad %v4float %172
%174 = OpCompositeExtract %float %173 3
%175 = OpCompositeConstruct %v4float %174 %174 %174 %174
OpStore %f4 %175
%176 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%177 = OpLoad %v4float %176
%178 = OpCompositeExtract %float %177 1
%179 = OpCompositeConstruct %v2float %178 %178
%180 = OpLoad %v3float %f3
%181 = OpVectorShuffle %v3float %180 %179 3 4 2
OpStore %f3 %181
%182 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%183 = OpLoad %v4float %182
%184 = OpCompositeExtract %float %183 0
%185 = OpAccessChain %_ptr_Function_float %f2 %int_0
OpStore %185 %184
%187 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%188 = OpLoad %v4float %187
%189 = OpCompositeExtract %float %188 0
%191 = OpCompositeConstruct %v2float %189 %float_0
%192 = OpCompositeConstruct %v2float %float_0 %189
%190 = OpCompositeConstruct %mat2v2float %191 %192
OpStore %f2x2 %190
%194 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%195 = OpLoad %v4float %194
%196 = OpCompositeExtract %float %195 1
%198 = OpCompositeConstruct %v3float %196 %float_0 %float_0
%199 = OpCompositeConstruct %v3float %float_0 %196 %float_0
%200 = OpCompositeConstruct %v3float %float_0 %float_0 %196
%197 = OpCompositeConstruct %mat3v3float %198 %199 %200
OpStore %f3x3 %197
%202 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%203 = OpLoad %v4float %202
%204 = OpCompositeExtract %float %203 2
%206 = OpCompositeConstruct %v4float %204 %float_0 %float_0 %float_0
%207 = OpCompositeConstruct %v4float %float_0 %204 %float_0 %float_0
%208 = OpCompositeConstruct %v4float %float_0 %float_0 %204 %float_0
%209 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %204
%205 = OpCompositeConstruct %mat4v4float %206 %207 %208 %209
OpStore %f4x4 %205
%210 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%211 = OpLoad %v4float %210
%212 = OpCompositeExtract %float %211 0
%213 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
%214 = OpAccessChain %_ptr_Function_float %213 %int_0
OpStore %214 %212
%217 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%218 = OpLoad %v4float %217
%219 = OpCompositeExtract %float %218 0
%220 = OpFUnordNotEqual %bool %219 %float_0
OpStore %b %220
%224 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%225 = OpLoad %v4float %224
%226 = OpCompositeExtract %float %225 1
%227 = OpFUnordNotEqual %bool %226 %float_0
%228 = OpCompositeConstruct %v2bool %227 %227
OpStore %b2 %228
%232 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%233 = OpLoad %v4float %232
%234 = OpCompositeExtract %float %233 2
%235 = OpFUnordNotEqual %bool %234 %float_0
%236 = OpCompositeConstruct %v3bool %235 %235 %235
OpStore %b3 %236
%240 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%241 = OpLoad %v4float %240
%242 = OpCompositeExtract %float %241 3
%243 = OpFUnordNotEqual %bool %242 %float_0
%244 = OpCompositeConstruct %v4bool %243 %243 %243 %243
OpStore %b4 %244
%245 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%246 = OpLoad %v4float %245
%247 = OpCompositeExtract %float %246 1
%248 = OpFUnordNotEqual %bool %247 %float_0
%249 = OpCompositeConstruct %v2bool %248 %248
%250 = OpLoad %v4bool %b4
%251 = OpVectorShuffle %v4bool %250 %249 4 1 2 5
OpStore %b4 %251
%252 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%253 = OpLoad %v4float %252
%254 = OpCompositeExtract %float %253 0
%255 = OpFUnordNotEqual %bool %254 %float_0
%256 = OpAccessChain %_ptr_Function_bool %b3 %int_2
OpStore %256 %255
%349 = OpVariable %_ptr_Function_v4float Function
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%26 = OpLoad %v4float %22
%27 = OpCompositeExtract %float %26 0
OpStore %h %27
%32 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%33 = OpLoad %v4float %32
%34 = OpCompositeExtract %float %33 1
%35 = OpCompositeConstruct %v2float %34 %34
OpStore %h2 %35
%39 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%40 = OpLoad %v4float %39
%41 = OpCompositeExtract %float %40 2
%42 = OpCompositeConstruct %v3float %41 %41 %41
OpStore %h3 %42
%45 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%46 = OpLoad %v4float %45
%47 = OpCompositeExtract %float %46 3
%48 = OpCompositeConstruct %v4float %47 %47 %47 %47
OpStore %h4 %48
%49 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%50 = OpLoad %v4float %49
%51 = OpCompositeExtract %float %50 0
%52 = OpAccessChain %_ptr_Function_float %h3 %int_1
OpStore %52 %51
%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%55 = OpLoad %v4float %54
%56 = OpCompositeExtract %float %55 1
%57 = OpCompositeConstruct %v2float %56 %56
%58 = OpLoad %v3float %h3
%59 = OpVectorShuffle %v3float %58 %57 3 1 4
OpStore %h3 %59
%60 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%61 = OpLoad %v4float %60
%62 = OpCompositeExtract %float %61 3
%63 = OpCompositeConstruct %v4float %62 %62 %62 %62
%64 = OpLoad %v4float %h4
%65 = OpVectorShuffle %v4float %64 %63 6 7 4 5
OpStore %h4 %65
%69 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%70 = OpLoad %v4float %69
%71 = OpCompositeExtract %float %70 0
%74 = OpCompositeConstruct %v2float %71 %float_0
%75 = OpCompositeConstruct %v2float %float_0 %71
%72 = OpCompositeConstruct %mat2v2float %74 %75
OpStore %h2x2 %72
%79 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%80 = OpLoad %v4float %79
%81 = OpCompositeExtract %float %80 1
%83 = OpCompositeConstruct %v3float %81 %float_0 %float_0
%84 = OpCompositeConstruct %v3float %float_0 %81 %float_0
%85 = OpCompositeConstruct %v3float %float_0 %float_0 %81
%82 = OpCompositeConstruct %mat3v3float %83 %84 %85
OpStore %h3x3 %82
%89 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%90 = OpLoad %v4float %89
%91 = OpCompositeExtract %float %90 2
%93 = OpCompositeConstruct %v4float %91 %float_0 %float_0 %float_0
%94 = OpCompositeConstruct %v4float %float_0 %91 %float_0 %float_0
%95 = OpCompositeConstruct %v4float %float_0 %float_0 %91 %float_0
%96 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %91
%92 = OpCompositeConstruct %mat4v4float %93 %94 %95 %96
OpStore %h4x4 %92
%97 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%98 = OpLoad %v4float %97
%99 = OpCompositeExtract %float %98 2
%100 = OpCompositeConstruct %v3float %99 %99 %99
%101 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_1
OpStore %101 %100
%102 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%103 = OpLoad %v4float %102
%104 = OpCompositeExtract %float %103 0
%106 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_3
%107 = OpAccessChain %_ptr_Function_float %106 %int_3
OpStore %107 %104
%108 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%109 = OpLoad %v4float %108
%110 = OpCompositeExtract %float %109 0
%112 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
%113 = OpAccessChain %_ptr_Function_float %112 %int_0
OpStore %113 %110
%116 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%117 = OpLoad %v4float %116
%118 = OpCompositeExtract %float %117 0
%119 = OpConvertFToS %int %118
OpStore %i %119
%123 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%124 = OpLoad %v4float %123
%125 = OpCompositeExtract %float %124 1
%126 = OpConvertFToS %int %125
%127 = OpCompositeConstruct %v2int %126 %126
OpStore %i2 %127
%131 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%132 = OpLoad %v4float %131
%133 = OpCompositeExtract %float %132 2
%134 = OpConvertFToS %int %133
%135 = OpCompositeConstruct %v3int %134 %134 %134
OpStore %i3 %135
%139 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%140 = OpLoad %v4float %139
%141 = OpCompositeExtract %float %140 3
%142 = OpConvertFToS %int %141
%143 = OpCompositeConstruct %v4int %142 %142 %142 %142
OpStore %i4 %143
%144 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%145 = OpLoad %v4float %144
%146 = OpCompositeExtract %float %145 2
%147 = OpConvertFToS %int %146
%148 = OpCompositeConstruct %v3int %147 %147 %147
%149 = OpLoad %v4int %i4
%150 = OpVectorShuffle %v4int %149 %148 4 5 6 3
OpStore %i4 %150
%151 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%152 = OpLoad %v4float %151
%153 = OpCompositeExtract %float %152 0
%154 = OpConvertFToS %int %153
%155 = OpAccessChain %_ptr_Function_int %i2 %int_1
OpStore %155 %154
%157 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%158 = OpLoad %v4float %157
%159 = OpCompositeExtract %float %158 0
OpStore %f %159
%161 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%162 = OpLoad %v4float %161
%163 = OpCompositeExtract %float %162 1
%164 = OpCompositeConstruct %v2float %163 %163
OpStore %f2 %164
%166 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%167 = OpLoad %v4float %166
%168 = OpCompositeExtract %float %167 2
%169 = OpCompositeConstruct %v3float %168 %168 %168
OpStore %f3 %169
%171 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%172 = OpLoad %v4float %171
%173 = OpCompositeExtract %float %172 3
%174 = OpCompositeConstruct %v4float %173 %173 %173 %173
OpStore %f4 %174
%175 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%176 = OpLoad %v4float %175
%177 = OpCompositeExtract %float %176 1
%178 = OpCompositeConstruct %v2float %177 %177
%179 = OpLoad %v3float %f3
%180 = OpVectorShuffle %v3float %179 %178 3 4 2
OpStore %f3 %180
%181 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%182 = OpLoad %v4float %181
%183 = OpCompositeExtract %float %182 0
%184 = OpAccessChain %_ptr_Function_float %f2 %int_0
OpStore %184 %183
%186 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%187 = OpLoad %v4float %186
%188 = OpCompositeExtract %float %187 0
%190 = OpCompositeConstruct %v2float %188 %float_0
%191 = OpCompositeConstruct %v2float %float_0 %188
%189 = OpCompositeConstruct %mat2v2float %190 %191
OpStore %f2x2 %189
%193 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%194 = OpLoad %v4float %193
%195 = OpCompositeExtract %float %194 1
%197 = OpCompositeConstruct %v3float %195 %float_0 %float_0
%198 = OpCompositeConstruct %v3float %float_0 %195 %float_0
%199 = OpCompositeConstruct %v3float %float_0 %float_0 %195
%196 = OpCompositeConstruct %mat3v3float %197 %198 %199
OpStore %f3x3 %196
%201 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%202 = OpLoad %v4float %201
%203 = OpCompositeExtract %float %202 2
%205 = OpCompositeConstruct %v4float %203 %float_0 %float_0 %float_0
%206 = OpCompositeConstruct %v4float %float_0 %203 %float_0 %float_0
%207 = OpCompositeConstruct %v4float %float_0 %float_0 %203 %float_0
%208 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %203
%204 = OpCompositeConstruct %mat4v4float %205 %206 %207 %208
OpStore %f4x4 %204
%209 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%210 = OpLoad %v4float %209
%211 = OpCompositeExtract %float %210 0
%212 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
%213 = OpAccessChain %_ptr_Function_float %212 %int_0
OpStore %213 %211
%216 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%217 = OpLoad %v4float %216
%218 = OpCompositeExtract %float %217 0
%219 = OpFUnordNotEqual %bool %218 %float_0
OpStore %b %219
%223 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%224 = OpLoad %v4float %223
%225 = OpCompositeExtract %float %224 1
%226 = OpFUnordNotEqual %bool %225 %float_0
%227 = OpCompositeConstruct %v2bool %226 %226
OpStore %b2 %227
%231 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%232 = OpLoad %v4float %231
%233 = OpCompositeExtract %float %232 2
%234 = OpFUnordNotEqual %bool %233 %float_0
%235 = OpCompositeConstruct %v3bool %234 %234 %234
OpStore %b3 %235
%239 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%240 = OpLoad %v4float %239
%241 = OpCompositeExtract %float %240 3
%242 = OpFUnordNotEqual %bool %241 %float_0
%243 = OpCompositeConstruct %v4bool %242 %242 %242 %242
OpStore %b4 %243
%244 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%245 = OpLoad %v4float %244
%246 = OpCompositeExtract %float %245 1
%247 = OpFUnordNotEqual %bool %246 %float_0
%248 = OpCompositeConstruct %v2bool %247 %247
%249 = OpLoad %v4bool %b4
%250 = OpVectorShuffle %v4bool %249 %248 4 1 2 5
OpStore %b4 %250
%251 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%252 = OpLoad %v4float %251
%253 = OpCompositeExtract %float %252 0
%254 = OpFUnordNotEqual %bool %253 %float_0
%255 = OpAccessChain %_ptr_Function_bool %b3 %int_2
OpStore %255 %254
OpStore %ok %true
%259 = OpLoad %bool %ok
OpSelectionMerge %261 None
OpBranchConditional %259 %260 %261
%258 = OpLoad %bool %ok
OpSelectionMerge %260 None
OpBranchConditional %258 %259 %260
%259 = OpLabel
%262 = OpLoad %float %h
%263 = OpLoad %v2float %h2
%264 = OpCompositeExtract %float %263 0
%265 = OpFMul %float %262 %264
%266 = OpLoad %v3float %h3
%267 = OpCompositeExtract %float %266 0
%268 = OpFMul %float %265 %267
%269 = OpLoad %v4float %h4
%270 = OpCompositeExtract %float %269 0
%271 = OpFMul %float %268 %270
%272 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
%273 = OpLoad %v2float %272
%274 = OpCompositeExtract %float %273 0
%275 = OpFMul %float %271 %274
%276 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_0
%277 = OpLoad %v3float %276
%278 = OpCompositeExtract %float %277 0
%279 = OpFMul %float %275 %278
%280 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_0
%281 = OpLoad %v4float %280
%282 = OpCompositeExtract %float %281 0
%283 = OpFMul %float %279 %282
%284 = OpFOrdEqual %bool %float_1 %283
OpBranch %260
%260 = OpLabel
%263 = OpLoad %float %h
%264 = OpLoad %v2float %h2
%265 = OpCompositeExtract %float %264 0
%266 = OpFMul %float %263 %265
%267 = OpLoad %v3float %h3
%268 = OpCompositeExtract %float %267 0
%269 = OpFMul %float %266 %268
%270 = OpLoad %v4float %h4
%271 = OpCompositeExtract %float %270 0
%272 = OpFMul %float %269 %271
%273 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
%274 = OpLoad %v2float %273
%275 = OpCompositeExtract %float %274 0
%276 = OpFMul %float %272 %275
%277 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_0
%278 = OpLoad %v3float %277
%279 = OpCompositeExtract %float %278 0
%280 = OpFMul %float %276 %279
%281 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_0
%282 = OpLoad %v4float %281
%283 = OpCompositeExtract %float %282 0
%284 = OpFMul %float %280 %283
%285 = OpFOrdEqual %bool %float_1 %284
OpBranch %261
%261 = OpLabel
%286 = OpPhi %bool %false %19 %285 %260
OpStore %ok %286
%287 = OpLoad %bool %ok
OpSelectionMerge %289 None
OpBranchConditional %287 %288 %289
%285 = OpPhi %bool %false %19 %284 %259
OpStore %ok %285
%286 = OpLoad %bool %ok
OpSelectionMerge %288 None
OpBranchConditional %286 %287 %288
%287 = OpLabel
%289 = OpLoad %float %f
%290 = OpLoad %v2float %f2
%291 = OpCompositeExtract %float %290 0
%292 = OpFMul %float %289 %291
%293 = OpLoad %v3float %f3
%294 = OpCompositeExtract %float %293 0
%295 = OpFMul %float %292 %294
%296 = OpLoad %v4float %f4
%297 = OpCompositeExtract %float %296 0
%298 = OpFMul %float %295 %297
%299 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
%300 = OpLoad %v2float %299
%301 = OpCompositeExtract %float %300 0
%302 = OpFMul %float %298 %301
%303 = OpAccessChain %_ptr_Function_v3float %f3x3 %int_0
%304 = OpLoad %v3float %303
%305 = OpCompositeExtract %float %304 0
%306 = OpFMul %float %302 %305
%307 = OpAccessChain %_ptr_Function_v4float %f4x4 %int_0
%308 = OpLoad %v4float %307
%309 = OpCompositeExtract %float %308 0
%310 = OpFMul %float %306 %309
%311 = OpFOrdEqual %bool %float_1 %310
OpBranch %288
%288 = OpLabel
%290 = OpLoad %float %f
%291 = OpLoad %v2float %f2
%292 = OpCompositeExtract %float %291 0
%293 = OpFMul %float %290 %292
%294 = OpLoad %v3float %f3
%295 = OpCompositeExtract %float %294 0
%296 = OpFMul %float %293 %295
%297 = OpLoad %v4float %f4
%298 = OpCompositeExtract %float %297 0
%299 = OpFMul %float %296 %298
%300 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
%301 = OpLoad %v2float %300
%302 = OpCompositeExtract %float %301 0
%303 = OpFMul %float %299 %302
%304 = OpAccessChain %_ptr_Function_v3float %f3x3 %int_0
%305 = OpLoad %v3float %304
%306 = OpCompositeExtract %float %305 0
%307 = OpFMul %float %303 %306
%308 = OpAccessChain %_ptr_Function_v4float %f4x4 %int_0
%309 = OpLoad %v4float %308
%310 = OpCompositeExtract %float %309 0
%311 = OpFMul %float %307 %310
%312 = OpFOrdEqual %bool %float_1 %311
OpBranch %289
%289 = OpLabel
%313 = OpPhi %bool %false %261 %312 %288
OpStore %ok %313
%314 = OpLoad %bool %ok
OpSelectionMerge %316 None
OpBranchConditional %314 %315 %316
%312 = OpPhi %bool %false %260 %311 %287
OpStore %ok %312
%313 = OpLoad %bool %ok
OpSelectionMerge %315 None
OpBranchConditional %313 %314 %315
%314 = OpLabel
%316 = OpLoad %int %i
%317 = OpLoad %v2int %i2
%318 = OpCompositeExtract %int %317 0
%319 = OpIMul %int %316 %318
%320 = OpLoad %v3int %i3
%321 = OpCompositeExtract %int %320 0
%322 = OpIMul %int %319 %321
%323 = OpLoad %v4int %i4
%324 = OpCompositeExtract %int %323 0
%325 = OpIMul %int %322 %324
%326 = OpIEqual %bool %int_1 %325
OpBranch %315
%315 = OpLabel
%317 = OpLoad %int %i
%318 = OpLoad %v2int %i2
%319 = OpCompositeExtract %int %318 0
%320 = OpIMul %int %317 %319
%321 = OpLoad %v3int %i3
%322 = OpCompositeExtract %int %321 0
%323 = OpIMul %int %320 %322
%324 = OpLoad %v4int %i4
%325 = OpCompositeExtract %int %324 0
%326 = OpIMul %int %323 %325
%327 = OpIEqual %bool %int_1 %326
OpBranch %316
%316 = OpLabel
%328 = OpPhi %bool %false %289 %327 %315
OpStore %ok %328
%329 = OpLoad %bool %ok
OpSelectionMerge %331 None
OpBranchConditional %329 %330 %331
%330 = OpLabel
%332 = OpLoad %bool %b
OpSelectionMerge %334 None
OpBranchConditional %332 %333 %334
%327 = OpPhi %bool %false %288 %326 %314
OpStore %ok %327
%328 = OpLoad %bool %ok
OpSelectionMerge %330 None
OpBranchConditional %328 %329 %330
%329 = OpLabel
%331 = OpLoad %bool %b
OpSelectionMerge %333 None
OpBranchConditional %331 %332 %333
%332 = OpLabel
%334 = OpLoad %v2bool %b2
%335 = OpCompositeExtract %bool %334 0
OpBranch %333
%333 = OpLabel
%335 = OpLoad %v2bool %b2
%336 = OpCompositeExtract %bool %335 0
OpBranch %334
%334 = OpLabel
%337 = OpPhi %bool %false %330 %336 %333
OpSelectionMerge %339 None
OpBranchConditional %337 %338 %339
%336 = OpPhi %bool %false %329 %335 %332
OpSelectionMerge %338 None
OpBranchConditional %336 %337 %338
%337 = OpLabel
%339 = OpLoad %v3bool %b3
%340 = OpCompositeExtract %bool %339 0
OpBranch %338
%338 = OpLabel
%340 = OpLoad %v3bool %b3
%341 = OpCompositeExtract %bool %340 0
OpBranch %339
%339 = OpLabel
%342 = OpPhi %bool %false %334 %341 %338
OpSelectionMerge %344 None
OpBranchConditional %342 %343 %344
%341 = OpPhi %bool %false %333 %340 %337
OpSelectionMerge %343 None
OpBranchConditional %341 %342 %343
%342 = OpLabel
%344 = OpLoad %v4bool %b4
%345 = OpCompositeExtract %bool %344 0
OpBranch %343
%343 = OpLabel
%345 = OpLoad %v4bool %b4
%346 = OpCompositeExtract %bool %345 0
OpBranch %344
%344 = OpLabel
%347 = OpPhi %bool %false %339 %346 %343
OpBranch %331
%331 = OpLabel
%348 = OpPhi %bool %false %316 %347 %344
OpStore %ok %348
%349 = OpLoad %bool %ok
OpSelectionMerge %353 None
OpBranchConditional %349 %351 %352
%346 = OpPhi %bool %false %338 %345 %342
OpBranch %330
%330 = OpLabel
%347 = OpPhi %bool %false %315 %346 %343
OpStore %ok %347
%348 = OpLoad %bool %ok
OpSelectionMerge %352 None
OpBranchConditional %348 %350 %351
%350 = OpLabel
%353 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%354 = OpLoad %v4float %353
OpStore %349 %354
OpBranch %352
%351 = OpLabel
%354 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%355 = OpLoad %v4float %354
OpStore %350 %355
OpBranch %353
%355 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%356 = OpLoad %v4float %355
OpStore %349 %356
OpBranch %352
%352 = OpLabel
%356 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%357 = OpLoad %v4float %356
OpStore %350 %357
OpBranch %353
%353 = OpLabel
%358 = OpLoad %v4float %350
OpReturnValue %358
%357 = OpLoad %v4float %349
OpReturnValue %357
OpFunctionEnd

View File

@ -4,7 +4,6 @@ uniform vec4 colorGreen;
uniform vec4 colorRed;
uniform vec4 colorWhite;
vec4 main() {
vec4 result;
float h;
h = colorWhite.x;
false;

View File

@ -15,7 +15,6 @@ struct Outputs {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
float4 result;
float h;
h = _uniforms.colorWhite.x;
false;

View File

@ -5,7 +5,6 @@ OpEntryPoint Fragment %main "main" %sk_Clockwise
OpExecutionMode %main OriginUpperLeft
OpName %sk_Clockwise "sk_Clockwise"
OpName %main "main"
OpName %x "x"
OpDecorate %sk_Clockwise RelaxedPrecision
OpDecorate %sk_Clockwise BuiltIn FrontFacing
%bool = OpTypeBool
@ -13,10 +12,7 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%void = OpTypeVoid
%7 = OpTypeFunction %void
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%main = OpFunction %void None %7
%8 = OpLabel
%x = OpVariable %_ptr_Function_int Function
OpReturn
OpFunctionEnd

View File

@ -1,4 +1,3 @@
void main() {
int x;
}

View File

@ -9,6 +9,5 @@ struct Outputs {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
int x;
return _out;
}

View File

@ -11,8 +11,6 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %result "result"
OpName %x "x"
OpName %y "y"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
@ -26,8 +24,8 @@ OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %26 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %29 RelaxedPrecision
OpDecorate %30 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -45,9 +43,6 @@ OpDecorate %35 RelaxedPrecision
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_float = OpTypePointer Function %float
%float_5 = OpConstant %float 5
%float_10 = OpConstant %float 10
%int_1 = OpConstant %int 1
%_entrypoint = OpFunction %void None %15
%16 = OpLabel
@ -58,16 +53,12 @@ OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%result = OpVariable %_ptr_Function_v4float Function
%x = OpVariable %_ptr_Function_float Function
%y = OpVariable %_ptr_Function_float Function
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%26 = OpLoad %v4float %22
OpStore %result %26
OpStore %x %float_5
OpStore %y %float_10
%32 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%34 = OpLoad %v4float %32
OpStore %result %34
%35 = OpLoad %v4float %result
OpReturnValue %35
%27 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%29 = OpLoad %v4float %27
OpStore %result %29
%30 = OpLoad %v4float %result
OpReturnValue %30
OpFunctionEnd

View File

@ -4,8 +4,6 @@ uniform vec4 colorRed;
uniform vec4 colorGreen;
vec4 main() {
vec4 result = colorRed;
const float x = 5.0;
const float y = 10.0;
{
result = colorGreen;
}

View File

@ -15,8 +15,6 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _unifo
Outputs _out;
(void)_out;
float4 result = _uniforms.colorRed;
const float x = 5.0;
const float y = 10.0;
{
result = _uniforms.colorGreen;
}

View File

@ -17,10 +17,6 @@ OpName %_2_y "_2_y"
OpName %_3_z "_3_z"
OpName %_4_w "_4_w"
OpName %a "a"
OpName %_5_ZERO "_5_ZERO"
OpName %_6_ONE "_6_ONE"
OpName %_7_TWO "_7_TWO"
OpName %_8_THREE "_8_THREE"
OpName %_9_x "_9_x"
OpName %_10_y "_10_y"
OpName %_11_z "_11_z"
@ -55,28 +51,28 @@ OpDecorate %41 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %43 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %52 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %64 RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %75 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %84 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %90 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %109 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -95,21 +91,19 @@ OpDecorate %129 RelaxedPrecision
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_Function_int = OpTypePointer Function %int
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%int_3 = OpConstant %int 3
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%81 = OpConstantComposite %v4float %float_0 %float_1 %float_2 %float_3
%73 = OpConstantComposite %v4float %float_0 %float_1 %float_2 %float_3
%false = OpConstantFalse %bool
%float_n1_25 = OpConstant %float -1.25
%float_0_75 = OpConstant %float 0.75
%float_2_25 = OpConstant %float 2.25
%105 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
%97 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
%v4bool = OpTypeVector %bool 4
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%_entrypoint = OpFunction %void None %15
%16 = OpLabel
%17 = OpFunctionCall %v4float %main
@ -124,10 +118,6 @@ OpFunctionEnd
%_3_z = OpVariable %_ptr_Function_float Function
%_4_w = OpVariable %_ptr_Function_float Function
%a = OpVariable %_ptr_Function_v4float Function
%_5_ZERO = OpVariable %_ptr_Function_int Function
%_6_ONE = OpVariable %_ptr_Function_int Function
%_7_TWO = OpVariable %_ptr_Function_int Function
%_8_THREE = OpVariable %_ptr_Function_int Function
%_9_x = OpVariable %_ptr_Function_float Function
%_10_y = OpVariable %_ptr_Function_float Function
%_11_z = OpVariable %_ptr_Function_float Function
@ -139,7 +129,7 @@ OpFunctionEnd
%_16_z = OpVariable %_ptr_Function_float Function
%_17_w = OpVariable %_ptr_Function_float Function
%c = OpVariable %_ptr_Function_v4float Function
%121 = OpVariable %_ptr_Function_v4float Function
%113 = OpVariable %_ptr_Function_v4float Function
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%26 = OpLoad %v4float %22
OpStore %_0_v %26
@ -161,85 +151,81 @@ OpStore %_4_w %39
%44 = OpLoad %float %_4_w
%45 = OpCompositeConstruct %v4float %41 %42 %43 %44
OpStore %a %45
OpStore %_5_ZERO %int_0
OpStore %_6_ONE %int_1
OpStore %_7_TWO %int_2
OpStore %_8_THREE %int_3
%47 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%48 = OpLoad %v4float %47
%49 = OpCompositeExtract %float %48 0
OpStore %_9_x %49
%51 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%52 = OpLoad %v4float %51
%53 = OpCompositeExtract %float %52 1
OpStore %_10_y %53
%55 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%56 = OpLoad %v4float %55
%57 = OpCompositeExtract %float %56 0
OpStore %_9_x %57
%57 = OpCompositeExtract %float %56 2
OpStore %_11_z %57
%59 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%60 = OpLoad %v4float %59
%61 = OpCompositeExtract %float %60 1
OpStore %_10_y %61
%63 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%64 = OpLoad %v4float %63
%65 = OpCompositeExtract %float %64 2
OpStore %_11_z %65
%67 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%68 = OpLoad %v4float %67
%69 = OpCompositeExtract %float %68 3
OpStore %_12_w %69
%71 = OpLoad %float %_9_x
%72 = OpLoad %float %_10_y
%73 = OpLoad %float %_11_z
%74 = OpLoad %float %_12_w
%75 = OpCompositeConstruct %v4float %71 %72 %73 %74
OpStore %b %75
OpStore %_13_v %81
%83 = OpLoad %v4float %_13_v
%84 = OpCompositeExtract %float %83 0
OpStore %_14_x %84
%86 = OpLoad %v4float %_13_v
%87 = OpCompositeExtract %float %86 1
OpStore %_15_y %87
%89 = OpLoad %v4float %_13_v
%90 = OpCompositeExtract %float %89 2
OpStore %_16_z %90
%92 = OpLoad %v4float %_13_v
%93 = OpCompositeExtract %float %92 3
OpStore %_17_w %93
%95 = OpLoad %float %_14_x
%96 = OpLoad %float %_15_y
%97 = OpLoad %float %_16_z
%98 = OpLoad %float %_17_w
%99 = OpCompositeConstruct %v4float %95 %96 %97 %98
OpStore %c %99
%101 = OpLoad %v4float %a
%106 = OpFOrdEqual %v4bool %101 %105
%108 = OpAll %bool %106
OpSelectionMerge %110 None
OpBranchConditional %108 %109 %110
%109 = OpLabel
%111 = OpLoad %v4float %b
%112 = OpFOrdEqual %v4bool %111 %105
%113 = OpAll %bool %112
OpBranch %110
%110 = OpLabel
%114 = OpPhi %bool %false %19 %113 %109
%61 = OpCompositeExtract %float %60 3
OpStore %_12_w %61
%63 = OpLoad %float %_9_x
%64 = OpLoad %float %_10_y
%65 = OpLoad %float %_11_z
%66 = OpLoad %float %_12_w
%67 = OpCompositeConstruct %v4float %63 %64 %65 %66
OpStore %b %67
OpStore %_13_v %73
%75 = OpLoad %v4float %_13_v
%76 = OpCompositeExtract %float %75 0
OpStore %_14_x %76
%78 = OpLoad %v4float %_13_v
%79 = OpCompositeExtract %float %78 1
OpStore %_15_y %79
%81 = OpLoad %v4float %_13_v
%82 = OpCompositeExtract %float %81 2
OpStore %_16_z %82
%84 = OpLoad %v4float %_13_v
%85 = OpCompositeExtract %float %84 3
OpStore %_17_w %85
%87 = OpLoad %float %_14_x
%88 = OpLoad %float %_15_y
%89 = OpLoad %float %_16_z
%90 = OpLoad %float %_17_w
%91 = OpCompositeConstruct %v4float %87 %88 %89 %90
OpStore %c %91
%93 = OpLoad %v4float %a
%98 = OpFOrdEqual %v4bool %93 %97
%100 = OpAll %bool %98
OpSelectionMerge %102 None
OpBranchConditional %100 %101 %102
%101 = OpLabel
%103 = OpLoad %v4float %b
%104 = OpFOrdEqual %v4bool %103 %97
%105 = OpAll %bool %104
OpBranch %102
%102 = OpLabel
%106 = OpPhi %bool %false %19 %105 %101
OpSelectionMerge %108 None
OpBranchConditional %106 %107 %108
%107 = OpLabel
%109 = OpLoad %v4float %c
%110 = OpFOrdEqual %v4bool %109 %73
%111 = OpAll %bool %110
OpBranch %108
%108 = OpLabel
%112 = OpPhi %bool %false %102 %111 %107
OpSelectionMerge %116 None
OpBranchConditional %114 %115 %116
OpBranchConditional %112 %114 %115
%114 = OpLabel
%117 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%119 = OpLoad %v4float %117
OpStore %113 %119
OpBranch %116
%115 = OpLabel
%117 = OpLoad %v4float %c
%118 = OpFOrdEqual %v4bool %117 %81
%119 = OpAll %bool %118
%120 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%122 = OpLoad %v4float %120
OpStore %113 %122
OpBranch %116
%116 = OpLabel
%120 = OpPhi %bool %false %110 %119 %115
OpSelectionMerge %124 None
OpBranchConditional %120 %122 %123
%122 = OpLabel
%125 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%126 = OpLoad %v4float %125
OpStore %121 %126
OpBranch %124
%123 = OpLabel
%127 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
%128 = OpLoad %v4float %127
OpStore %121 %128
OpBranch %124
%124 = OpLabel
%129 = OpLoad %v4float %121
OpReturnValue %129
%123 = OpLoad %v4float %113
OpReturnValue %123
OpFunctionEnd

View File

@ -10,10 +10,6 @@ vec4 main() {
float _3_z = _0_v.z;
float _4_w = _0_v.w;
vec4 a = vec4(_1_x, _2_y, _3_z, _4_w);
const int _5_ZERO = 0;
const int _6_ONE = 1;
const int _7_TWO = 2;
const int _8_THREE = 3;
float _9_x = testInputs.x;
float _10_y = testInputs.y;
float _11_z = testInputs.z;

View File

@ -21,10 +21,6 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _unifo
float _3_z = _0_v.z;
float _4_w = _0_v.w;
float4 a = float4(_1_x, _2_y, _3_z, _4_w);
const int _5_ZERO = 0;
const int _6_ONE = 1;
const int _7_TWO = 2;
const int _8_THREE = 3;
float _9_x = _uniforms.testInputs.x;
float _10_y = _uniforms.testInputs.y;
float _11_z = _uniforms.testInputs.z;

View File

@ -10,8 +10,6 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
OpMemberName %_UniformBuffer 1 "colorRed"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %TRUE "TRUE"
OpName %FALSE "FALSE"
OpName %ok "ok"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
@ -25,14 +23,14 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %10 Binding 0
OpDecorate %10 DescriptorSet 0
OpDecorate %26 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %39 RelaxedPrecision
OpDecorate %43 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %24 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %37 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %53 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %57 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -63,53 +61,49 @@ OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %18
%19 = OpLabel
%TRUE = OpVariable %_ptr_Function_bool Function
%FALSE = OpVariable %_ptr_Function_bool Function
%ok = OpVariable %_ptr_Function_bool Function
%49 = OpVariable %_ptr_Function_v4float Function
OpStore %TRUE %true
OpStore %FALSE %false
%47 = OpVariable %_ptr_Function_v4float Function
OpStore %ok %true
%26 = OpLoad %bool %ok
OpSelectionMerge %28 None
OpBranchConditional %26 %27 %28
%27 = OpLabel
%29 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%33 = OpLoad %v4float %29
%34 = OpCompositeExtract %float %33 1
%36 = OpFOrdEqual %bool %34 %float_1
%37 = OpSelect %bool %36 %true %false
OpBranch %28
%28 = OpLabel
%38 = OpPhi %bool %false %19 %37 %27
OpStore %ok %38
%39 = OpLoad %bool %ok
OpSelectionMerge %41 None
OpBranchConditional %39 %40 %41
%40 = OpLabel
%42 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%43 = OpLoad %v4float %42
%44 = OpCompositeExtract %float %43 0
%45 = OpFOrdEqual %bool %44 %float_1
%46 = OpSelect %bool %45 %false %true
OpBranch %41
%41 = OpLabel
%47 = OpPhi %bool %false %28 %46 %40
OpStore %ok %47
%48 = OpLoad %bool %ok
OpSelectionMerge %53 None
OpBranchConditional %48 %51 %52
%24 = OpLoad %bool %ok
OpSelectionMerge %26 None
OpBranchConditional %24 %25 %26
%25 = OpLabel
%27 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%31 = OpLoad %v4float %27
%32 = OpCompositeExtract %float %31 1
%34 = OpFOrdEqual %bool %32 %float_1
%35 = OpSelect %bool %34 %true %false
OpBranch %26
%26 = OpLabel
%36 = OpPhi %bool %false %19 %35 %25
OpStore %ok %36
%37 = OpLoad %bool %ok
OpSelectionMerge %39 None
OpBranchConditional %37 %38 %39
%38 = OpLabel
%40 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%41 = OpLoad %v4float %40
%42 = OpCompositeExtract %float %41 0
%43 = OpFOrdEqual %bool %42 %float_1
%44 = OpSelect %bool %43 %false %true
OpBranch %39
%39 = OpLabel
%45 = OpPhi %bool %false %26 %44 %38
OpStore %ok %45
%46 = OpLoad %bool %ok
OpSelectionMerge %51 None
OpBranchConditional %46 %49 %50
%49 = OpLabel
%52 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%53 = OpLoad %v4float %52
OpStore %47 %53
OpBranch %51
%50 = OpLabel
%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%56 = OpLoad %v4float %54
OpStore %47 %56
OpBranch %51
%51 = OpLabel
%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
%55 = OpLoad %v4float %54
OpStore %49 %55
OpBranch %53
%52 = OpLabel
%56 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
%58 = OpLoad %v4float %56
OpStore %49 %58
OpBranch %53
%53 = OpLabel
%59 = OpLoad %v4float %49
OpReturnValue %59
%57 = OpLoad %v4float %47
OpReturnValue %57
OpFunctionEnd

View File

@ -3,8 +3,6 @@ out vec4 sk_FragColor;
uniform vec4 colorGreen;
uniform vec4 colorRed;
vec4 main() {
const bool TRUE = true;
const bool FALSE = false;
bool ok = true;
ok = ok && (colorGreen.y == 1.0 ? true : false);
ok = ok && (colorGreen.x == 1.0 ? false : true);

View File

@ -14,8 +14,6 @@ struct Outputs {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
const bool TRUE = true;
const bool FALSE = false;
bool ok = true;
ok = ok && (_uniforms.colorGreen.y == 1.0 ? true : false);
ok = ok && (_uniforms.colorGreen.x == 1.0 ? false : true);

View File

@ -7,11 +7,9 @@ OpName %sk_FragColor "sk_FragColor"
OpName %sk_Clockwise "sk_Clockwise"
OpName %_entrypoint "_entrypoint"
OpName %main "main"
OpName %a "a"
OpName %b "b"
OpName %c "c"
OpName %d "d"
OpName %e "e"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
@ -28,9 +26,9 @@ OpDecorate %sk_Clockwise BuiltIn FrontFacing
%12 = OpTypeFunction %void
%15 = OpTypeFunction %v4float
%_ptr_Function_float = OpTypePointer Function %float
%float_1 = OpConstant %float 1
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%float_1 = OpConstant %float 1
%float_0 = OpConstant %float 0
%float_5 = OpConstant %float 5
%float_4 = OpConstant %float 4
@ -42,36 +40,31 @@ OpReturn
OpFunctionEnd
%main = OpFunction %v4float None %15
%16 = OpLabel
%a = OpVariable %_ptr_Function_float Function
%b = OpVariable %_ptr_Function_float Function
%c = OpVariable %_ptr_Function_float Function
%d = OpVariable %_ptr_Function_float Function
%e = OpVariable %_ptr_Function_float Function
OpStore %a %float_1
OpStore %b %float_2
OpStore %c %float_3
%25 = OpLoad %float %c
OpStore %d %25
%23 = OpLoad %float %c
OpStore %d %23
%24 = OpLoad %float %b
%26 = OpFAdd %float %24 %float_1
OpStore %b %26
%27 = OpLoad %float %d
OpStore %e %27
%28 = OpLoad %float %b
%29 = OpFAdd %float %28 %float_1
OpStore %b %29
%30 = OpLoad %float %d
%31 = OpFAdd %float %30 %float_1
OpStore %d %31
%32 = OpLoad %float %b
%33 = OpFOrdEqual %bool %32 %float_2
%34 = OpSelect %float %33 %float_1 %float_0
%36 = OpLoad %float %b
%37 = OpFOrdEqual %bool %36 %float_3
%38 = OpSelect %float %37 %float_1 %float_0
%39 = OpLoad %float %d
%41 = OpFOrdEqual %bool %39 %float_5
%42 = OpSelect %float %41 %float_1 %float_0
%43 = OpLoad %float %d
%45 = OpFOrdEqual %bool %43 %float_4
%46 = OpSelect %float %45 %float_1 %float_0
%47 = OpCompositeConstruct %v4float %34 %38 %42 %46
OpReturnValue %47
%28 = OpFAdd %float %27 %float_1
OpStore %d %28
%29 = OpLoad %float %b
%30 = OpFOrdEqual %bool %29 %float_2
%31 = OpSelect %float %30 %float_1 %float_0
%33 = OpLoad %float %b
%34 = OpFOrdEqual %bool %33 %float_3
%35 = OpSelect %float %34 %float_1 %float_0
%36 = OpLoad %float %d
%38 = OpFOrdEqual %bool %36 %float_5
%39 = OpSelect %float %38 %float_1 %float_0
%40 = OpLoad %float %d
%42 = OpFOrdEqual %bool %40 %float_4
%43 = OpSelect %float %42 %float_1 %float_0
%44 = OpCompositeConstruct %v4float %31 %35 %39 %43
OpReturnValue %44
OpFunctionEnd

View File

@ -1,11 +1,9 @@
out vec4 sk_FragColor;
vec4 main() {
float a = 1.0;
float b = 2.0;
float c = 3.0;
float d = c;
float e = d;
b++;
d++;
return vec4(float(b == 2.0), float(b == 3.0), float(d == 5.0), float(d == 4.0));

View File

@ -9,11 +9,9 @@ struct Outputs {
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;
(void)_out;
float a = 1.0;
float b = 2.0;
float c = 3.0;
float d = c;
float e = d;
b++;
d++;
_out.sk_FragColor = float4(float(b == 2.0), float(b == 3.0), float(d == 5.0), float(d == 4.0));