================ @@ -233,6 +233,52 @@ def CmpIExtUI : CPred<"$0.getValue() == arith::CmpIPredicate::eq || " "$0.getValue() == arith::CmpIPredicate::ne">> $pred)]>; +//===----------------------------------------------------------------------===// +// SelectOp +//===----------------------------------------------------------------------===// + +// select(not(pred), a, b) => select(pred, b, a) +def SelectNotCond : + Pat<(SelectOp (Arith_XOrIOp $pred, (ConstantLikeMatcher APIntAttr:$ones)), $a, $b), + (SelectOp $pred, $b, $a), + [(IsScalarOrSplatNegativeOne $ones)]>; + +// select(pred, select(pred, a, b), c) => select(pred, a, c) +def RedundantSelectTrue : + Pat<(SelectOp $pred, (SelectOp $pred, $a, $b), $c), + (SelectOp $pred, $a, $c)>; + +// select(pred, a, select(pred, b, c)) => select(pred, a, c) +def RedundantSelectFalse : + Pat<(SelectOp $pred, $a, (SelectOp $pred, $b, $c)), + (SelectOp $pred, $a, $c)>; + +// select(predA, select(predB, x, y), y) => select(and(predA, predB), x, y) +def SelectAndCond : + Pat<(SelectOp $predA, (SelectOp $predB, $x, $y), $y), + (SelectOp (Arith_AndIOp $predA, $predB), $x, $y)>; + +// select(predA, select(predB, y, x), y) => select(and(predA, not(predB)), x, y) +def SelectAndNotCond : + Pat<(SelectOp $predA, (SelectOp $predB, $y, $x), $y), + (SelectOp (Arith_AndIOp $predA, + (Arith_XOrIOp $predB, (Arith_ConstantOp ConstantAttr<I1Attr, "1">))), ---------------- hanhanW wrote:
done https://github.com/llvm/llvm-project/pull/68941 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits