]> granicus.if.org Git - llvm/commitdiff
[CVP] Add tests for urem, sdiv, srem ranges; NFC
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 10 May 2019 19:36:38 +0000 (19:36 +0000)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 10 May 2019 19:36:38 +0000 (19:36 +0000)
We currently don't calcuate result ranges for these binary operators.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@360460 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/CorrelatedValuePropagation/basic.ll

index 9f105ba63a28e05b371f3169b6ebda10a57a4be7..cd9dff6bb2ff045af0a74851797dbeb2e1ed9568 100644 (file)
@@ -927,3 +927,66 @@ entry:
 exit:
   ret i1 %cmp
 }
+
+define i1 @urem_unknown(i32 %a) {
+; CHECK-LABEL: @urem_unknown(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[UREM:%.*]] = urem i32 [[A:%.*]], 30
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[UREM]], 30
+; CHECK-NEXT:    br label [[EXIT:%.*]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+entry:
+  %urem = urem i32 %a, 30
+  %cmp = icmp ult i32 %urem, 30
+  br label %exit
+exit:
+  ret i1 %cmp
+}
+
+define i1 @srem_unknown(i32 %a) {
+; CHECK-LABEL: @srem_unknown(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[SREM:%.*]] = srem i32 [[A:%.*]], 30
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt i32 [[SREM]], 30
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i32 [[SREM]], -30
+; CHECK-NEXT:    br i1 undef, label [[EXIT1:%.*]], label [[EXIT2:%.*]]
+; CHECK:       exit1:
+; CHECK-NEXT:    ret i1 [[CMP1]]
+; CHECK:       exit2:
+; CHECK-NEXT:    ret i1 [[CMP2]]
+;
+entry:
+  %srem = srem i32 %a, 30
+  %cmp1 = icmp slt i32 %srem, 30
+  %cmp2 = icmp sgt i32 %srem, -30
+  br i1 undef, label %exit1, label %exit2
+exit1:
+  ret i1 %cmp1
+exit2:
+  ret i1 %cmp2
+}
+
+define i1 @sdiv_unknown(i32 %a) {
+; CHECK-LABEL: @sdiv_unknown(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[SREM:%.*]] = sdiv i32 [[A:%.*]], 123
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt i32 [[SREM]], 17459217
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp sgt i32 [[SREM]], -17459217
+; CHECK-NEXT:    br i1 undef, label [[EXIT1:%.*]], label [[EXIT2:%.*]]
+; CHECK:       exit1:
+; CHECK-NEXT:    ret i1 [[CMP1]]
+; CHECK:       exit2:
+; CHECK-NEXT:    ret i1 [[CMP2]]
+;
+entry:
+  %srem = sdiv i32 %a, 123
+  %cmp1 = icmp slt i32 %srem, 17459217
+  %cmp2 = icmp sgt i32 %srem, -17459217
+  br i1 undef, label %exit1, label %exit2
+exit1:
+  ret i1 %cmp1
+exit2:
+  ret i1 %cmp2
+}