11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2- ; RUN: opt < %s -passes="correlated-propagation" -S 2>&1 | FileCheck %s
2+ ; RUN: opt < %s -passes="correlated-propagation" -S 2>&1 | FileCheck %s
3+ ; RUN: opt < %s -passes="correlated-propagation" -lvi-per-pred-ranges -S 2>&1 | FileCheck %s -check-prefix=LVI-PRED-RANGES
34
45@global = external local_unnamed_addr global [4338 x i32 ], align 16
56
@@ -17,7 +18,8 @@ define dso_local noundef zeroext i1 @bar(i64 noundef %arg, ptr noundef writeonly
1718; CHECK-NEXT: [[PHI5:%.*]] = phi i64 [ 3, %[[BB]] ], [ 7, %[[BB2]] ]
1819; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[PHI]], [[ARG]]
1920; CHECK-NEXT: [[LSHR:%.*]] = lshr i64 [[ADD]], [[PHI5]]
20- ; CHECK-NEXT: br i1 true, label %[[BB8:.*]], label %[[BB7:.*]]
21+ ; CHECK-NEXT: [[ICMP6:%.*]] = icmp samesign ult i64 [[LSHR]], 4338
22+ ; CHECK-NEXT: br i1 [[ICMP6]], label %[[BB8:.*]], label %[[BB7:.*]]
2123; CHECK: [[BB7]]:
2224; CHECK-NEXT: tail call void @llvm.ubsantrap(i8 18)
2325; CHECK-NEXT: unreachable
@@ -31,6 +33,33 @@ define dso_local noundef zeroext i1 @bar(i64 noundef %arg, ptr noundef writeonly
3133; CHECK-NEXT: [[PHI10:%.*]] = phi i1 [ true, %[[BB8]] ], [ false, %[[BB2]] ]
3234; CHECK-NEXT: ret i1 [[PHI10]]
3335;
36+ ; LVI-PRED-RANGES-LABEL: define dso_local noundef zeroext i1 @bar(
37+ ; LVI-PRED-RANGES-SAME: i64 noundef [[ARG:%.*]], ptr noundef writeonly captures(none) [[ARG1:%.*]]) local_unnamed_addr {
38+ ; LVI-PRED-RANGES-NEXT: [[BB:.*]]:
39+ ; LVI-PRED-RANGES-NEXT: [[ICMP:%.*]] = icmp ult i64 [[ARG]], 1025
40+ ; LVI-PRED-RANGES-NEXT: br i1 [[ICMP]], label %[[BB4:.*]], label %[[BB2:.*]]
41+ ; LVI-PRED-RANGES: [[BB2]]:
42+ ; LVI-PRED-RANGES-NEXT: [[ICMP3:%.*]] = icmp ult i64 [[ARG]], 262145
43+ ; LVI-PRED-RANGES-NEXT: br i1 [[ICMP3]], label %[[BB4]], label %[[BB9:.*]]
44+ ; LVI-PRED-RANGES: [[BB4]]:
45+ ; LVI-PRED-RANGES-NEXT: [[PHI:%.*]] = phi i64 [ 7, %[[BB]] ], [ 15487, %[[BB2]] ]
46+ ; LVI-PRED-RANGES-NEXT: [[PHI5:%.*]] = phi i64 [ 3, %[[BB]] ], [ 7, %[[BB2]] ]
47+ ; LVI-PRED-RANGES-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[PHI]], [[ARG]]
48+ ; LVI-PRED-RANGES-NEXT: [[LSHR:%.*]] = lshr i64 [[ADD]], [[PHI5]]
49+ ; LVI-PRED-RANGES-NEXT: br i1 true, label %[[BB8:.*]], label %[[BB7:.*]]
50+ ; LVI-PRED-RANGES: [[BB7]]:
51+ ; LVI-PRED-RANGES-NEXT: tail call void @llvm.ubsantrap(i8 18)
52+ ; LVI-PRED-RANGES-NEXT: unreachable
53+ ; LVI-PRED-RANGES: [[BB8]]:
54+ ; LVI-PRED-RANGES-NEXT: [[GETELEMENTPTR:%.*]] = getelementptr inbounds nuw [4338 x i32], ptr @global, i64 0, i64 [[LSHR]]
55+ ; LVI-PRED-RANGES-NEXT: [[LOAD:%.*]] = load i32, ptr [[GETELEMENTPTR]], align 4
56+ ; LVI-PRED-RANGES-NEXT: [[SEXT:%.*]] = sext i32 [[LOAD]] to i64
57+ ; LVI-PRED-RANGES-NEXT: store i64 [[SEXT]], ptr [[ARG1]], align 8
58+ ; LVI-PRED-RANGES-NEXT: br label %[[BB9]]
59+ ; LVI-PRED-RANGES: [[BB9]]:
60+ ; LVI-PRED-RANGES-NEXT: [[PHI10:%.*]] = phi i1 [ true, %[[BB8]] ], [ false, %[[BB2]] ]
61+ ; LVI-PRED-RANGES-NEXT: ret i1 [[PHI10]]
62+ ;
3463bb:
3564 %icmp = icmp ult i64 %arg , 1025
3665 br i1 %icmp , label %bb4 , label %bb2
0 commit comments