Open Bug 1746596 Opened 3 years ago Updated 3 years ago

Ion, x64, windows: Regalloc: redundant move in a simple fixed-register case

Categories

(Core :: JavaScript Engine: JIT, enhancement, P3)

x86_64
Windows
enhancement

Tracking

()

People

(Reporter: jseward, Unassigned)

References

(Blocks 2 open bugs)

Details

Following the landing of bug 1716580, this input

  (module
    (func (export "f")
          (param $p1 i32) (param $p2 i32)
          (param $p3 i32) (param $p4 i32)
          (result i32)
      (select (local.get $p3)
              (local.get $p4)
              (i32.eq (local.get $p1) (local.get $p2)))
      )
  )

on Windows produces the following (omitting prologue/epilogue):

  mov    %r8d, %ebx
  mov    %ebx, %eax
  cmp    %edx, %ecx
  cmovnz %r9d, %eax'

So the first mov is redundant, or at least, the first and second moves could
be merged. Something is fishy with coalescing in Ion's RA, probably. Even
more fishyer is the fact that on Linux, there is no equivalent redundant move.
This was observed with the test case cmpSel32vs64 in
tests/wasm/binop-x64-ion-codegen.js.

Blocks: sm-regalloc
You need to log in before you can comment on or make changes to this bug.