[llvm] 6186928 - [CVP] Add baseline tests of abs(lhs) < abs(rhs) in srem
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 3 06:41:39 PST 2023
Author: luxufan
Date: 2023-01-03T22:40:20+08:00
New Revision: 6186928e60300cb5a345a598ee4194044ac5c4ae
URL: https://github.com/llvm/llvm-project/commit/6186928e60300cb5a345a598ee4194044ac5c4ae
DIFF: https://github.com/llvm/llvm-project/commit/6186928e60300cb5a345a598ee4194044ac5c4ae.diff
LOG: [CVP] Add baseline tests of abs(lhs) < abs(rhs) in srem
Added:
Modified:
llvm/test/Transforms/CorrelatedValuePropagation/srem.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/srem.ll b/llvm/test/Transforms/CorrelatedValuePropagation/srem.ll
index dd2e59671138a..5c2175603c743 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/srem.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/srem.ll
@@ -512,3 +512,178 @@ entry:
%div = srem i64 %x, %y
ret i64 %div
}
+
+define dso_local i8 @abs_x_lt_abs_y_positive(i8 %x, i8 %y) {
+; CHECK-LABEL: @abs_x_lt_abs_y_positive(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[X_CMP:%.*]] = icmp slt i8 [[X:%.*]], 10
+; CHECK-NEXT: [[X_CMP2:%.*]] = icmp sgt i8 [[X]], -10
+; CHECK-NEXT: [[AND_X:%.*]] = and i1 [[X_CMP]], [[X_CMP2]]
+; CHECK-NEXT: [[Y_CMP:%.*]] = icmp sge i8 [[Y:%.*]], 10
+; CHECK-NEXT: [[AND_COND:%.*]] = and i1 [[AND_X]], [[Y_CMP]]
+; CHECK-NEXT: br i1 [[AND_COND]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
+; CHECK: if.else:
+; CHECK-NEXT: [[REM:%.*]] = srem i8 [[X]], [[Y]]
+; CHECK-NEXT: ret i8 [[REM]]
+; CHECK: if.then:
+; CHECK-NEXT: ret i8 0
+;
+entry:
+ %x.cmp = icmp slt i8 %x, 10
+ %x.cmp2 = icmp sgt i8 %x, -10
+ %and.x = and i1 %x.cmp, %x.cmp2
+ %y.cmp = icmp sge i8 %y, 10
+ %and.cond = and i1 %and.x, %y.cmp
+ br i1 %and.cond, label %if.else, label %if.then
+
+if.else: ; preds = %entry
+ %rem = srem i8 %x, %y
+ ret i8 %rem
+
+if.then: ; preds = %entry, %if.then6, %if.end4
+ ret i8 0
+}
+
+define dso_local i8 @abs_x_lt_abs_y_positive_unsigned_cmp(i8 %x, i8 %y) {
+; CHECK-LABEL: @abs_x_lt_abs_y_positive_unsigned_cmp(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[X_CMP:%.*]] = icmp slt i8 [[X:%.*]], 10
+; CHECK-NEXT: [[X_CMP2:%.*]] = icmp sgt i8 [[X]], -10
+; CHECK-NEXT: [[AND_X:%.*]] = and i1 [[X_CMP]], [[X_CMP2]]
+; CHECK-NEXT: [[Y_CMP:%.*]] = icmp uge i8 [[Y:%.*]], 10
+; CHECK-NEXT: [[Y_CMP2:%.*]] = icmp ule i8 [[Y]], 20
+; CHECK-NEXT: [[AND_Y:%.*]] = and i1 [[Y_CMP]], [[Y_CMP2]]
+; CHECK-NEXT: [[AND_COND:%.*]] = and i1 [[AND_X]], [[AND_Y]]
+; CHECK-NEXT: br i1 [[AND_COND]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
+; CHECK: if.else:
+; CHECK-NEXT: [[REM:%.*]] = srem i8 [[X]], [[Y]]
+; CHECK-NEXT: ret i8 [[REM]]
+; CHECK: if.then:
+; CHECK-NEXT: ret i8 0
+;
+entry:
+ %x.cmp = icmp slt i8 %x, 10
+ %x.cmp2 = icmp sgt i8 %x, -10
+ %and.x = and i1 %x.cmp, %x.cmp2
+ %y.cmp = icmp uge i8 %y, 10
+ %y.cmp2 = icmp ule i8 %y, 20
+ %and.y = and i1 %y.cmp, %y.cmp2
+ %and.cond = and i1 %and.x, %and.y
+ br i1 %and.cond, label %if.else, label %if.then
+
+if.else: ; preds = %entry
+ %rem = srem i8 %x, %y
+ ret i8 %rem
+
+if.then: ; preds = %entry, %if.then6, %if.end4
+ ret i8 0
+}
+
+define dso_local i8 @abs_x_lt_abs_y_negative(i8 %x, i8 %y) {
+; CHECK-LABEL: @abs_x_lt_abs_y_negative(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[X_CMP:%.*]] = icmp slt i8 [[X:%.*]], 10
+; CHECK-NEXT: [[X_CMP2:%.*]] = icmp sgt i8 [[X]], -10
+; CHECK-NEXT: [[AND_X:%.*]] = and i1 [[X_CMP]], [[X_CMP2]]
+; CHECK-NEXT: [[Y_CMP:%.*]] = icmp sge i8 [[Y:%.*]], -20
+; CHECK-NEXT: [[Y_CMP2:%.*]] = icmp sle i8 [[Y]], -11
+; CHECK-NEXT: [[AND_Y:%.*]] = and i1 [[Y_CMP]], [[Y_CMP2]]
+; CHECK-NEXT: [[AND_COND:%.*]] = and i1 [[AND_X]], [[AND_Y]]
+; CHECK-NEXT: br i1 [[AND_COND]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
+; CHECK: if.else:
+; CHECK-NEXT: [[REM:%.*]] = srem i8 [[X]], [[Y]]
+; CHECK-NEXT: ret i8 [[REM]]
+; CHECK: if.then:
+; CHECK-NEXT: ret i8 0
+;
+entry:
+ %x.cmp = icmp slt i8 %x, 10
+ %x.cmp2 = icmp sgt i8 %x, -10
+ %and.x = and i1 %x.cmp, %x.cmp2
+ %y.cmp = icmp sge i8 %y, -20
+ %y.cmp2 = icmp sle i8 %y, -11
+ %and.y = and i1 %y.cmp, %y.cmp2
+ %and.cond = and i1 %and.x, %and.y
+ br i1 %and.cond, label %if.else, label %if.then
+
+if.else: ; preds = %entry
+ %rem = srem i8 %x, %y
+ ret i8 %rem
+
+if.then: ; preds = %entry, %if.then6, %if.end4
+ ret i8 0
+}
+
+; Negative test: abs(x) less than or equal abs(y)
+
+define dso_local i8 @abs_x_lte_abs_y(i8 %x, i8 %y) {
+; CHECK-LABEL: @abs_x_lte_abs_y(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[X_CMP:%.*]] = icmp slt i8 [[X:%.*]], 10
+; CHECK-NEXT: [[X_CMP2:%.*]] = icmp sgt i8 [[X]], -10
+; CHECK-NEXT: [[AND_X:%.*]] = and i1 [[X_CMP]], [[X_CMP2]]
+; CHECK-NEXT: [[Y_CMP:%.*]] = icmp sge i8 [[Y:%.*]], -20
+; CHECK-NEXT: [[Y_CMP2:%.*]] = icmp sle i8 [[Y]], -9
+; CHECK-NEXT: [[AND_Y:%.*]] = and i1 [[Y_CMP]], [[Y_CMP2]]
+; CHECK-NEXT: [[AND_COND:%.*]] = and i1 [[AND_X]], [[AND_Y]]
+; CHECK-NEXT: br i1 [[AND_COND]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
+; CHECK: if.else:
+; CHECK-NEXT: [[REM:%.*]] = srem i8 [[X]], [[Y]]
+; CHECK-NEXT: ret i8 [[REM]]
+; CHECK: if.then:
+; CHECK-NEXT: ret i8 0
+;
+entry:
+ %x.cmp = icmp slt i8 %x, 10
+ %x.cmp2 = icmp sgt i8 %x, -10
+ %and.x = and i1 %x.cmp, %x.cmp2
+ %y.cmp = icmp sge i8 %y, -20
+ %y.cmp2 = icmp sle i8 %y, -9
+ %and.y = and i1 %y.cmp, %y.cmp2
+ %and.cond = and i1 %and.x, %and.y
+ br i1 %and.cond, label %if.else, label %if.then
+
+if.else: ; preds = %entry
+ %rem = srem i8 %x, %y
+ ret i8 %rem
+
+if.then: ; preds = %entry, %if.then6, %if.end4
+ ret i8 0
+}
+
+; Negative test: abs(x) has unknown predication with abs(y)
+
+define dso_local i8 @abs_x_unknown_abs_y(i8 %x, i8 %y) {
+; CHECK-LABEL: @abs_x_unknown_abs_y(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[X_CMP:%.*]] = icmp slt i8 [[X:%.*]], 10
+; CHECK-NEXT: [[X_CMP2:%.*]] = icmp sgt i8 [[X]], -10
+; CHECK-NEXT: [[AND_X:%.*]] = and i1 [[X_CMP]], [[X_CMP2]]
+; CHECK-NEXT: [[Y_CMP:%.*]] = icmp sge i8 [[Y:%.*]], -20
+; CHECK-NEXT: [[Y_CMP2:%.*]] = icmp sle i8 [[Y]], -9
+; CHECK-NEXT: [[AND_Y:%.*]] = and i1 [[Y_CMP]], [[Y_CMP2]]
+; CHECK-NEXT: [[AND_COND:%.*]] = and i1 [[AND_X]], [[AND_Y]]
+; CHECK-NEXT: br i1 [[AND_COND]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
+; CHECK: if.else:
+; CHECK-NEXT: [[REM:%.*]] = srem i8 [[X]], [[Y]]
+; CHECK-NEXT: ret i8 [[REM]]
+; CHECK: if.then:
+; CHECK-NEXT: ret i8 0
+;
+entry:
+ %x.cmp = icmp slt i8 %x, 10
+ %x.cmp2 = icmp sgt i8 %x, -10
+ %and.x = and i1 %x.cmp, %x.cmp2
+ %y.cmp = icmp sge i8 %y, -20
+ %y.cmp2 = icmp sle i8 %y, -9
+ %and.y = and i1 %y.cmp, %y.cmp2
+ %and.cond = and i1 %and.x, %and.y
+ br i1 %and.cond, label %if.else, label %if.then
+
+if.else: ; preds = %entry
+ %rem = srem i8 %x, %y
+ ret i8 %rem
+
+if.then: ; preds = %entry, %if.then6, %if.end4
+ ret i8 0
+}
More information about the llvm-commits
mailing list