[llvm] [ValueTracking] Pass changed predicate `SignedLPred` to `isImpliedByMatchingCmp` (PR #124271)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 24 05:49:06 PST 2025
https://github.com/DianQK updated https://github.com/llvm/llvm-project/pull/124271
>From 2e4e389acec28a359179c5f37429c330ad96d6ee Mon Sep 17 00:00:00 2001
From: DianQK <dianqk at dianqk.net>
Date: Fri, 24 Jan 2025 21:28:15 +0800
Subject: [PATCH 1/3] Pre-commit test cases
---
.../implied-condition-samesign.ll | 44 +++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll b/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
index 0e6db403512aee..d641b72891655b 100644
--- a/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
+++ b/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
@@ -292,3 +292,47 @@ taken:
end:
ret i32 0
}
+
+define i1 @gt_sub_nsw_ult(i8 %L0, i8 %L1, i1 %V) {
+; CHECK-LABEL: define i1 @gt_sub_nsw_ult(
+; CHECK-SAME: i8 [[L0:%.*]], i8 [[L1:%.*]], i1 [[V:%.*]]) {
+; CHECK-NEXT: [[LHS:%.*]] = icmp samesign ugt i8 [[L0]], [[L1]]
+; CHECK-NEXT: br i1 [[LHS]], label %[[LHS_TRUE:.*]], label %[[LHS_FALSE:.*]]
+; CHECK: [[LHS_TRUE]]:
+; CHECK-NEXT: ret i1 false
+; CHECK: [[LHS_FALSE]]:
+; CHECK-NEXT: ret i1 [[V]]
+;
+ %LHS = icmp samesign ugt i8 %L0, %L1
+ br i1 %LHS, label %LHS_true, label %LHS_false
+
+LHS_true:
+ %R0 = sub nsw i8 %L0, %L1
+ %RHS = icmp ult i8 %R0, -1
+ ret i1 %RHS
+
+LHS_false:
+ ret i1 %V
+}
+
+define i1 @ul_sub_nsw_ult(i8 %L0, i8 %L1, i1 %V) {
+; CHECK-LABEL: define i1 @ul_sub_nsw_ult(
+; CHECK-SAME: i8 [[L0:%.*]], i8 [[L1:%.*]], i1 [[V:%.*]]) {
+; CHECK-NEXT: [[LHS:%.*]] = icmp samesign ult i8 [[L0]], [[L1]]
+; CHECK-NEXT: br i1 [[LHS]], label %[[LHS_TRUE:.*]], label %[[LHS_FALSE:.*]]
+; CHECK: [[LHS_TRUE]]:
+; CHECK-NEXT: ret i1 true
+; CHECK: [[LHS_FALSE]]:
+; CHECK-NEXT: ret i1 [[V]]
+;
+ %LHS = icmp samesign ult i8 %L0, %L1
+ br i1 %LHS, label %LHS_true, label %LHS_false
+
+LHS_true:
+ %R0 = sub nsw i8 %L0, %L1
+ %RHS = icmp ult i8 %R0, 1
+ ret i1 %RHS
+
+LHS_false:
+ ret i1 %V
+}
>From 3ee8870bb9f999fcc511429bea63007957a52104 Mon Sep 17 00:00:00 2001
From: DianQK <dianqk at dianqk.net>
Date: Fri, 24 Jan 2025 21:29:51 +0800
Subject: [PATCH 2/3] [ValueTracking] Pass changed predicate `SignedLPred` to
`isImpliedByMatchingCmp`
---
llvm/lib/Analysis/ValueTracking.cpp | 4 ++--
.../Analysis/ValueTracking/implied-condition-samesign.ll | 8 ++++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 38f88850be0f18..3ffdf9d8e958ef 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -9494,7 +9494,7 @@ isImpliedCondICmps(const ICmpInst *LHS, CmpPredicate RPred, const Value *R0,
SignedLPred == ICmpInst::ICMP_SGE) &&
match(R0, m_NSWSub(m_Specific(L0), m_Specific(L1)))) {
if (match(R1, m_NonPositive()) &&
- ICmpInst::isImpliedByMatchingCmp(LPred, RPred) == false)
+ ICmpInst::isImpliedByMatchingCmp(SignedLPred, RPred) == false)
return false;
}
@@ -9504,7 +9504,7 @@ isImpliedCondICmps(const ICmpInst *LHS, CmpPredicate RPred, const Value *R0,
SignedLPred == ICmpInst::ICMP_SLE) &&
match(R0, m_NSWSub(m_Specific(L0), m_Specific(L1)))) {
if (match(R1, m_NonNegative()) &&
- ICmpInst::isImpliedByMatchingCmp(LPred, RPred) == true)
+ ICmpInst::isImpliedByMatchingCmp(SignedLPred, RPred) == true)
return true;
}
diff --git a/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll b/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
index d641b72891655b..ae97a401e425d8 100644
--- a/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
+++ b/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
@@ -299,7 +299,9 @@ define i1 @gt_sub_nsw_ult(i8 %L0, i8 %L1, i1 %V) {
; CHECK-NEXT: [[LHS:%.*]] = icmp samesign ugt i8 [[L0]], [[L1]]
; CHECK-NEXT: br i1 [[LHS]], label %[[LHS_TRUE:.*]], label %[[LHS_FALSE:.*]]
; CHECK: [[LHS_TRUE]]:
-; CHECK-NEXT: ret i1 false
+; CHECK-NEXT: [[R0:%.*]] = sub nsw i8 [[L0]], [[L1]]
+; CHECK-NEXT: [[RHS:%.*]] = icmp ult i8 [[R0]], -1
+; CHECK-NEXT: ret i1 [[RHS]]
; CHECK: [[LHS_FALSE]]:
; CHECK-NEXT: ret i1 [[V]]
;
@@ -321,7 +323,9 @@ define i1 @ul_sub_nsw_ult(i8 %L0, i8 %L1, i1 %V) {
; CHECK-NEXT: [[LHS:%.*]] = icmp samesign ult i8 [[L0]], [[L1]]
; CHECK-NEXT: br i1 [[LHS]], label %[[LHS_TRUE:.*]], label %[[LHS_FALSE:.*]]
; CHECK: [[LHS_TRUE]]:
-; CHECK-NEXT: ret i1 true
+; CHECK-NEXT: [[R0:%.*]] = sub nsw i8 [[L0]], [[L1]]
+; CHECK-NEXT: [[RHS:%.*]] = icmp ult i8 [[R0]], 1
+; CHECK-NEXT: ret i1 [[RHS]]
; CHECK: [[LHS_FALSE]]:
; CHECK-NEXT: ret i1 [[V]]
;
>From da19c090706a8aac18c9a40b644ded6035d81ead Mon Sep 17 00:00:00 2001
From: DianQK <dianqk at dianqk.net>
Date: Fri, 24 Jan 2025 21:48:52 +0800
Subject: [PATCH 3/3] typo
---
.../test/Analysis/ValueTracking/implied-condition-samesign.ll | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll b/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
index ae97a401e425d8..9a0591245fae0e 100644
--- a/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
+++ b/llvm/test/Analysis/ValueTracking/implied-condition-samesign.ll
@@ -317,8 +317,8 @@ LHS_false:
ret i1 %V
}
-define i1 @ul_sub_nsw_ult(i8 %L0, i8 %L1, i1 %V) {
-; CHECK-LABEL: define i1 @ul_sub_nsw_ult(
+define i1 @lt_sub_nsw_ult(i8 %L0, i8 %L1, i1 %V) {
+; CHECK-LABEL: define i1 @lt_sub_nsw_ult(
; CHECK-SAME: i8 [[L0:%.*]], i8 [[L1:%.*]], i1 [[V:%.*]]) {
; CHECK-NEXT: [[LHS:%.*]] = icmp samesign ult i8 [[L0]], [[L1]]
; CHECK-NEXT: br i1 [[LHS]], label %[[LHS_TRUE:.*]], label %[[LHS_FALSE:.*]]
More information about the llvm-commits
mailing list