1. 08 Mar, 2019 1 commit
  2. 18 Feb, 2019 1 commit
  3. 12 Nov, 2018 1 commit
  4. 25 Oct, 2018 1 commit
  5. 24 Oct, 2018 1 commit
  6. 23 Oct, 2018 2 commits
  7. 11 Oct, 2018 1 commit
  8. 22 Aug, 2018 1 commit
  9. 13 Aug, 2018 1 commit
  10. 05 Jul, 2018 1 commit
  11. 04 Jul, 2018 1 commit
  12. 03 Jul, 2018 1 commit
  13. 20 Jun, 2018 1 commit
  14. 29 Jan, 2018 1 commit
  15. 04 Dec, 2017 1 commit
    • Pierre Langlois's avatar
      [arm64] Generate TBNZ for 32-bit '(x & (1 << N)) == (1 << N)' · 77021584
      Pierre Langlois authored
      Add support for matching '(x & mask) == mask' when mask has a single bit set,
      and translate this into a tbnz instruction. This patch only does this for 32-bit
      operations, we can port it to 64-bit operations as a follow-up if we find
      matches.
      
      This transformation mostly touches the snapshot where we get ~120 hits. This pattern can
      also show up in JavaScript when introduced by the EffectControlLinearizer pass.
      
      Bug: 
      Change-Id: Ib37c6e0bd3831b7c17709357b00ca53735621605
      Reviewed-on: https://chromium-review.googlesource.com/803272Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Commit-Queue: Pierre Langlois <pierre.langlois@arm.com>
      Cr-Commit-Position: refs/heads/master@{#49822}
      77021584
  16. 02 Dec, 2017 1 commit
    • Mathias Bynens's avatar
      Normalize casing of hexadecimal digits · 822be9b2
      Mathias Bynens authored
      This patch normalizes the casing of hexadecimal digits in escape
      sequences of the form `\xNN` and integer literals of the form
      `0xNNNN`.
      
      Previously, the V8 code base used an inconsistent mixture of uppercase
      and lowercase.
      
      Google’s C++ style guide uses uppercase in its examples:
      https://google.github.io/styleguide/cppguide.html#Non-ASCII_Characters
      
      Moreover, uppercase letters more clearly stand out from the lowercase
      `x` (or `u`) characters at the start, as well as lowercase letters
      elsewhere in strings.
      
      BUG=v8:7109
      TBR=marja@chromium.org,titzer@chromium.org,mtrofin@chromium.org,mstarzinger@chromium.org,rossberg@chromium.org,yangguo@chromium.org,mlippautz@chromium.org
      NOPRESUBMIT=true
      
      Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_chromium_rel_ng
      Change-Id: I790e21c25d96ad5d95c8229724eb45d2aa9e22d6
      Reviewed-on: https://chromium-review.googlesource.com/804294
      Commit-Queue: Mathias Bynens <mathias@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#49810}
      822be9b2
  17. 01 Dec, 2017 1 commit
  18. 18 Oct, 2017 1 commit
  19. 15 Mar, 2017 1 commit
  20. 08 Feb, 2017 1 commit
    • ahaas's avatar
      [arm64][turbofan] Fix add+shr for big shift values. · ed6e28d2
      ahaas authored
      Arm64 compiles "x +_64 (y >> shift)" into a single instruction if
      "shift" is a constant. The code generator expects that "shift" is a
      32 bit constant. however, TurboFan can also pass in a 64 bit constant,
      which caused a crash in the code generator.
      
      With this CL we cast the constant of TurboFan to an int in the
      instruction selector and thereby satisfy the assumption of the code
      generator. This should be correct since the code generator anyways cast
      the "shift" to an int5 or int6 eventually.
      
      R=v8-arm-ports@googlegroups.com
      BUG=v8:5923
      
      Review-Url: https://codereview.chromium.org/2669203005
      Cr-Commit-Position: refs/heads/master@{#43036}
      ed6e28d2
  21. 22 Sep, 2016 1 commit
  22. 14 Sep, 2016 1 commit
  23. 07 Sep, 2016 1 commit
  24. 12 Aug, 2016 2 commits
  25. 08 Aug, 2016 1 commit
  26. 05 Aug, 2016 2 commits
  27. 22 Jul, 2016 1 commit
    • bmeurer's avatar
      [turbofan] Change Float64Max/Float64Min to JavaScript semantics. · ba092fb0
      bmeurer authored
      So far we don't have a useful way to inline Math.max or Math.min in
      TurboFan optimized code. This adds new operators NumberMax and NumberMin
      and changes the Float64Max/Float64Min operators to have JavaScript
      semantics instead of the C++ semantics that it had previously.
      
      This also removes support for recognizing the tenary case in the
      CommonOperatorReducer, since that doesn't seem to have any positive
      impact (and actually doesn't show up in regular JavaScript, where
      people use Math.max/Math.min instead).
      
      Drive-by-fix: Also nuke the unused Float32Max/Float32Min operators.
      
      R=jarin@chromium.org
      
      Review-Url: https://codereview.chromium.org/2170343002
      Cr-Commit-Position: refs/heads/master@{#37971}
      ba092fb0
  28. 29 Jun, 2016 1 commit
    • georgia.kouveli's avatar
      [arm64] Generate adds/ands. · 317dc057
      georgia.kouveli authored
      Perform the following transformation:
      
          | Before           | After               |
          |------------------+---------------------|
          | add w2, w0, w1   | adds w2, w0, w1     |
          | cmp w2, #0x0     | b.<cond'> <addr>    |
          | b.<cond> <addr>  |                     |
          |------------------+---------------------|
          | add w2, w0, w1   | adds w2, w0, w1     |
          | cmp #0x0, w2     | b.<cond'> <addr>    |
          | b.<cond> <addr>  |                     |
      
      and the same for and instructions instead of add.  When the result of the
      add/and is not used, generate cmn/tst instead. We need to take care with which
      conditions we can handle and what new condition we map them to.
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/2065243005
      Cr-Commit-Position: refs/heads/master@{#37400}
      317dc057
  29. 23 Jun, 2016 1 commit
  30. 01 Jun, 2016 1 commit
    • pierre.langlois's avatar
      [turbofan] ARM64: Match 64 bit compare with zero and branch · 27bd1747
      pierre.langlois authored
      This patch enables the following transformations in the instruction
      selector:
      
      | Before           | After                  |
      |------------------+------------------------|
      | and x3, x1, #0x1 | tb{,n}z w1, #0, #+0x78 |
      | cmp x3, #0x0     |                        |
      | b.{eq,ne} #+0x80 |                        |
      |------------------+------------------------|
      | cmp x0, #0x0     | cb{,n}z x0, #+0x48     |
      | b.{eq,ne} #+0x4c |                        |
      
      I have not seen these patterns beeing generated by turbofan, however the
      stubs hit these cases frequently. A particular reason is that we are
      turning operations that check for a Smi into a single `tbz`.
      
      As a concequence, the interpreter is affected thanks to inlining
      turbofan stubs into it's bytecode handlers. I have noticed the size of
      the interpreter was reduced by 200 instructions.
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/2022073002
      Cr-Commit-Position: refs/heads/master@{#36632}
      27bd1747
  31. 27 May, 2016 1 commit
  32. 13 May, 2016 1 commit
    • pierre.langlois's avatar
      [turbofan] ARM64: Support shifted indexes in loads and stores · 60fb6ea1
      pierre.langlois authored
      This patch adds support for the `Operand2_R_LSL_I` addressing mode to
      loads and stores. This allows merging a shift instruction into a
      MemoryOperand. Since the shift immediate is restricted to the log2 of
      the operation width, the opportunities to hit this are slim. However,
      Ignition's bytecode handlers hit this case all the time:
      
      kind = BYTECODE_HANDLER
      name = Star
      compiler = turbofan
      Instructions (size = 44)
      0x23e67280     0  add x1, x19, #0x1 (1)
      0x23e67284     4  ldrsb x1, [x20, x1]
      0x23e67288     8  sxtw x1, w1
      0x23e6728c    12  mov x2, fp
      0x23e67290    16  str x0, [x2, x1, lsl #3]
                        ^^^^^^^^^^^^^^^^^^^^^
      0x23e67294    20  add x19, x19, #0x2 (2)
      0x23e67298    24  ldrb w1, [x20, x19]
      0x23e6729c    28  ldr x1, [x21, x1, lsl #3]
                        ^^^^^^^^^^^^^^^^^^^^^
      0x23e672a0    32  br x1
      
      Additionally, I noticed the optimisation occurs once in both the
      `StringPrototypeCharAt` and `StringPrototypeCharCodeAt` turbofan stubs.
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/1972103002
      Cr-Commit-Position: refs/heads/master@{#36227}
      60fb6ea1
  33. 04 May, 2016 2 commits
    • pierre.langlois's avatar
      ARM64: [turbofan] Avoid zero-extension after a 32-bit load · f07d2cdd
      pierre.langlois authored
      A load instruction will implicitely clear the top 32 bits when writing to a W
      register. This patch avoids generating a `mov` instruction to zero-extend the
      result in this case.
      
      For example, this occurs in the generated code for dispatching to the next
      bytecode in the interpreter:
      
        kind = BYTECODE_HANDLER
        name = LdaZero
        compiler = turbofan
        Instructions (size = 36)
        0x32e64c60     0  add x19, x19, #0x1 (1)
        0x32e64c64     4  ldrb w0, [x20, x19]
        0x32e64c68     8  mov w0, w0
                          ^^^^^^^^^^
        0x32e64c6c    12  lsl x0, x0, #3
        0x32e64c70    16  ldr x1, [x21, x0]
        0x32e64c74    20  movz x0, #0x0
        0x32e64c78    24  br x1
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/1950013003
      Cr-Commit-Position: refs/heads/master@{#36038}
      f07d2cdd
    • martyn.capewell's avatar
      [turbofan] ARM64: Use zr to store immediate zero · 0322c20d
      martyn.capewell authored
      When storing an immediate integer or floating point zero, use the zero register
      as the source value. This avoids the need to sometimes allocate a new register.
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/1945783002
      Cr-Commit-Position: refs/heads/master@{#36013}
      0322c20d
  34. 11 Dec, 2015 1 commit
  35. 10 Dec, 2015 1 commit
    • jarin's avatar
      [turbofan] Make MachineType a pair of enums. · bb2a830d
      jarin authored
      MachineType is now a class with two enum fields:
      - MachineRepresentation
      - MachineSemantic
      
      Both enums are usable on their own, and this change switches some places from using MachineType to use just MachineRepresentation. Most notably:
      - register allocator now uses just the representation.
      - Phi and Select nodes only refer to representations.
      
      Review URL: https://codereview.chromium.org/1513543003
      
      Cr-Commit-Position: refs/heads/master@{#32738}
      bb2a830d
  36. 30 Nov, 2015 1 commit