[CVP] Add additional ctlz tests (NFC)
authorNikita Popov <npopov@redhat.com>
Wed, 15 Feb 2023 10:43:52 +0000 (11:43 +0100)
committerNikita Popov <npopov@redhat.com>
Wed, 15 Feb 2023 10:44:51 +0000 (11:44 +0100)
llvm/test/Transforms/CorrelatedValuePropagation/range.ll

index 26b31ce..4a36445 100644 (file)
@@ -934,8 +934,8 @@ entry:
   ret i1 %res
 }
 
-define i1 @intrinsic_range(i16 %x) {
-; CHECK-LABEL: @intrinsic_range(
+define i1 @ctlz_with_range_metadata(i16 %x) {
+; CHECK-LABEL: @ctlz_with_range_metadata(
 ; CHECK-NEXT:    [[CTLZ:%.*]] = call i16 @llvm.ctlz.i16(i16 [[X:%.*]], i1 false), !range [[RNG5:![0-9]+]]
 ; CHECK-NEXT:    [[TRUNC:%.*]] = trunc i16 [[CTLZ]] to i8
 ; CHECK-NEXT:    ret i1 true
@@ -946,8 +946,8 @@ define i1 @intrinsic_range(i16 %x) {
   ret i1 %res
 }
 
-define i1 @supported_intrinsic_range(i16 %x) {
-; CHECK-LABEL: @supported_intrinsic_range(
+define i1 @abs_with_range_metadata(i16 %x) {
+; CHECK-LABEL: @abs_with_range_metadata(
 ; CHECK-NEXT:    [[ABS:%.*]] = call i16 @llvm.abs.i16(i16 [[X:%.*]], i1 false), !range [[RNG5]]
 ; CHECK-NEXT:    [[TRUNC:%.*]] = trunc i16 [[ABS]] to i8
 ; CHECK-NEXT:    ret i1 true
@@ -958,6 +958,60 @@ define i1 @supported_intrinsic_range(i16 %x) {
   ret i1 %res
 }
 
+define i1 @ctlz_fold(i16 %x) {
+; CHECK-LABEL: @ctlz_fold(
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i16 [[X:%.*]], 256
+; CHECK-NEXT:    br i1 [[CMP]], label [[IF:%.*]], label [[ELSE:%.*]]
+; CHECK:       if:
+; CHECK-NEXT:    [[CTLZ:%.*]] = call i16 @llvm.ctlz.i16(i16 [[X]], i1 false)
+; CHECK-NEXT:    [[RES:%.*]] = icmp uge i16 [[CTLZ]], 8
+; CHECK-NEXT:    ret i1 [[RES]]
+; CHECK:       else:
+; CHECK-NEXT:    [[CTLZ2:%.*]] = call i16 @llvm.ctlz.i16(i16 [[X]], i1 false)
+; CHECK-NEXT:    [[RES2:%.*]] = icmp ult i16 [[CTLZ2]], 8
+; CHECK-NEXT:    ret i1 [[RES2]]
+;
+  %cmp = icmp ult i16 %x, 256
+  br i1 %cmp, label %if, label %else
+
+if:
+  %ctlz = call i16 @llvm.ctlz.i16(i16 %x, i1 false)
+  %res = icmp uge i16 %ctlz, 8
+  ret i1 %res
+
+else:
+  %ctlz2 = call i16 @llvm.ctlz.i16(i16 %x, i1 false)
+  %res2 = icmp ult i16 %ctlz2, 8
+  ret i1 %res2
+}
+
+define i1 @ctlz_nofold(i16 %x) {
+; CHECK-LABEL: @ctlz_nofold(
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i16 [[X:%.*]], 256
+; CHECK-NEXT:    br i1 [[CMP]], label [[IF:%.*]], label [[ELSE:%.*]]
+; CHECK:       if:
+; CHECK-NEXT:    [[CTLZ:%.*]] = call i16 @llvm.ctlz.i16(i16 [[X]], i1 false)
+; CHECK-NEXT:    [[RES:%.*]] = icmp uge i16 [[CTLZ]], 9
+; CHECK-NEXT:    ret i1 [[RES]]
+; CHECK:       else:
+; CHECK-NEXT:    [[CTLZ2:%.*]] = call i16 @llvm.ctlz.i16(i16 [[X]], i1 false)
+; CHECK-NEXT:    [[RES2:%.*]] = icmp ult i16 [[CTLZ2]], 7
+; CHECK-NEXT:    ret i1 [[RES2]]
+;
+  %cmp = icmp ult i16 %x, 256
+  br i1 %cmp, label %if, label %else
+
+if:
+  %ctlz = call i16 @llvm.ctlz.i16(i16 %x, i1 false)
+  %res = icmp uge i16 %ctlz, 9
+  ret i1 %res
+
+else:
+  %ctlz2 = call i16 @llvm.ctlz.i16(i16 %x, i1 false)
+  %res2 = icmp ult i16 %ctlz2, 7
+  ret i1 %res2
+}
+
 declare i16 @llvm.ctlz.i16(i16, i1)
 declare i16 @llvm.abs.i16(i16, i1)
 declare void @llvm.assume(i1)