Merge pull request #4041 from erozenfeld/gtTreeHasSideEffectsFix
authorEugene Rozenfeld <erozen@microsoft.com>
Fri, 1 Apr 2016 04:54:58 +0000 (21:54 -0700)
committerEugene Rozenfeld <erozen@microsoft.com>
Fri, 1 Apr 2016 04:54:58 +0000 (21:54 -0700)
Fix exponential explosion in gtTreeHasSideEffects.

src/jit/gentree.cpp

index a0ce79b..bf494e0 100644 (file)
@@ -11265,29 +11265,10 @@ bool                Compiler::gtTreeHasSideEffects(GenTreePtr tree,
             //
             if (tree->gtCall.gtCallType == CT_HELPER)
             {
-                // If this node is a helper call we may not care about the side-effects
-                //
-                if (gtNodeHasSideEffects(tree, flags))
-                    return true;
-                
-                // We can remove this Helper call, but there still could be 
-                // a GTF_CALL side-effect in the arguments that we may need to keep 
-                // 
-                GenTreePtr args;
-                for (args = tree->gtCall.gtCallArgs; args; args = args->gtOp.gtOp2)
-                {
-                    assert(args->IsList());                  
-
-                    if (gtTreeHasSideEffects(args->Current(), flags))
-                        return true;
-                }
-                for (args = tree->gtCall.gtCallLateArgs; args; args = args->gtOp.gtOp2)
-                {
-                    assert(args->IsList());
-                    if (gtTreeHasSideEffects(args->Current(), flags))
-                        return true;
-                }
-                return false;
+                // If this node is a helper call we may not care about the side-effects.
+                // Note that gtNodeHasSideEffects checks the side effects of the helper itself
+                // as well as the side effects of its arguments.
+                return gtNodeHasSideEffects(tree, flags);
             }
         }
         else if (tree->OperGet() == GT_INTRINSIC)