Remove rewrite of true ^^ expr
to !expr
.
This optimization doesn't perceptibly improve the generated code; it just replaces a binary expression with an equivalent unary one. Change-Id: Ib6cd2732a22c26978665c57ee00d7b5e5d0a0aee Reviewed-on: https://skia-review.googlesource.com/c/skia/+/352123 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: John Stiles <johnstiles@google.com> Auto-Submit: John Stiles <johnstiles@google.com>
This commit is contained in:
parent
4878b3e33c
commit
b270c7e5e1
@ -1787,13 +1787,10 @@ static std::unique_ptr<Expression> short_circuit_boolean(const Expression& left,
|
||||
return leftVal ? std::make_unique<BoolLiteral>(left.fOffset, /*value=*/true, &left.type())
|
||||
: right.clone();
|
||||
}
|
||||
if (op == Token::Kind::TK_LOGICALXOR) {
|
||||
// (true ^^ expr) -> !(expr) and (false ^^ expr) -> (expr)
|
||||
return leftVal ? std::make_unique<PrefixExpression>(Token::Kind::TK_LOGICALNOT,
|
||||
right.clone())
|
||||
: right.clone();
|
||||
if (op == Token::Kind::TK_LOGICALXOR && !leftVal) {
|
||||
// (false ^^ expr) -> (expr)
|
||||
return right.clone();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -17,12 +17,12 @@ OpDecorate %sk_Clockwise RelaxedPrecision
|
||||
OpDecorate %sk_Clockwise BuiltIn FrontFacing
|
||||
OpDecorate %25 RelaxedPrecision
|
||||
OpDecorate %35 RelaxedPrecision
|
||||
OpDecorate %41 RelaxedPrecision
|
||||
OpDecorate %47 RelaxedPrecision
|
||||
OpDecorate %55 RelaxedPrecision
|
||||
OpDecorate %42 RelaxedPrecision
|
||||
OpDecorate %48 RelaxedPrecision
|
||||
OpDecorate %56 RelaxedPrecision
|
||||
OpDecorate %61 RelaxedPrecision
|
||||
OpDecorate %66 RelaxedPrecision
|
||||
OpDecorate %71 RelaxedPrecision
|
||||
OpDecorate %67 RelaxedPrecision
|
||||
OpDecorate %72 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Input_v4float = OpTypePointer Input %v4float
|
||||
@ -40,6 +40,7 @@ OpDecorate %71 RelaxedPrecision
|
||||
%_ptr_Output_float = OpTypePointer Output %float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%true = OpConstantTrue %bool
|
||||
%float_3 = OpConstant %float 3
|
||||
%float_4 = OpConstant %float 4
|
||||
%float_5 = OpConstant %float 5
|
||||
@ -65,82 +66,82 @@ OpStore %30 %float_1
|
||||
OpBranch %28
|
||||
%27 = OpLabel
|
||||
%35 = OpLoad %bool %expr1
|
||||
%34 = OpLogicalNot %bool %35
|
||||
OpSelectionMerge %38 None
|
||||
OpBranchConditional %34 %36 %37
|
||||
%36 = OpLabel
|
||||
%40 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %40 %float_3
|
||||
OpBranch %38
|
||||
%36 = OpLogicalNotEqual %bool %true %35
|
||||
OpSelectionMerge %39 None
|
||||
OpBranchConditional %36 %37 %38
|
||||
%37 = OpLabel
|
||||
%41 = OpLoad %bool %expr2
|
||||
OpSelectionMerge %44 None
|
||||
OpBranchConditional %41 %42 %43
|
||||
%42 = OpLabel
|
||||
%46 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %46 %float_4
|
||||
OpBranch %44
|
||||
%43 = OpLabel
|
||||
%47 = OpLoad %bool %expr2
|
||||
OpSelectionMerge %50 None
|
||||
OpBranchConditional %47 %48 %49
|
||||
%48 = OpLabel
|
||||
%52 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %52 %float_5
|
||||
OpBranch %50
|
||||
%49 = OpLabel
|
||||
%54 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %54 %float_6
|
||||
OpBranch %50
|
||||
%50 = OpLabel
|
||||
OpBranch %44
|
||||
%44 = OpLabel
|
||||
OpBranch %38
|
||||
%41 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %41 %float_3
|
||||
OpBranch %39
|
||||
%38 = OpLabel
|
||||
%42 = OpLoad %bool %expr2
|
||||
OpSelectionMerge %45 None
|
||||
OpBranchConditional %42 %43 %44
|
||||
%43 = OpLabel
|
||||
%47 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %47 %float_4
|
||||
OpBranch %45
|
||||
%44 = OpLabel
|
||||
%48 = OpLoad %bool %expr2
|
||||
OpSelectionMerge %51 None
|
||||
OpBranchConditional %48 %49 %50
|
||||
%49 = OpLabel
|
||||
%53 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %53 %float_5
|
||||
OpBranch %51
|
||||
%50 = OpLabel
|
||||
%55 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %55 %float_6
|
||||
OpBranch %51
|
||||
%51 = OpLabel
|
||||
OpBranch %45
|
||||
%45 = OpLabel
|
||||
OpBranch %39
|
||||
%39 = OpLabel
|
||||
OpBranch %28
|
||||
%28 = OpLabel
|
||||
%55 = OpLoad %bool %expr1
|
||||
OpSelectionMerge %58 None
|
||||
OpBranchConditional %55 %56 %57
|
||||
%56 = OpLabel
|
||||
%59 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %59 %float_1
|
||||
OpBranch %58
|
||||
%56 = OpLoad %bool %expr1
|
||||
OpSelectionMerge %59 None
|
||||
OpBranchConditional %56 %57 %58
|
||||
%57 = OpLabel
|
||||
%60 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %60 %float_1
|
||||
OpBranch %59
|
||||
%58 = OpLabel
|
||||
%61 = OpLoad %bool %expr1
|
||||
%60 = OpLogicalNot %bool %61
|
||||
OpSelectionMerge %64 None
|
||||
OpBranchConditional %60 %62 %63
|
||||
%62 = OpLabel
|
||||
%65 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %65 %float_3
|
||||
OpBranch %64
|
||||
%62 = OpLogicalNotEqual %bool %61 %true
|
||||
OpSelectionMerge %65 None
|
||||
OpBranchConditional %62 %63 %64
|
||||
%63 = OpLabel
|
||||
%66 = OpLoad %bool %expr2
|
||||
OpSelectionMerge %69 None
|
||||
OpBranchConditional %66 %67 %68
|
||||
%67 = OpLabel
|
||||
%70 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %70 %float_4
|
||||
OpBranch %69
|
||||
%66 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %66 %float_3
|
||||
OpBranch %65
|
||||
%64 = OpLabel
|
||||
%67 = OpLoad %bool %expr2
|
||||
OpSelectionMerge %70 None
|
||||
OpBranchConditional %67 %68 %69
|
||||
%68 = OpLabel
|
||||
%71 = OpLoad %bool %expr2
|
||||
OpSelectionMerge %74 None
|
||||
OpBranchConditional %71 %72 %73
|
||||
%72 = OpLabel
|
||||
%75 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %75 %float_5
|
||||
OpBranch %74
|
||||
%71 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %71 %float_4
|
||||
OpBranch %70
|
||||
%69 = OpLabel
|
||||
%72 = OpLoad %bool %expr2
|
||||
OpSelectionMerge %75 None
|
||||
OpBranchConditional %72 %73 %74
|
||||
%73 = OpLabel
|
||||
%76 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %76 %float_6
|
||||
OpBranch %74
|
||||
OpStore %76 %float_5
|
||||
OpBranch %75
|
||||
%74 = OpLabel
|
||||
OpBranch %69
|
||||
%69 = OpLabel
|
||||
OpBranch %64
|
||||
%64 = OpLabel
|
||||
OpBranch %58
|
||||
%58 = OpLabel
|
||||
%77 = OpAccessChain %_ptr_Output_float %sk_FragColor %int_0
|
||||
OpStore %77 %float_6
|
||||
OpBranch %75
|
||||
%75 = OpLabel
|
||||
OpBranch %70
|
||||
%70 = OpLabel
|
||||
OpBranch %65
|
||||
%65 = OpLabel
|
||||
OpBranch %59
|
||||
%59 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
@ -5,7 +5,7 @@ void main() {
|
||||
bool expr2 = gl_FragCoord.y > 0.0;
|
||||
if (expr1) {
|
||||
sk_FragColor.x = 1.0;
|
||||
} else if (!expr1) {
|
||||
} else if (true ^^ expr1) {
|
||||
sk_FragColor.x = 3.0;
|
||||
} else if (expr2) {
|
||||
sk_FragColor.x = 4.0;
|
||||
@ -16,7 +16,7 @@ void main() {
|
||||
}
|
||||
if (expr1) {
|
||||
sk_FragColor.x = 1.0;
|
||||
} else if (!expr1) {
|
||||
} else if (expr1 ^^ true) {
|
||||
sk_FragColor.x = 3.0;
|
||||
} else if (expr2) {
|
||||
sk_FragColor.x = 4.0;
|
||||
|
@ -13,7 +13,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
bool expr2 = float4(_fragCoord.x, _fragCoord.y, 0.0, _fragCoord.w).y > 0.0;
|
||||
if (expr1) {
|
||||
_out->sk_FragColor.x = 1.0;
|
||||
} else if (!expr1) {
|
||||
} else if (true != expr1) {
|
||||
_out->sk_FragColor.x = 3.0;
|
||||
} else if (expr2) {
|
||||
_out->sk_FragColor.x = 4.0;
|
||||
@ -24,7 +24,7 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
}
|
||||
if (expr1) {
|
||||
_out->sk_FragColor.x = 1.0;
|
||||
} else if (!expr1) {
|
||||
} else if (expr1 != true) {
|
||||
_out->sk_FragColor.x = 3.0;
|
||||
} else if (expr2) {
|
||||
_out->sk_FragColor.x = 4.0;
|
||||
|
Loading…
Reference in New Issue
Block a user