OSDN Git Service

Reduce lifetime of address temporary.
authorNicolas Capens <capn@google.com>
Thu, 16 Nov 2017 15:38:19 +0000 (10:38 -0500)
committerNicolas Capens <nicolascapens@google.com>
Thu, 16 Nov 2017 22:28:20 +0000 (22:28 +0000)
After traversing the lvalue node tree we're fully done computing the
relative address and emitting any pointer arithmetic that might have
been needed. So the temporary that would have been used for that is no
longer needed.

Change-Id: I0a10bff979128f03544d0f8aa860c29f8867973a
Reviewed-on: https://swiftshader-review.googlesource.com/13948
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
src/OpenGL/compiler/OutputASM.cpp
src/OpenGL/compiler/OutputASM.h

index d3a0184..0d45f81 100644 (file)
@@ -2327,8 +2327,7 @@ namespace glsl
                {
                        Instruction *insert = new Instruction(sw::Shader::OPCODE_INSERT);
 
-                       Temporary address(this);
-                       lvalue(insert->dst, address, dst);
+                       lvalue(insert->dst, dst);
 
                        insert->src[0].type = insert->dst.type;
                        insert->src[0].index = insert->dst.index;
@@ -2342,8 +2341,7 @@ namespace glsl
                {
                        Instruction *mov1 = new Instruction(sw::Shader::OPCODE_MOV);
 
-                       Temporary address(this);
-                       int swizzle = lvalue(mov1->dst, address, dst);
+                       int swizzle = lvalue(mov1->dst, dst);
 
                        source(mov1->src[0], src);
                        mov1->src[0].swizzle = swizzleSwizzle(mov1->src[0].swizzle, swizzle);
@@ -2365,8 +2363,9 @@ namespace glsl
                }
        }
 
-       int OutputASM::lvalue(sw::Shader::DestinationParameter &dst, Temporary &address, TIntermTyped *node)
+       int OutputASM::lvalue(sw::Shader::DestinationParameter &dst, TIntermTyped *node)
        {
+               Temporary address(this);
                TIntermTyped *root = nullptr;
                unsigned int offset = 0;
                unsigned char mask = 0xF;
index 2d04e38..118b8b4 100644 (file)
@@ -274,7 +274,7 @@ namespace glsl
                void destination(sw::Shader::DestinationParameter &parameter, TIntermTyped *argument, int index = 0);
                void copy(TIntermTyped *dst, TIntermNode *src, int offset = 0);
                void assignLvalue(TIntermTyped *dst, TIntermTyped *src);
-               int lvalue(sw::Shader::DestinationParameter &dst, Temporary &address, TIntermTyped *node);
+               int lvalue(sw::Shader::DestinationParameter &dst, TIntermTyped *node);
                int lvalue(TIntermTyped *&root, unsigned int &offset, sw::Shader::Relative &rel, unsigned char &mask, Temporary &address, TIntermTyped *node);
                sw::Shader::ParameterType registerType(TIntermTyped *operand);
                bool hasFlatQualifier(TIntermTyped *operand);