Avoid unnecessary coercions in index expressions.

Short/ushort types are valid as-is and don't need to be coerced to int.

Change-Id: I41d6a537094e0c3f968e47926f541e0f6a3f92b4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/341459
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
This commit is contained in:
John Stiles 2020-12-07 13:27:04 -05:00 committed by Skia Commit-Bot
parent 3c7298922f
commit 10160e4656
3 changed files with 16 additions and 16 deletions

View File

@ -2753,7 +2753,7 @@ std::unique_ptr<Expression> IRGenerator::convertIndex(std::unique_ptr<Expression
if (!converted) {
return nullptr;
}
if (converted->type() != *fContext.fUInt_Type) {
if (!converted->type().isInteger()) {
converted = this->coerce(std::move(converted), *fContext.fInt_Type);
if (!converted) {
return nullptr;

View File

@ -31,33 +31,33 @@ OpDecorate %_arr_float_int_4 ArrayStride 16
%float_4 = OpConstant %float 4
%int_0 = OpConstant %int 0
%_ptr_Function_float = OpTypePointer Function %float
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%uint = OpTypeInt 32 0
%uint_1 = OpConstant %uint 1
%int_2 = OpConstant %int 2
%uint_3 = OpConstant %uint 3
%main = OpFunction %void None %11
%12 = OpLabel
%13 = OpVariable %_ptr_Function__arr_float_int_4 Function
%27 = OpVariable %_ptr_Function__arr_float_int_4 Function
%32 = OpVariable %_ptr_Function__arr_float_int_4 Function
%37 = OpVariable %_ptr_Function__arr_float_int_4 Function
%33 = OpVariable %_ptr_Function__arr_float_int_4 Function
%38 = OpVariable %_ptr_Function__arr_float_int_4 Function
%22 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
OpStore %13 %22
%24 = OpAccessChain %_ptr_Function_float %13 %int_0
%26 = OpLoad %float %24
%28 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
OpStore %27 %28
%30 = OpAccessChain %_ptr_Function_float %27 %int_1
%31 = OpLoad %float %30
%33 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
OpStore %32 %33
%35 = OpAccessChain %_ptr_Function_float %32 %int_2
%36 = OpLoad %float %35
%38 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
OpStore %37 %38
%41 = OpAccessChain %_ptr_Function_float %37 %uint_3
%31 = OpAccessChain %_ptr_Function_float %27 %uint_1
%32 = OpLoad %float %31
%34 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
OpStore %33 %34
%36 = OpAccessChain %_ptr_Function_float %33 %int_2
%37 = OpLoad %float %36
%39 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
OpStore %38 %39
%41 = OpAccessChain %_ptr_Function_float %38 %uint_3
%42 = OpLoad %float %41
%43 = OpCompositeConstruct %v4float %26 %31 %36 %42
%43 = OpCompositeConstruct %v4float %26 %32 %37 %42
OpStore %sk_FragColor %43
OpReturn
OpFunctionEnd

View File

@ -1,5 +1,5 @@
out vec4 sk_FragColor;
void main() {
sk_FragColor = vec4(float[4](1.0, 2.0, 3.0, 4.0)[0], float[4](1.0, 2.0, 3.0, 4.0)[1], float[4](1.0, 2.0, 3.0, 4.0)[2], float[4](1.0, 2.0, 3.0, 4.0)[3u]);
sk_FragColor = vec4(float[4](1.0, 2.0, 3.0, 4.0)[0], float[4](1.0, 2.0, 3.0, 4.0)[1u], float[4](1.0, 2.0, 3.0, 4.0)[2], float[4](1.0, 2.0, 3.0, 4.0)[3u]);
}