1. 23 Dec, 2016 1 commit
    • ivica.bogosavljevic's avatar
      MIPS: Reland of `Fix bad RegisterConfiguration usage in InstructionSequence unit tests` · c42bbec9
      ivica.bogosavljevic authored
      Reland 0cf56232
      
      The original patch got reverted because testing RegisterConfiguration was
      overwritten by turbofan RegisterConfiguration. This caused some test cases not being
      properly tested. The new patch uses correct RegisterConfiguration.
      
      Original commit message:
      Test InstructionSequenceTest has been initialized with a testing RegisterConfiguration
      instance defined in instruction-sequence-unittest.h, whereas class ExplicitOperand which
      is being tested used RegisterConfiguration from instruction.cc. In case these two
      instances are different, the tests would fail. The issue is fixed by using the same
      instance of RegisterConfiguration both for test code and code under test.
      
      Additionally, the tests in register-allocator-unittest.cc use hardcoded values
      for register and begin failing is the hardcoded register is not available for
      allocation. Fix by forcing the use of allocatable registers only.
      
      TEST=unittests.MoveOptimizerTest.RemovesRedundantExplicit,unittests.RegisterAllocatorTest.SpillPhi
      BUG=
      
      Review-Url: https://codereview.chromium.org/2595293002
      Cr-Commit-Position: refs/heads/master@{#41938}
      c42bbec9
  2. 16 Dec, 2016 1 commit
    • mtrofin's avatar
      Revert of MIPS: Fix bad RegisterConfiguration usage in InstructionSequence... · 8e833623
      mtrofin authored
      Revert of MIPS: Fix bad RegisterConfiguration usage in InstructionSequence unit tests. (patchset #3 id:40001 of https://codereview.chromium.org/2433093002/ )
      
      Reason for revert:
      This change rendered InstructionSequenceTest::SetNumRegs ineffectual, thus
      loosening the tests that were using that API to ensure correct register
      allocation under intentionally constrained setups.
      
      For the problem stated in this CL, a solution needs to continue supporting the
      intentionally set-up test configuration.
      
      Original issue's description:
      > MIPS: Fix bad RegisterConfiguration usage in InstructionSequence unit tests.
      >
      > Test InstructionSequenceTest has been initialized with a testing RegisterConfiguration
      > instance defined in instruction-sequence-unittest.h, whereas class ExplicitOperand which
      > is being tested used RegisterConfiguration from instruction.cc. In case these two
      > instances are different, the tests would fail. The issue is fixed by using the same
      > instance of RegisterConfiguration both for test code and code under test.
      >
      > Additionally, the tests in register-allocator-unittest.cc use hardcoded values
      > for register and begin failing is the hardcoded register is not available for
      > allocation. Fix by forcing the use of allocatable registers only.
      >
      > TEST=unittests.MoveOptimizerTest.RemovesRedundantExplicit,unittests.RegisterAllocatorTest.SpillPhi
      > BUG=
      >
      > Committed: https://crrev.com/0cf56232209d4c9c669b8426680de18806f6c29a
      > Cr-Commit-Position: refs/heads/master@{#40862}
      
      TBR=dcarney@chromium.org,bmeurer@chromium.org,mstarzinger@chromium.org,vogelheim@chromium.org,titzer@chromium.org,ivica.bogosavljevic@imgtec.com
      # Not skipping CQ checks because original CL landed more than 1 days ago.
      BUG=
      
      Review-Url: https://codereview.chromium.org/2587593002
      Cr-Commit-Position: refs/heads/master@{#41777}
      8e833623
  3. 09 Nov, 2016 1 commit
    • ivica.bogosavljevic's avatar
      MIPS: Fix bad RegisterConfiguration usage in InstructionSequence unit tests. · 0cf56232
      ivica.bogosavljevic authored
      Test InstructionSequenceTest has been initialized with a testing RegisterConfiguration
      instance defined in instruction-sequence-unittest.h, whereas class ExplicitOperand which
      is being tested used RegisterConfiguration from instruction.cc. In case these two
      instances are different, the tests would fail. The issue is fixed by using the same
      instance of RegisterConfiguration both for test code and code under test.
      
      Additionally, the tests in register-allocator-unittest.cc use hardcoded values
      for register and begin failing is the hardcoded register is not available for
      allocation. Fix by forcing the use of allocatable registers only.
      
      TEST=unittests.MoveOptimizerTest.RemovesRedundantExplicit,unittests.RegisterAllocatorTest.SpillPhi
      BUG=
      
      Review-Url: https://codereview.chromium.org/2433093002
      Cr-Commit-Position: refs/heads/master@{#40862}
      0cf56232
  4. 26 Oct, 2016 1 commit
    • bbudge's avatar
      [Turbofan] Add concept of FP register aliasing on ARM 32. · 09ab8e6a
      bbudge authored
      - Modifies RegisterConfiguration to specify complex aliasing on ARM 32.
      - Modifies RegisterAllocator to consider aliasing.
      - Modifies ParallelMove::PrepareInsertAfter to handle aliasing.
      - Modifies GapResolver to split wider register moves when interference
      with smaller moves is detected.
      - Modifies MoveOptimizer to handle aliasing.
      - Adds ARM 32 macro-assembler pseudo move instructions to handle cases where
        split moves don't correspond to actual s-registers.
      - Modifies CodeGenerator::AssembleMove and AssembleSwap to handle moves of
        different widths, and moves involving pseudo-s-registers.
      - Adds unit tests for FP operand interference checking and PrepareInsertAfter.
      - Adds more tests of FP for the move optimizer and register allocator.
      
      LOG=N
      BUG=v8:4124
      
      Review-Url: https://codereview.chromium.org/2410673002
      Cr-Commit-Position: refs/heads/master@{#40597}
      09ab8e6a
  5. 10 Oct, 2016 1 commit
  6. 25 Jul, 2016 1 commit
  7. 27 Oct, 2015 1 commit
    • danno's avatar
      [turbofan] Create ExplicitOperands to specify operands without virtual registers · f1aa5562
      danno authored
      Up until now, if one wanted to specify an explicit stack location                                                                                                                                                                                                or register as an operand for an instruction, it had to also be
      explicitly associated with a virtual register as a so-called
      FixedRegister or FixedStackSlot.
      
      For the implementation of tail calls, the plan is to use the gap
      resolver needs to shuffle stack locations from the caller to the
      tail-called callee. In order to do this, it must be possible to
      explicitly address operand locations on the stack that are not
      associated with virtual registers.
      
      This CL introduces ExplictOperands, which can specify a specific
      register or stack location that is not associated with virtual
      register. This will allow tail calls to specify the target
      locations for the necessary stack moves in the gap for the tail
      call without the core register allocation having to know about
      the target of the stack moves at all.
      
      In the process this CL:
      * creates a new Operand kind, ExplicitOperand, with which
        instructions can specify register and stack slots without an
        associated virtual register.
      * creates a LocationOperand class from which AllocatedOperand and
        ExplicitOperand are derived and provides a common interface to
        get Register, DoubleRegister and spill slot information.
      * removes RegisterOperand, DoubleRegisterOperand,
        StackSlotOperand and DoubleStackSlotOperand, they are subsumed
        by LocationOperand.
      * addresses a cleanup TODO in AllocatedOperand to reduce the
        redundancy of AllocatedOperand::Kind by using machine_type() to
        determine if an operand corresponds to a general purpose or
        double register.
      
      BUG=v8:4076
      LOG=n
      
      Review URL: https://codereview.chromium.org/1389373002
      
      Cr-Commit-Position: refs/heads/master@{#31603}
      f1aa5562
  8. 02 Oct, 2015 3 commits
    • danno's avatar
      Re-reland: Remove register index/code indirection · 5cf1c0bc
      danno authored
      Previous to this patch, both the lithium and TurboFan register
      allocators tracked allocated registers by "indices", rather than
      the register codes used elsewhere in the runtime. This patch
      ensures that codes are used everywhere, and in the process cleans
      up a bunch of redundant code and adds more structure to how the
      set of allocatable registers is defined.
      
      Some highlights of changes:
      
      * TurboFan's RegisterConfiguration class moved to V8's top level
        so that it can be shared with Crankshaft.
      * Various "ToAllocationIndex" and related methods removed.
      * Code that can be easily shared between Register classes on
        different platforms is now shared.
      * The list of allocatable registers on each platform is declared
        as a list rather than implicitly via the register index <->
        code mapping.
      
      Committed: https://crrev.com/80bc6f6e11f79524e3f1ad05579583adfd5f18b2
      Cr-Commit-Position: refs/heads/master@{#30913}
      
      Committed: https://crrev.com/7b7a8205d9a00c678fb7a6e032a55fecbc1509cf
      Cr-Commit-Position: refs/heads/master@{#31075}
      
      Review URL: https://codereview.chromium.org/1287383003
      
      Cr-Commit-Position: refs/heads/master@{#31087}
      5cf1c0bc
    • danno's avatar
      Revert of Reland: Remove register index/code indirection (patchset #20... · 00e07b00
      danno authored
      Revert of Reland: Remove register index/code indirection (patchset #20 id:380001 of https://codereview.chromium.org/1287383003/ )
      
      Reason for revert:
      Failures on MIPS
      
      Original issue's description:
      > Remove register index/code indirection
      >
      > Previous to this patch, both the lithium and TurboFan register
      > allocators tracked allocated registers by "indices", rather than
      > the register codes used elsewhere in the runtime. This patch
      > ensures that codes are used everywhere, and in the process cleans
      > up a bunch of redundant code and adds more structure to how the
      > set of allocatable registers is defined.
      >
      > Some highlights of changes:
      >
      > * TurboFan's RegisterConfiguration class moved to V8's top level
      >   so that it can be shared with Crankshaft.
      > * Various "ToAllocationIndex" and related methods removed.
      > * Code that can be easily shared between Register classes on
      >   different platforms is now shared.
      > * The list of allocatable registers on each platform is declared
      >   as a list rather than implicitly via the register index <->
      >   code mapping.
      >
      > Committed: https://crrev.com/80bc6f6e11f79524e3f1ad05579583adfd5f18b2
      > Cr-Commit-Position: refs/heads/master@{#30913}
      >
      > Committed: https://crrev.com/7b7a8205d9a00c678fb7a6e032a55fecbc1509cf
      > Cr-Commit-Position: refs/heads/master@{#31075}
      
      TBR=akos.palfi@imgtec.com,bmeurer@chromium.org,jarin@chromium.org,paul.lind@imgtec.com,titzer@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      
      Review URL: https://codereview.chromium.org/1380863004
      
      Cr-Commit-Position: refs/heads/master@{#31083}
      00e07b00
    • danno's avatar
      Remove register index/code indirection · 7b7a8205
      danno authored
      Previous to this patch, both the lithium and TurboFan register
      allocators tracked allocated registers by "indices", rather than
      the register codes used elsewhere in the runtime. This patch
      ensures that codes are used everywhere, and in the process cleans
      up a bunch of redundant code and adds more structure to how the
      set of allocatable registers is defined.
      
      Some highlights of changes:
      
      * TurboFan's RegisterConfiguration class moved to V8's top level
        so that it can be shared with Crankshaft.
      * Various "ToAllocationIndex" and related methods removed.
      * Code that can be easily shared between Register classes on
        different platforms is now shared.
      * The list of allocatable registers on each platform is declared
        as a list rather than implicitly via the register index <->
        code mapping.
      
      Committed: https://crrev.com/80bc6f6e11f79524e3f1ad05579583adfd5f18b2
      Cr-Commit-Position: refs/heads/master@{#30913}
      
      Review URL: https://codereview.chromium.org/1287383003
      
      Cr-Commit-Position: refs/heads/master@{#31075}
      7b7a8205
  9. 24 Sep, 2015 2 commits
    • danno's avatar
      Revert of Remove register index/code indirection (patchset #17 id:320001 of... · 3ac27431
      danno authored
      Revert of Remove register index/code indirection (patchset #17 id:320001 of https://codereview.chromium.org/1287383003/ )
      
      Reason for revert:
      Failures on greedy RegAlloc, Fuzzer
      
      Original issue's description:
      > Remove register index/code indirection
      >
      > Previous to this patch, both the lithium and TurboFan register
      > allocators tracked allocated registers by "indices", rather than
      > the register codes used elsewhere in the runtime. This patch
      > ensures that codes are used everywhere, and in the process cleans
      > up a bunch of redundant code and adds more structure to how the
      > set of allocatable registers is defined.
      >
      > Some highlights of changes:
      >
      > * TurboFan's RegisterConfiguration class moved to V8's top level
      >   so that it can be shared with Crankshaft.
      > * Various "ToAllocationIndex" and related methods removed.
      > * Code that can be easily shared between Register classes on
      >   different platforms is now shared.
      > * The list of allocatable registers on each platform is declared
      >   as a list rather than implicitly via the register index <->
      >   code mapping.
      >
      > Committed: https://crrev.com/80bc6f6e11f79524e3f1ad05579583adfd5f18b2
      > Cr-Commit-Position: refs/heads/master@{#30913}
      
      TBR=akos.palfi@imgtec.com,bmeurer@chromium.org,jarin@chromium.org,paul.lind@imgtec.com,titzer@chromium.org
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      
      Review URL: https://codereview.chromium.org/1365073002
      
      Cr-Commit-Position: refs/heads/master@{#30914}
      3ac27431
    • danno's avatar
      Remove register index/code indirection · 80bc6f6e
      danno authored
      Previous to this patch, both the lithium and TurboFan register
      allocators tracked allocated registers by "indices", rather than
      the register codes used elsewhere in the runtime. This patch
      ensures that codes are used everywhere, and in the process cleans
      up a bunch of redundant code and adds more structure to how the
      set of allocatable registers is defined.
      
      Some highlights of changes:
      
      * TurboFan's RegisterConfiguration class moved to V8's top level
        so that it can be shared with Crankshaft.
      * Various "ToAllocationIndex" and related methods removed.
      * Code that can be easily shared between Register classes on
        different platforms is now shared.
      * The list of allocatable registers on each platform is declared
        as a list rather than implicitly via the register index <->
        code mapping.
      
      Review URL: https://codereview.chromium.org/1287383003
      
      Cr-Commit-Position: refs/heads/master@{#30913}
      80bc6f6e
  10. 06 Aug, 2015 1 commit
  11. 13 Jul, 2015 1 commit
  12. 25 Feb, 2015 1 commit
  13. 24 Feb, 2015 1 commit
  14. 09 Feb, 2015 1 commit
  15. 04 Feb, 2015 1 commit
  16. 23 Jan, 2015 1 commit
  17. 12 Dec, 2014 1 commit
  18. 27 Nov, 2014 1 commit