6 Commits

Author SHA1 Message Date
Zhongyunde
f9478f729e [InstSimplify] with logical ops: (X & Y) == -1 ? X : -1 --> -1
Use simplifySelectWithICmpEq to handle the implied equalities from the icmp-and,
then both of ICMP_NE and ICMP_EQ will be addressed including vector type.
    (X & Y) == -1 ?  X : -1 --> -1 (commuted 2 ways)
    (X & Y) != -1 ? -1 :  X --> -1 (commuted 2 ways)
This is a supplement to the icmp-or scenario on D148986.

Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149229
2023-04-26 15:53:02 +08:00
Zhongyunde
0f28cecf1b [tests] precommit tests for D149229
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149230
2023-04-26 15:50:30 +08:00
Zhongyunde
b80f31c48d [InstSimplify] with logical ops: (X | Y) ? 0 : X --> 0
Use simplifySelectWithICmpEq to handle the implied equalities from the icmp-or,
then both of ICMP_NE and ICMP_EQ will be addressed
  (X | Y) == 0 ?  X : 0 --> 0 (commuted 2 ways)
  (X | Y) != 0 ?  0 : X --> 0 (commuted 2 ways)
Fixes https://github.com/llvm/llvm-project/issues/62263

Reviewed By: nikic, RKSimon
Differential Revision: https://reviews.llvm.org/D148986
2023-04-25 21:51:41 +08:00
Zhongyunde
e50b4ea8be [tests] precommit tests for D148986
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149115
2023-04-25 21:43:22 +08:00
Congcong Cai
ee3a260e78 [InstCombine] support fold select(X|Y,X|Y,X) to X|Y
Fixed: https://github.com/llvm/llvm-project/issues/62113
Add addtional check in `visitSelectInst` to:
1. match `select(X|Y==0, X, X|Y)` and replaced with `X|Y`
2. match `select(X&Y==-1, X, X&Y)` and replaced with `X&Y`

alive proof:
https://alive2.llvm.org/ce/z/4qHmv-
https://alive2.llvm.org/ce/z/c2MBGy

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D148275
2023-04-17 22:07:01 +02:00
Congcong Cai
beefca7239 [InstCombine][NFC] Add tests for simplifying select(X|Y,X|Y,X) to X|Y
Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D148562
2023-04-17 22:06:45 +02:00