Reviewers: William Hesse, fschneider,

Message:
I want to get this change in so we can build off it.  There is clearly some
duplicated code here, I will refactor it later.  I have not looked too  
closely
at the generated code for optimization opportunities.

Description:
Initial implementation of top-level compilation of expressions in test
context.  Test contexts are used for the left subexpressions of
short-circuited boolean operators.  The right subexpressions inherit
their expression context from the binary op expression.

Compilation of short-circuited operations in effect and test context
is straightforward:

effect(e0 || e1) =
  test(e0, L0, L1)
  L1: effect(e1)
  L0:

test(e0 || e1, L0, L1) =
  test(e0, L0, L2)
  L2: test(e1, L0, L1)

Because the value of the first subexpression may be needed as the
value of the whole expression in a value context, we introduce a
hybrid value/test contest (the value is needed if true, but not if
false).

value(e0 || e1) =
  value/test(e0, L0, L1)
  L1: value(e1)
  L0:

The compilation of value/test and test/value (introduced by boolean
AND) is:

value/test(e0 || e1, L0, L1) =
  value/test(e0, L0, L2)
  L2: value/test(e1, L0, L1)

test/value(e0 || e1, L0, L1) =
  test(e0, L0, L2)
  L2: test/value(e1, L0, L1)

Boolean AND is the dual.  The AST nodes themselves (not their parents)
are responsible for producing the proper result (effect, value, or
control flow) depending on their context.


Please review this at http://codereview.chromium.org/339082

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
   M     src/arm/fast-codegen-arm.cc
   M     src/ast.h
   M     src/compiler.cc
   M     src/fast-codegen.h
   M     src/fast-codegen.cc
   M     src/ia32/fast-codegen-ia32.cc
   M     src/x64/fast-codegen-x64.cc



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to