[llvm] ada8a17 - [InstCombine] Fold abs intrinsic eq zero
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 5 06:11:53 PDT 2020
Author: Nikita Popov
Date: 2020-09-05T15:11:38+02:00
New Revision: ada8a17d945c17c5603e24824f642ca199412adf
URL: https://github.com/llvm/llvm-project/commit/ada8a17d945c17c5603e24824f642ca199412adf
DIFF: https://github.com/llvm/llvm-project/commit/ada8a17d945c17c5603e24824f642ca199412adf.diff
LOG: [InstCombine] Fold abs intrinsic eq zero
Following the same transform for the select version of abs.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/test/Transforms/InstCombine/icmp.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
index 8860586c9aa1..350d00095c6f 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -3088,6 +3088,13 @@ Instruction *InstCombinerImpl::foldICmpEqIntrinsicWithConstant(
Type *Ty = II->getType();
unsigned BitWidth = C.getBitWidth();
switch (II->getIntrinsicID()) {
+ case Intrinsic::abs:
+ // abs(A) == 0 -> A == 0
+ if (C.isNullValue())
+ return new ICmpInst(Cmp.getPredicate(), II->getArgOperand(0),
+ Constant::getNullValue(Ty));
+ break;
+
case Intrinsic::bswap:
// bswap(A) == C -> A == bswap(C)
return new ICmpInst(Cmp.getPredicate(), II->getArgOperand(0),
diff --git a/llvm/test/Transforms/InstCombine/icmp.ll b/llvm/test/Transforms/InstCombine/icmp.ll
index b284c5a2c840..a9bda13e15b9 100644
--- a/llvm/test/Transforms/InstCombine/icmp.ll
+++ b/llvm/test/Transforms/InstCombine/icmp.ll
@@ -1094,8 +1094,7 @@ define zeroext i1 @cmpabs2(i64 %val) {
define i1 @abs_intrin_eq_zero(i8 %x) {
; CHECK-LABEL: @abs_intrin_eq_zero(
-; CHECK-NEXT: [[ABS:%.*]] = call i8 @llvm.abs.i8(i8 [[X:%.*]], i1 false)
-; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[ABS]], 0
+; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X:%.*]], 0
; CHECK-NEXT: ret i1 [[CMP]]
;
%abs = call i8 @llvm.abs.i8(i8 %x, i1 false)
@@ -1105,8 +1104,7 @@ define i1 @abs_intrin_eq_zero(i8 %x) {
define i1 @abs_intrin_ne_zero(i8 %x) {
; CHECK-LABEL: @abs_intrin_ne_zero(
-; CHECK-NEXT: [[ABS:%.*]] = call i8 @llvm.abs.i8(i8 [[X:%.*]], i1 false)
-; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[ABS]], 0
+; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[X:%.*]], 0
; CHECK-NEXT: ret i1 [[CMP]]
;
%abs = call i8 @llvm.abs.i8(i8 %x, i1 false)
More information about the llvm-commits
mailing list