llvm-project/llvm/test/Transforms/CodeGenPrepare/X86
Nikita Popov c10921fa1a [CGP] Also freeze ctlz/cttz operand when despeculating
D125887 changed the ctlz/cttz despeculation transform to insert
a freeze for the introduced branch on zero. While this does fix
the "branch on poison" issue, we may still get in trouble if we
pick a different value for the branch and for the ctz argument
(i.e. non-zero for the branch, but zero for the ctz). To avoid
this, we should use the same frozen value in both positions.

This does cause a regression in RISCV codegen by introducing an
additional sext. The DAG looks like this:

    t0: ch = EntryToken
        t2: i64,ch = CopyFromReg t0, Register:i64 %3
      t4: i64 = AssertSext t2, ValueType:ch:i32
    t23: i64 = freeze t4
          t9: ch = CopyToReg t0, Register:i64 %0, t23
          t16: ch = CopyToReg t0, Register:i64 %4, Constant:i64<32>
        t18: ch = TokenFactor t9, t16
            t25: i64 = sign_extend_inreg t23, ValueType:ch:i32
          t24: i64 = setcc t25, Constant:i64<0>, seteq:ch
        t28: i64 = and t24, Constant:i64<1>
      t19: ch = brcond t18, t28, BasicBlock:ch<cond.end 0x8311f68>
    t21: ch = br t19, BasicBlock:ch<cond.false 0x8311e80>

I don't see a really obvious way to improve this, as we can't push
the freeze past the AssertSext (which may produce poison).

Differential Revision: https://reviews.llvm.org/D126638
2022-06-10 09:46:10 +02:00
..
2008-11-24-RAUW-Self.ll
bitreverse-hang.ll
bitreverse-recognize.ll
catchpad-phi-cast.ll
cgp_shuffle_crash-inseltpoison.ll
cgp_shuffle_crash.ll
computedgoto.ll
cttz-ctlz.ll [CGP] Also freeze ctlz/cttz operand when despeculating 2022-06-10 09:46:10 +02:00
delete-assume-dead-code.ll
ext-logicop.ll
extend-sink-hoist.ll
fcmp-sinking.ll
freeze-brcond.ll
gather-scatter-opt-inseltpoison.ll
gather-scatter-opt.ll
gep-unmerging.ll
invariant.group.ll
lit.local.cfg
memset_chk-simplify-nobuiltin.ll
multi-extension.ll
nonintegral.ll
optimizeSelect-DT.ll
overflow-intrinsics.ll
pr27536.ll
pr35658.ll
promoted-trunc-loc.ll
promoted-zext-debugloc.ll
recursively-delete-dead-instructions.ll
remove-assume-block.ll
section-samplepgo.ll
section.ll
select.ll
sink-addrmode-base.ll
sink-addrmode-inseltpoison.ll
sink-addrmode-select.ll
sink-addrmode-two-phi.ll
sink-addrmode.ll
sink-addrspacecast.ll
split-indirect-loop.ll
split-store-alignment.ll
statepoint-relocate.ll
switch-phi-const.ll Extend switch condition in optimizeSwitchPhiConst when free 2022-05-18 16:23:53 -07:00
tailcall-assume-xbb.ll
vec-shift-inseltpoison.ll
vec-shift.ll
widen_switch.ll Avoid 8 and 16bit switch conditions on x86 2022-05-10 10:00:10 -07:00
widenable-condition.ll
x86-shuffle-sink-inseltpoison.ll
x86-shuffle-sink.ll