1. 01 Apr, 2016 4 commits
  2. 31 Mar, 2016 1 commit
    • ahaas's avatar
      [wasm] Fixed float-to-int conversion tests. · ac7f0e2b
      ahaas authored
      *) For all tests the input validation was incorrect, i.e. some values
      were considered invalid although they were valid. The problem was that
      values which are outside int range can get in range through truncation.
      
      *) Removed an assertion in the x64 code generation of
      TruncateFloat64ToUint32 which trapped on negative inputs.
      
      *) Introduced a new TF operator TruncateFloat32ToUint32 which does
      the same as ChangeFloat32ToUint32 but does not trap on negative inputs.
      
      R=titzer@chromium.org
      
      Review URL: https://codereview.chromium.org/1843983002
      
      Cr-Commit-Position: refs/heads/master@{#35176}
      ac7f0e2b
  3. 30 Mar, 2016 2 commits
    • bmeurer's avatar
      [builtins] Make Math.ceil, Math.trunc and Math.round optimizable. · 8d20f2fe
      bmeurer authored
      Migrate Math.ceil, Math.round and Math.trunc to TurboFan code stubs,
      similar to what we did with Math.floor, and make these builtins properly
      optimizable in TurboFan via appropriate simplified operators NumberCeil,
      NumberRound and NumberTrunc, which are intended to be reusable for
      ToInteger and ToLength optimizations that will be done in a followup CL.
      
      Also allows us to kill the funky %RoundNumber runtime function, which
      was quite heavy.
      
      Improve test coverage for Math.ceil and Math.trunc a lot, especially
      making sure that we also properly trigger the TurboFan builtin reducer
      case.
      
      R=jarin@chromium.org
      BUG=v8:4059
      LOG=n
      
      Review URL: https://codereview.chromium.org/1841993002
      
      Cr-Commit-Position: refs/heads/master@{#35135}
      8d20f2fe
    • ahaas's avatar
      [wasm] Int64Lowering of Int64Mul on ia32 and arm. · 40bdbef9
      ahaas authored
      Int64Mul is lowered to a new turbofan operator, Int32MulPair. The new
      operator takes 4 inputs an generates 2 outputs. The inputs are the low
      word of the left input, high word of the left input, the low word of the
      right input, and high word of the right input. The ouputs are the low
      and high word of the result of the multiplication.
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1807273002
      
      Cr-Commit-Position: refs/heads/master@{#35131}
      40bdbef9
  4. 29 Mar, 2016 1 commit
    • bmeurer's avatar
      [turbofan] Introduce NumberFloor simplified operator. · 43216574
      bmeurer authored
      The NumberFloor operator matches exactly the semantics of the Math.floor
      builtin on Numbers. It uses hardware rounding instructions if available,
      but provides a full fallback solution that is compatible with Math.floor.
      The lowering is optimizable based on types if needed later, i.e. we
      already optimize it for the case that the input is already an Integer
      (in the EcmaScript sense, including NaN and -0), but we could add more
      optimizations, like combining NumberFloor and NumberDivide in the
      future, if necessary.
      
      R=jarin@chromium.org
      BUG=v8:2890,v8:4059
      LOG=n
      
      Review URL: https://codereview.chromium.org/1843533003
      
      Cr-Commit-Position: refs/heads/master@{#35090}
      43216574
  5. 21 Mar, 2016 1 commit
    • bmeurer's avatar
      [stubs] Split ToNumberStub into reusable subparts. · b7aa4c3a
      bmeurer authored
      Split ToNumberStub into the entry ToNumberStub, and two new stubs,
      StringToNumberStub and NonNumberToNumberStub, which can be used when we
      already know something about the input (i.e. in various branches of the
      code stubs, or in TurboFan graphs).
      
      Also introduce an appropriate StringToNumber simplified operator for
      TurboFan, that is pure and is lowered to an invocation of the newly
      added StringToNumberStub.
      
      R=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/1818923002
      
      Cr-Commit-Position: refs/heads/master@{#34922}
      b7aa4c3a
  6. 16 Mar, 2016 1 commit
    • ahaas's avatar
      [wasm] Int64Lowering of Int64Sub on ia32 and arm. · 33c08596
      ahaas authored
      Int64Sub is lowered to a new turbofan operator, Int32SubPair. The new
      operator takes 4 inputs an generates 2 outputs. The inputs are the low
      word of the left input, high word of the left input, the low word of the
      right input, and high word of the right input. The ouputs are the low
      and high word of the result of the subtraction.
      
      The implementation is very similar to the implementation of Int64Add.
      
      @v8-arm-ports: please take a careful look at the implementation of sbc
      in the simulator.
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1778893005
      
      Cr-Commit-Position: refs/heads/master@{#34808}
      33c08596
  7. 14 Mar, 2016 1 commit
    • ahaas's avatar
      [wasm] Int64Lowering of Int64Add on ia32 and arm. · 1b230799
      ahaas authored
      Int64Add is lowered to a new turbofan operator, Int32AddPair. The new
      operator takes 4 inputs an generates 2 outputs. The inputs are the low
      word of the left input, high word of the left input, the low word of the
      right input, and high word of the right input. The ouputs are the low
      and high word of the result of the addition.
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1778493004
      
      Cr-Commit-Position: refs/heads/master@{#34747}
      1b230799
  8. 10 Mar, 2016 1 commit
  9. 09 Mar, 2016 1 commit
  10. 07 Mar, 2016 1 commit
    • ahaas's avatar
      [wasm] Int64Lowering of I64Shl on ia32. · ddc626e1
      ahaas authored
      I64Shl is lowered to a new turbofan operator, WasmWord64Shl. The new
      operator takes 3 inputs, the low-word input, the high-word input, and
      the shift, and produces 2 output, the low-word output and the high-word
      output.
      
      At the moment I implemented the lowering only for ia32, but I think the
      CL is already big enough. I will add the other platforms in separate
      CLs.
      
      R=titzer@chromium.org
      
      Review URL: https://codereview.chromium.org/1756863002
      
      Cr-Commit-Position: refs/heads/master@{#34546}
      ddc626e1
  11. 29 Feb, 2016 1 commit
  12. 27 Feb, 2016 1 commit
  13. 26 Feb, 2016 1 commit
  14. 24 Feb, 2016 2 commits
    • bmeurer's avatar
      [turbofan] Introduce DeoptimizeIf And DeoptimizeUnless common operators. · c129aa4d
      bmeurer authored
      These macro operators represent a conditional eager deoptimization exit
      without explicit branching, which greatly reduces overhead of both
      scheduling and register allocation, and thereby greatly reduces overall
      compilation time, esp. when there are a lot of eager deoptimization
      exits.
      
      R=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/1721103003
      
      Cr-Commit-Position: refs/heads/master@{#34239}
      c129aa4d
    • bmeurer's avatar
      [compiler] Drop the CompareNilIC. · 666aec03
      bmeurer authored
      Since both null and undefined are also marked as undetectable now, we
      can just test that bit instead of having the CompareNilIC try to collect
      feedback to speed up the general case (without the undetectable bit
      being used).
      
      Drive-by-fix: Update the type system to match the new handling of
      undetectable in the runtime.
      
      R=danno@chromium.org
      
      Review URL: https://codereview.chromium.org/1722193002
      
      Cr-Commit-Position: refs/heads/master@{#34237}
      666aec03
  15. 16 Feb, 2016 2 commits
  16. 11 Feb, 2016 1 commit
    • bmeurer's avatar
      [compiler] Sanitize entry points to LookupSlot access. · 4ff159bd
      bmeurer authored
      Add dedicated %LoadLookupSlot, %LoadLookupSlotInsideTypeof,
      %LoadLookupSlotForCall, %StoreLookupSlot_Sloppy and
      %StoreLookupSlot_Strict runtime entry points and use them
      appropriately in the various compilers. This way we can
      finally drop the machine operators from the JS graph level
      completely in TurboFan.
      
      Also drop the funky JSLoadDynamic operator from TurboFan,
      which was by now just a small wrapper around the runtime
      call to %LoadLookupSlot.
      
      R=mstarzinger@chromium.org
      
      Review URL: https://codereview.chromium.org/1683103002
      
      Cr-Commit-Position: refs/heads/master@{#33880}
      4ff159bd
  17. 06 Feb, 2016 2 commits
  18. 02 Feb, 2016 2 commits
    • bmeurer's avatar
      [turbofan] Introduce proper ObjectIsReceiver operator. · 6b2001b6
      bmeurer authored
      Avoid the hacking in JSIntrinsicLowering and provide a proper simplified
      operator ObjectIsReceiver instead that is used to implement %_IsJSReceiver
      which is used by our JavaScript builtins and the JSInliner.
      
      R=jarin@chromium.org
      BUG=v8:4544
      LOG=n
      
      Review URL: https://codereview.chromium.org/1657863004
      
      Cr-Commit-Position: refs/heads/master@{#33675}
      6b2001b6
    • jarin's avatar
      Remove the template magic from types.(h|cc), remove types-inl.h. · ef35f11c
      jarin authored
      This CL removes the Config templatization from the types. It is not
      necessary anymore, after the HeapTypes have been removed.
      
      The CL also changes the type hierarchy - the specific type kinds are
      not inner classes of the Type class and they do not inherit from Type.
      This is partly because it seems impossible to make this work without
      templates. Instead, a new TypeBase class is introduced and all the
      structural (i.e., non-bitset) types inherit from it.
      
      The bitset type still requires the bit-munging hack and some nasty
      reinterpret-casts to pretend bitsets are of type Type*. Additionally,
      there is now the same hack for TypeBase - all pointers to the sub-types
      of TypeBase are reinterpret-casted to Type*. This is to keep the type
      constructors in inline method definitions (although it is unclear how
      much that actually buys us).
      
      In future, we would like to move to a model where we encapsulate Type*
      into a class (or possibly use Type where we used to use Type*). This
      would loosen the coupling between bitset size and pointer size, and
      eventually we would be able to have more bits.
      
      TBR=bradnelson@chromium.org
      
      Review URL: https://codereview.chromium.org/1655833002
      
      Cr-Commit-Position: refs/heads/master@{#33656}
      ef35f11c
  19. 29 Jan, 2016 3 commits
    • ahaas's avatar
      [turbofan] Add the StackSlot operator to turbofan. · 64588037
      ahaas authored
      The StackSlot operator allows to allocate a spill slot on the stack. We
      are going to use this operator to pass floats through pointers to c
      functions, which we need for floating point rounding in the case where
      the architecture does not provide rounding instructions.
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com, v8-ppc-ports@googlegroups.com, v8-mips-ports@googlegroups.com
      
      Committed: https://crrev.com/7a693437787090d62d937b862e29521debcc5223
      Cr-Commit-Position: refs/heads/master@{#33600}
      
      Review URL: https://codereview.chromium.org/1645653002
      
      Cr-Commit-Position: refs/heads/master@{#33606}
      64588037
    • ahaas's avatar
      Revert of [turbofan] Add the StackSlot operator to turbofan. (patchset #4... · 11f7c2e6
      ahaas authored
      Revert of [turbofan] Add the StackSlot operator to turbofan. (patchset #4 id:60001 of https://codereview.chromium.org/1645653002/ )
      
      Reason for revert:
      problems on Mac64
      
      Original issue's description:
      > [turbofan] Add the StackSlot operator to turbofan.
      >
      > The StackSlot operator allows to allocate a spill slot on the stack. We
      > are going to use this operator to pass floats through pointers to c
      > functions, which we need for floating point rounding in the case where
      > the architecture does not provide rounding instructions.
      >
      > R=titzer@chromium.org, v8-arm-ports@googlegroups.com, v8-ppc-ports@googlegroups.com, v8-mips-ports@googlegroups.com
      >
      > Committed: https://crrev.com/7a693437787090d62d937b862e29521debcc5223
      > Cr-Commit-Position: refs/heads/master@{#33600}
      
      TBR=titzer@chromium.org,v8-arm-ports@googlegroups.com,v8-mips-ports@googlegroups.com,v8-ppc-ports@googlegroups.com
      # Skipping CQ checks because original CL landed less than 1 days ago.
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      
      Review URL: https://codereview.chromium.org/1644283002
      
      Cr-Commit-Position: refs/heads/master@{#33601}
      11f7c2e6
    • ahaas's avatar
      [turbofan] Add the StackSlot operator to turbofan. · 7a693437
      ahaas authored
      The StackSlot operator allows to allocate a spill slot on the stack. We
      are going to use this operator to pass floats through pointers to c
      functions, which we need for floating point rounding in the case where
      the architecture does not provide rounding instructions.
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com, v8-ppc-ports@googlegroups.com, v8-mips-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1645653002
      
      Cr-Commit-Position: refs/heads/master@{#33600}
      7a693437
  20. 20 Jan, 2016 1 commit
    • sigurds's avatar
      [turbofan] Improve escape analysis. · 4efbeac1
      sigurds authored
      * Treat Select nodes as escaping
      * Correctly void virtual field information
        after a store to a non-const index
      * Add a shortcut if all allocates escape
      * Add a shortcut if no allocates are discovered
      * Only reduce FrameState/StateValues nodes if they
        have virtual allocates as input (transitively)
      * Fix bug in FrameState/StateValues duplication
      * Add check to verifier: First 3 inputs of FrameState
        must be StateValues
      
      R=mstarzinger@chromium.org
      BUG=v8:4586
      LOG=n
      
      Review URL: https://codereview.chromium.org/1583213003
      
      Cr-Commit-Position: refs/heads/master@{#33406}
      4efbeac1
  21. 16 Jan, 2016 2 commits
    • ahaas's avatar
      [turbofan] Add the RoundInt32ToFloat32 operator to turbofan. · e06f7d78
      ahaas authored
      The new operator converts an int32 input to float32. If the input cannot
      be represented exactly in float32, the value is rounded using the
      round-ties-even rounding mode (the default rounding mode).
      
      I provide implementations of the new operator for x64, ia32, arm, arm64,
      mips, mips64, ppc, and ppc64.
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com, v8-mips-ports@googlegroups.com, v8-ppc-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1589363002
      
      Cr-Commit-Position: refs/heads/master@{#33347}
      e06f7d78
    • ahaas's avatar
      [turbofan] Add the TruncateFloat32ToInt32 operator to turbofan. · fc53eed1
      ahaas authored
      The new operator converts a float32 input to int32 through truncation.
      I provide implementations of the new operator for x64, ia32, arm,
      arm64, mips, mips64, and x87. @v8-ppc-ports, can you please take care
      of the ppc implementation?
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com, v8-mips-ports@googlegroups.com, weiliang.lin@intel.com
      
      Review URL: https://codereview.chromium.org/1583323004
      
      Cr-Commit-Position: refs/heads/master@{#33346}
      fc53eed1
  22. 11 Jan, 2016 1 commit
  23. 05 Jan, 2016 1 commit
    • sigurds's avatar
      [turbofan] Deopt support for escape analysis · 3b473d7a
      sigurds authored
      Deopt support is added on two levels. On the IR level,
      a new ObjectState node is added, which represenents an
      object to be materialized. ObjectState nodes appear as
      inputs of FrameState and StateValues nodes. On the
      instruction select/code-generation level, the
      FrameStateDescriptor class handles the nesting
      introduced by ObjectState, and ensures that deopt code
      with CAPTURED_OBJECT/DUPLICATED_OBJECT entries are
      generated similarly to what crankshaft's escape
      analysis does.
      
      Two unittests test correctness of the IR level implementation.
      
      Correctness for instruction selection / code generation
      is tested by mjsunit tests.
      
      R=jarin@chromium.org,mstarzinger@chromium.org
      BUG=v8:4586
      LOG=n
      
      Review URL: https://codereview.chromium.org/1485183002
      
      Cr-Commit-Position: refs/heads/master@{#33115}
      3b473d7a
  24. 24 Dec, 2015 1 commit
  25. 16 Dec, 2015 2 commits
  26. 11 Dec, 2015 1 commit
    • ahaas's avatar
      [turbofan] Change TruncateFloat32ToUint64 to TryTruncateFloat32ToUint64. · 97161a29
      ahaas authored
      TryTruncateFloat32ToUint64 converts a float32 to a uint64. Additionally it
      provides an optional second return value which indicates whether the conversion
      succeeded (i.e. float32 value was within uint64 range) or not.
      
      I implemented the new operator on x64, arm64, and mips64. @v8-ppc-ports, can you
      please take care of the ppc64 implementation of the second output?
      
      Additionally I fixed a bug on x64 and mips64 in the implementation of
      TryTruncateFloat64ToUint64. Cases where the input value was between -1 and 0
      were handled incorrectly.
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com, v8-mips-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1512023002
      
      Cr-Commit-Position: refs/heads/master@{#32796}
      97161a29
  27. 10 Dec, 2015 1 commit
    • ahaas's avatar
      [turbofan] Change TruncateFloat32ToInt64 to TryTruncateFloat32ToInt64. · 28261daa
      ahaas authored
      This operator now provides a second output which indicates whether the
      conversion from float32 to int64 was successful or not. The second output
      returns 0 if the conversion fails, or something else if the conversion succeeds.
      
      The second output can be ignored, which means that the operator can be used the
      same as the original operator.
      
      I implement the new operator on x64, arm64, and mips64. @v8-ppc-ports, can you
      please take care of the ppc64 implementation of the second output?
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com, v8-mips-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1504363002
      
      Cr-Commit-Position: refs/heads/master@{#32737}
      28261daa
  28. 09 Dec, 2015 1 commit
    • ahaas's avatar
      [turbofan] Change TruncateFloat64ToUint64 to TryTruncateFloatToUint64. · c343f309
      ahaas authored
      This operator now provides a second output which indicates whether the conversion from float64 to uint64 was successful or not. The second output returns 0 if the conversion fails, or something else if the conversion succeeds.
      
      The second output can be ignored, which means that the operator can be used the same as the original operator.
      
      I implement the new operator on x64 and arm64. @v8-mips-ports and @v8-ppc-ports, can you please take care of the mips64 and ppc64 implementation of the second output?
      
      R=titzer@chromium.org, v8-arm-ports@googlegroups.com
      
      Review URL: https://codereview.chromium.org/1507703002
      
      Cr-Commit-Position: refs/heads/master@{#32705}
      c343f309