Bläddra i källkod

Merge pull request #1898 from ghalliday/alwaysalias

Minor reduction in number of aliases created.

Reviewed-By: Renato Golin <rengolin@hpccsystems.com>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 13 år sedan
förälder
incheckning
a9c86b2e6a
1 ändrade filer med 17 tillägg och 2 borttagningar
  1. 17 2
      ecl/hqlcpp/hqlcse.cpp

+ 17 - 2
ecl/hqlcpp/hqlcse.cpp

@@ -1401,6 +1401,21 @@ void TableInvariantTransformer::analyseExpr(IHqlExpression * expr)
 
 #endif
 
+bool TableInvariantTransformer::isAlwaysAlias(IHqlExpression * expr)
+{
+    if (queryBodyExtra(expr)->createAlias)
+        return true;
+    switch (expr->getOperator())
+    {
+    case no_alias:
+    case no_getresult:      // these are commoned up in the code generator, so don't do it twice.
+    case no_getgraphresult:
+    case no_getgraphloopresult:
+        return true;
+    }
+    return false;
+}
+
 bool TableInvariantTransformer::isTrivialAlias(IHqlExpression * expr)
 {
     switch (expr->getOperator())
@@ -1414,7 +1429,7 @@ bool TableInvariantTransformer::isTrivialAlias(IHqlExpression * expr)
             {
                 IHqlExpression * cast = expr->queryChild(0);
                 ITypeInfo * castType = cast->queryType();
-                if (castType->isInteger() && (queryBodyExtra(cast)->createAlias || cast->getOperator() == no_alias))
+                if (castType->isInteger() && isAlwaysAlias(cast))
                 {
                     switch (type->getSize())
                     {
@@ -1428,7 +1443,7 @@ bool TableInvariantTransformer::isTrivialAlias(IHqlExpression * expr)
     case no_not:
         {
             IHqlExpression * child = expr->queryChild(0);
-            if (queryBodyExtra(child)->createAlias || child->getOperator() == no_alias)
+            if (isAlwaysAlias(child))
                 return true;
             break;
         }