[llvm] [InstCombine] Fold comparison of adding two z/sext booleans (PR #67895)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 2 02:25:22 PDT 2023
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff efb46515ce9bfcc1c51d935bfbf1c5680980b275 b0db0ba941e07225d89884a85d76a074b7068fd9 -- llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
index 464ea2175132..fa2871f424c9 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -2899,38 +2899,38 @@ Instruction *InstCombinerImpl::foldICmpSubConstant(ICmpInst &Cmp,
static Value *createLogicFromTable(const std::bitset<4> &Table, Value *Op0,
Value *Op1, IRBuilderBase &Builder) {
switch (Table.to_ulong()) {
- case 0: // 0 0 0 0
- return Builder.getFalse();
- case 1: // 0 0 0 1
- return Builder.CreateNot(Builder.CreateOr(Op0, Op1));
- case 2: // 0 0 1 0
- return Builder.CreateAnd(Builder.CreateNot(Op0), Op1);
- case 3: // 0 0 1 1
- return Op1;
- case 4: // 0 1 0 0
- return Builder.CreateAnd(Op0, Builder.CreateNot(Op1));
- case 5: // 0 1 0 1
- return Op0;
- case 6: // 0 1 1 0
- return Builder.CreateXor(Op0, Op1);
- case 7: // 0 1 1 1
- return Builder.CreateNot(Builder.CreateAnd(Op0, Op1));
- case 8: // 1 0 0 0
- return Builder.CreateAnd(Op0, Op1);
- case 9: // 1 0 0 1
- return Builder.CreateNot(Builder.CreateXor(Op0, Op1));
- case 10: // 1 0 1 0
- return Builder.CreateNot(Op1);
- case 11: // 1 0 1 1
- return Builder.CreateOr(Builder.CreateNot(Op0), Op1);
- case 12: // 1 1 0 0
- return Builder.CreateNot(Op1);
- case 13: // 1 1 0 1
- return Builder.CreateOr(Op0, Builder.CreateNot(Op1));
- case 14: // 1 1 1 0
- return Builder.CreateOr(Op0, Op1);
- case 15: // 1 1 1 1
- return Builder.getTrue();
+ case 0: // 0 0 0 0
+ return Builder.getFalse();
+ case 1: // 0 0 0 1
+ return Builder.CreateNot(Builder.CreateOr(Op0, Op1));
+ case 2: // 0 0 1 0
+ return Builder.CreateAnd(Builder.CreateNot(Op0), Op1);
+ case 3: // 0 0 1 1
+ return Op1;
+ case 4: // 0 1 0 0
+ return Builder.CreateAnd(Op0, Builder.CreateNot(Op1));
+ case 5: // 0 1 0 1
+ return Op0;
+ case 6: // 0 1 1 0
+ return Builder.CreateXor(Op0, Op1);
+ case 7: // 0 1 1 1
+ return Builder.CreateNot(Builder.CreateAnd(Op0, Op1));
+ case 8: // 1 0 0 0
+ return Builder.CreateAnd(Op0, Op1);
+ case 9: // 1 0 0 1
+ return Builder.CreateNot(Builder.CreateXor(Op0, Op1));
+ case 10: // 1 0 1 0
+ return Builder.CreateNot(Op1);
+ case 11: // 1 0 1 1
+ return Builder.CreateOr(Builder.CreateNot(Op0), Op1);
+ case 12: // 1 1 0 0
+ return Builder.CreateNot(Op1);
+ case 13: // 1 1 0 1
+ return Builder.CreateOr(Op0, Builder.CreateNot(Op1));
+ case 14: // 1 1 1 0
+ return Builder.CreateOr(Op0, Op1);
+ case 15: // 1 1 1 1
+ return Builder.getTrue();
}
return nullptr;
}
@@ -2949,9 +2949,8 @@ Instruction *InstCombinerImpl::foldICmpAddConstant(ICmpInst &Cmp,
m_OneUse(m_ZExtOrSExt(m_Value(Op0)))),
m_CombineAnd(m_Instruction(Ext1),
m_OneUse(m_ZExtOrSExt(m_Value(Op1)))))) &&
- Op0->getType()->isIntOrIntVectorTy(1) &&
- Op1->getType()->isIntOrIntVectorTy(1) &&
- C.sge(-2) && C.sle(2)) {
+ Op0->getType()->isIntOrIntVectorTy(1) &&
+ Op1->getType()->isIntOrIntVectorTy(1) && C.sge(-2) && C.sle(2)) {
unsigned BW = C.getBitWidth();
std::bitset<4> Table;
auto ComputeTable = [&](bool Op0Val, bool Op1Val) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/67895
More information about the llvm-commits
mailing list