[llvm] 33942d1 - [SCCP] Precommit additional range propagation test.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 23 07:17:42 PDT 2020
Author: Florian Hahn
Date: 2020-03-23T14:15:19Z
New Revision: 33942d18b111922c22d9a977500c6f861f24b87e
URL: https://github.com/llvm/llvm-project/commit/33942d18b111922c22d9a977500c6f861f24b87e
DIFF: https://github.com/llvm/llvm-project/commit/33942d18b111922c22d9a977500c6f861f24b87e.diff
LOG: [SCCP] Precommit additional range propagation test.
Added:
Modified:
llvm/test/Transforms/SCCP/conditions-ranges.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/SCCP/conditions-ranges.ll b/llvm/test/Transforms/SCCP/conditions-ranges.ll
index 4b060d577ca8..345e521d35c7 100644
--- a/llvm/test/Transforms/SCCP/conditions-ranges.ll
+++ b/llvm/test/Transforms/SCCP/conditions-ranges.ll
@@ -437,7 +437,7 @@ define void @f8_nested_conds(i32 %a, i32 %b) {
; CHECK: false.2:
; CHECK-NEXT: [[F_6:%.*]] = icmp eq i32 [[B]], 254
; CHECK-NEXT: call void @use(i1 [[F_6]])
-; CHECK-NEXT: [[F_7:%.*]] = icmp ugt i32 [[B]], 256
+; CHECK-NEXT: [[F_7:%.*]] = icmp ult i32 [[B]], 255
; CHECK-NEXT: call void @use(i1 [[F_7]])
; CHECK-NEXT: [[T_5:%.*]] = icmp ne i32 [[B]], 254
; CHECK-NEXT: call void @use(i1 [[T_5]])
@@ -498,7 +498,7 @@ false.2: ;%b in [255, 0)
; Conditions below are false;
%f.6 = icmp eq i32 %b, 254
call void @use(i1 %f.6)
- %f.7 = icmp ugt i32 %b, 256
+ %f.7 = icmp ult i32 %b, 255
call void @use(i1 %f.7)
; Conditions below are true;
@@ -560,13 +560,17 @@ define void @f9_nested_conds(i32 %a, i32 %b) {
; CHECK-NEXT: call void @use(i1 [[F_5]])
; CHECK-NEXT: [[F_6:%.*]] = icmp ugt i32 [[B]], 21
; CHECK-NEXT: call void @use(i1 [[F_6]])
+; CHECK-NEXT: [[F_7:%.*]] = icmp ne i32 [[B]], 5
+; CHECK-NEXT: call void @use(i1 [[F_7]])
; CHECK-NEXT: [[T_5:%.*]] = icmp ne i32 [[B]], 21
; CHECK-NEXT: call void @use(i1 [[T_5]])
; CHECK-NEXT: [[T_6:%.*]] = icmp ult i32 [[B]], 21
; CHECK-NEXT: call void @use(i1 [[T_6]])
+; CHECK-NEXT: [[T_7:%.*]] = icmp ne i32 [[B]], 5
+; CHECK-NEXT: call void @use(i1 [[T_7]])
; CHECK-NEXT: [[C_6:%.*]] = icmp eq i32 [[B]], 11
; CHECK-NEXT: call void @use(i1 [[C_6]])
-; CHECK-NEXT: [[C_7:%.*]] = icmp ne i32 [[B]], 5
+; CHECK-NEXT: [[C_7:%.*]] = icmp ne i32 [[B]], 15
; CHECK-NEXT: call void @use(i1 [[C_7]])
; CHECK-NEXT: ret void
; CHECK: false:
@@ -620,26 +624,89 @@ true.2: ; %b in [21, 0)
call void @use(i1 %c.5)
ret void
-false.2: ;%b in [0, 21)
+false.2: ;%b in [11, 21)
; Conditions below are false;
%f.5 = icmp eq i32 %b, 21
call void @use(i1 %f.5)
%f.6 = icmp ugt i32 %b, 21
call void @use(i1 %f.6)
+ %f.7 = icmp ne i32 %b, 5
+ call void @use(i1 %f.7)
; Conditions below are true;
%t.5 = icmp ne i32 %b, 21
call void @use(i1 %t.5)
%t.6 = icmp ult i32 %b, 21
call void @use(i1 %t.6)
+ %t.7 = icmp ne i32 %b, 5
+ call void @use(i1 %t.7)
; Conditions below cannot be simplified.
%c.6 = icmp eq i32 %b, 11
call void @use(i1 %c.6)
- %c.7 = icmp ne i32 %b, 5
+ %c.7 = icmp ne i32 %b, 15
call void @use(i1 %c.7)
ret void
false:
ret void
}
+
+
+; Test with with nested conditions where the second conditions is more limiting than the first one.
+define void @f10_cond_does_not_restrict_range(i32 %a, i32 %b) {
+; CHECK-LABEL: @f10_cond_does_not_restrict_range(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[B_255:%.*]] = and i32 [[B:%.*]], 255
+; CHECK-NEXT: br label [[TRUE:%.*]]
+; CHECK: true:
+; CHECK-NEXT: [[F_1:%.*]] = icmp eq i32 [[B_255]], 256
+; CHECK-NEXT: call void @use(i1 [[F_1]])
+; CHECK-NEXT: [[F_2:%.*]] = icmp eq i32 [[B_255]], 300
+; CHECK-NEXT: call void @use(i1 [[F_2]])
+; CHECK-NEXT: [[T_1:%.*]] = icmp ult i32 [[B_255]], 256
+; CHECK-NEXT: call void @use(i1 [[T_1]])
+; CHECK-NEXT: [[T_2:%.*]] = icmp ult i32 [[B_255]], 300
+; CHECK-NEXT: call void @use(i1 [[T_2]])
+; CHECK-NEXT: [[T_3:%.*]] = icmp ne i32 [[B_255]], 256
+; CHECK-NEXT: call void @use(i1 [[T_3]])
+; CHECK-NEXT: [[T_4:%.*]] = icmp ne i32 [[B_255]], 300
+; CHECK-NEXT: call void @use(i1 [[T_4]])
+; CHECK-NEXT: [[C_1:%.*]] = icmp eq i32 [[B_255]], 11
+; CHECK-NEXT: call void @use(i1 [[C_1]])
+; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i32 [[B_255]], 30
+; CHECK-NEXT: call void @use(i1 [[C_2]])
+; CHECK-NEXT: ret void
+;
+entry:
+ %b.255 = and i32 %b, 255
+ %bc.1 = icmp ult i32 %b.255, 300
+ br i1 %bc.1, label %true, label %false
+
+true: ; %b in [0, 256)
+ ; Conditions below are false.
+ %f.1 = icmp eq i32 %b.255, 256
+ call void @use(i1 %f.1)
+ %f.2 = icmp eq i32 %b.255, 300
+ call void @use(i1 %f.2)
+
+ ; Conditions below are true.
+ %t.1 = icmp ult i32 %b.255, 256
+ call void @use(i1 %t.1)
+ %t.2 = icmp ult i32 %b.255, 300
+ call void @use(i1 %t.2)
+ %t.3 = icmp ne i32 %b.255, 256
+ call void @use(i1 %t.3)
+ %t.4 = icmp ne i32 %b.255, 300
+ call void @use(i1 %t.4)
+
+ ; Conditions below cannot be simplified.
+ %c.1 = icmp eq i32 %b.255, 11
+ call void @use(i1 %c.1)
+ %c.2 = icmp ugt i32 %b.255, 30
+ call void @use(i1 %c.2)
+ ret void
+
+false:
+ ret void
+}
More information about the llvm-commits
mailing list