[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