[PATCH] D138700: [InstSimplify] Fold (X || Y) ? false && X --> false

Sanjay Patel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 28 13:16:22 PST 2022


spatel added inline comments.


================
Comment at: llvm/test/Transforms/InstSimplify/select-logical.ll:201
 
 ; (X | Y) ? false && X --> false
 
----------------
Here and below - the usual notation for a select op if we are writing it like C code would be:
(X | Y) ? false : X --> false


================
Comment at: llvm/test/Transforms/InstSimplify/select-logical.ll:212
 
 ; (X | Y) ? false && X --> false
 
----------------
update comment to match test:
 (X | Y) ? false : Y --> false


================
Comment at: llvm/test/Transforms/InstSimplify/select-logical.ll:236
 
 define <2 x i1> @or_select_false_x_vector_poison(<2 x i1> %x, <2 x i1> %y) {
 ; CHECK-LABEL: @or_select_false_x_vector_poison(
----------------
We can transform this, but it must not propagate the poison:
https://alive2.llvm.org/ce/z/MsJicP

So it should be ok to leave the match with m_ZeroInt(), but instead of returning the existing TrueVal, return a "full" false constant:
  ConstantInt::getFalse(Cond->getType())


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

https://reviews.llvm.org/D138700



More information about the llvm-commits mailing list