[PATCH] D46031: [DAGCombiner] DON'T unfold scalar masked merge if 'B' is constant

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 26 08:32:26 PDT 2018


lebedev.ri added inline comments.


================
Comment at: test/CodeGen/X86/unfold-masked-merge-scalar-variablemask.ll:658
 ; CHECK-BMI:       # %bb.0:
+; CHECK-BMI-NEXT:    xorl $42, %edi
 ; CHECK-BMI-NEXT:    andl %edx, %edi
----------------
lebedev.ri wrote:
> lebedev.ri wrote:
> > Looked at this in llvm-mca, no clear winner.
> > The change decreases instruction count and IPC, but the cycle count does not change.
> > So i guess it's ok?
> On top of D46073, this `@in_constant_varx_42` pattern (i.e. `%y` being constant) is the only remaining issue.
> ```
> # *** IR Dump After Machine InstCombiner ***:
> # Machine code for function in_constant_varx_42: IsSSA, TracksLiveness
> Function Live Ins: $edi in %0, $edx in %2
> 
> bb.0 (%ir-block.0):
>   liveins: $edi, $edx
>   %2:gr32 = COPY $edx
>   %0:gr32 = COPY $edi
>   %3:gr32 = AND32rr %0:gr32, %2:gr32, implicit-def dead $eflags
>   %4:gr32 = NOT32r %2:gr32
>   %5:gr32 = AND32ri8 %4:gr32, 42, implicit-def dead $eflags
>   %6:gr32 = OR32rr %3:gr32, killed %5:gr32, implicit-def dead $eflags
>   $eax = COPY %6:gr32
>   RET 0, $eax
> 
> # End machine code for function in_constant_varx_42.
> ```
> This *seems* ok (as per mca) on aarch64, but i'm not so sure about x86.
> {F6036317}
Right, in this case not only should i not unfold it, but also de-canonicalize the mask.
{F6037845}


Repository:
  rL LLVM

https://reviews.llvm.org/D46031





More information about the llvm-commits mailing list