99 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -passes="correlated-propagation" -S 2>&1 | FileCheck %s3; RUN: opt < %s -passes="correlated-propagation" -lvi-per-pred-ranges -S 2>&1 | FileCheck %s -check-prefix=LVI-PRED-RANGES4 5@global = external local_unnamed_addr global [4338 x i32], align 166 7define dso_local noundef zeroext i1 @bar(i64 noundef %arg, ptr noundef writeonly captures(none) %arg1) local_unnamed_addr {8; CHECK-LABEL: define dso_local noundef zeroext i1 @bar(9; CHECK-SAME: i64 noundef [[ARG:%.*]], ptr noundef writeonly captures(none) [[ARG1:%.*]]) local_unnamed_addr {10; CHECK-NEXT: [[BB:.*]]:11; CHECK-NEXT: [[ICMP:%.*]] = icmp ult i64 [[ARG]], 102512; CHECK-NEXT: br i1 [[ICMP]], label %[[BB4:.*]], label %[[BB2:.*]]13; CHECK: [[BB2]]:14; CHECK-NEXT: [[ICMP3:%.*]] = icmp ult i64 [[ARG]], 26214515; CHECK-NEXT: br i1 [[ICMP3]], label %[[BB4]], label %[[BB9:.*]]16; CHECK: [[BB4]]:17; CHECK-NEXT: [[PHI:%.*]] = phi i64 [ 7, %[[BB]] ], [ 15487, %[[BB2]] ]18; CHECK-NEXT: [[PHI5:%.*]] = phi i64 [ 3, %[[BB]] ], [ 7, %[[BB2]] ]19; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 [[PHI]], [[ARG]]20; CHECK-NEXT: [[LSHR:%.*]] = lshr i64 [[ADD]], [[PHI5]]21; CHECK-NEXT: [[ICMP6:%.*]] = icmp samesign ult i64 [[LSHR]], 433822; CHECK-NEXT: br i1 [[ICMP6]], label %[[BB8:.*]], label %[[BB7:.*]]23; CHECK: [[BB7]]:24; CHECK-NEXT: tail call void @llvm.ubsantrap(i8 18)25; CHECK-NEXT: unreachable26; CHECK: [[BB8]]:27; CHECK-NEXT: [[GETELEMENTPTR:%.*]] = getelementptr inbounds nuw [4338 x i32], ptr @global, i64 0, i64 [[LSHR]]28; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr [[GETELEMENTPTR]], align 429; CHECK-NEXT: [[SEXT:%.*]] = sext i32 [[LOAD]] to i6430; CHECK-NEXT: store i64 [[SEXT]], ptr [[ARG1]], align 831; CHECK-NEXT: br label %[[BB9]]32; CHECK: [[BB9]]:33; CHECK-NEXT: [[PHI10:%.*]] = phi i1 [ true, %[[BB8]] ], [ false, %[[BB2]] ]34; CHECK-NEXT: ret i1 [[PHI10]]35;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]], 102540; 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]], 26214543; 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: unreachable53; 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 456; LVI-PRED-RANGES-NEXT: [[SEXT:%.*]] = sext i32 [[LOAD]] to i6457; LVI-PRED-RANGES-NEXT: store i64 [[SEXT]], ptr [[ARG1]], align 858; 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;63bb:64 %icmp = icmp ult i64 %arg, 102565 br i1 %icmp, label %bb4, label %bb266 67bb2: ; preds = %bb68 %icmp3 = icmp ult i64 %arg, 26214569 br i1 %icmp3, label %bb4, label %bb970 71bb4: ; preds = %bb2, %bb72 %phi = phi i64 [ 7, %bb ], [ 15487, %bb2 ]73 %phi5 = phi i64 [ 3, %bb ], [ 7, %bb2 ]74 %add = add nuw nsw i64 %phi, %arg75 %lshr = lshr i64 %add, %phi576 %icmp6 = icmp samesign ult i64 %lshr, 433877 br i1 %icmp6, label %bb8, label %bb778 79bb7: ; preds = %bb480 tail call void @llvm.ubsantrap(i8 18)81 unreachable82 83bb8: ; preds = %bb484 %getelementptr = getelementptr inbounds nuw [4338 x i32], ptr @global, i64 0, i64 %lshr85 %load = load i32, ptr %getelementptr, align 486 %sext = sext i32 %load to i6487 store i64 %sext, ptr %arg1, align 888 br label %bb989 90bb9: ; preds = %bb8, %bb291 %phi10 = phi i1 [ true, %bb8 ], [ false, %bb2 ]92 ret i1 %phi1093}94 95; Function Attrs: cold noreturn nounwind96declare void @llvm.ubsantrap(i8 immarg) #097 98attributes #0 = { cold noreturn nounwind }99