diff options
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/Transforms/InstCombine/sub.ll | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp index 4cd7cbc4e00..cb76902321a 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp @@ -1563,7 +1563,7 @@ Instruction *InstCombiner::visitSub(BinaryOperator &I) { return Res; } - if (I.getType()->isIntegerTy(1)) + if (I.getType()->getScalarType()->isIntegerTy(1)) return BinaryOperator::CreateXor(Op0, Op1); // Replace (-1 - A) with (~A). diff --git a/llvm/test/Transforms/InstCombine/sub.ll b/llvm/test/Transforms/InstCombine/sub.ll index 03946c7dbe6..6e8ef715582 100644 --- a/llvm/test/Transforms/InstCombine/sub.ll +++ b/llvm/test/Transforms/InstCombine/sub.ll @@ -744,3 +744,12 @@ define i32 @test52(i32 %X) { %res = and i32 %sub, 127 ret i32 %res } + +define <2 x i1> @test53(<2 x i1> %A, <2 x i1> %B) { + %sub = sub <2 x i1> %A, %B + ret <2 x i1> %sub +; CHECK-LABEL: @test53( +; CHECK-NEXT: %sub = xor <2 x i1> %A, %B +; CHECK-NEXT: ret <2 x i1> %sub +} + |

