[PATCH] D138899: [DAGCombiner] handle more store value forwarding

ChenZheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 13 23:00:39 PST 2023


shchenz added a comment.

To me, this patch is innocent for the failure https://bugs.chromium.org/p/chromium/issues/detail?id=1412740. The patch exposes an issue in the pre-ra machine scheduler on X86 target.

Before the  machine scheduler:

  176B      %12:gr32 = LEA32r %fixed-stack.0, 1, $noreg, 0, $noreg
  192B      %6:gr32 = MOV32rm %12:gr32, 1, $noreg, 0, $noreg :: (dereferenceable load (s32) from %ir.4, align 16)     // the content will be stored to 16($esp) is loaded before the filing 0 MOVUPSmr
  208B      MOVUPSmr %18:gr32, 1, $noreg, 0, $noreg, %3:vr128 :: (store (s128) into %ir.1, align 4)
  320B      MOV32mr $esp, 1, $noreg, 16, $noreg, %6:gr32 :: (store (s32))

After the machine scheduler:

  264B      %12:gr32 = LEA32r %fixed-stack.0, 1, $noreg, 0, $noreg
  272B      MOVUPSmr %18:gr32, 1, $noreg, 0, $noreg, %3:vr128 :: (store (s128) into %ir.1, align 4)
  280B      %6:gr32 = MOV32rm %12:gr32, 1, $noreg, 0, $noreg :: (dereferenceable load (s32) from %ir.4, align 16)      // now the content is loaded after the filling 0 MOVUPSmr
  320B      MOV32mr $esp, 1, $noreg, 16, $noreg, %6:gr32 :: (store (s32))

Seems like scheduler does not know `%6:gr32 = MOV32rm` and `MOVUPSmr` are aliased.

@aeubanks Thanks for the quick action. Could you please help to verify if llc option `-enable-misched=false` can solve your issue? I am not very familiar with X86 target, do you have any suggestions about how to fix this X86 scheduling issue? Thank you!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138899/new/

https://reviews.llvm.org/D138899



More information about the llvm-commits mailing list