70 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -passes=newgvn %s -S | FileCheck %s3 4declare void @use(i32)5 6; Make sure !tbaa metadata is preserved when only ssa_copy calls introduced by7; PredicateInfo are replaced.8 9define i32 @test(ptr %p1, ptr %p2, i1 %c) {10; CHECK-LABEL: define i32 @test(11; CHECK-SAME: ptr [[P1:%.*]], ptr [[P2:%.*]], i1 [[C:%.*]]) {12; CHECK-NEXT: [[ENTRY:.*:]]13; CHECK-NEXT: [[LV:%.*]] = load i32, ptr [[P1]], align 8, !tbaa [[INT_TBAA0:![0-9]+]]14; CHECK-NEXT: [[CMP_1:%.*]] = icmp slt i32 [[LV]], 115; CHECK-NEXT: br i1 [[CMP_1]], label %[[EXIT:.*]], label %[[IF_FALSE:.*]]16; CHECK: [[IF_FALSE]]:17; CHECK-NEXT: br i1 [[C]], label %[[EXIT]], label %[[FOR_CHECK:.*]]18; CHECK: [[FOR_CHECK]]:19; CHECK-NEXT: [[CMP_2:%.*]] = icmp sgt i32 [[LV]], 020; CHECK-NEXT: br i1 [[CMP_2]], label %[[FOR_PH:.*]], label %[[EXIT]]21; CHECK: [[FOR_PH]]:22; CHECK-NEXT: br label %[[FOR_BODY:.*]]23; CHECK: [[FOR_BODY]]:24; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, %[[FOR_PH]] ], [ [[IV_NEXT:%.*]], %[[FOR_BODY]] ]25; CHECK-NEXT: call void @use(i32 [[IV]])26; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 127; CHECK-NEXT: [[CMP_3:%.*]] = icmp ne i32 [[IV_NEXT]], [[LV]]28; CHECK-NEXT: br i1 [[CMP_3]], label %[[FOR_BODY]], label %[[EXIT]]29; CHECK: [[EXIT]]:30; CHECK-NEXT: ret i32 [[LV]]31;32entry:33 %lv = load i32, ptr %p1, align 8, !tbaa !034 %cmp.1 = icmp slt i32 %lv, 135 br i1 %cmp.1, label %exit, label %if.false36 37if.false: ; preds = %entry38 br i1 %c, label %exit, label %for.check39 40for.check: ; preds = %if.false41 %cmp.2 = icmp sgt i32 %lv, 042 br i1 %cmp.2, label %for.ph, label %exit43 44for.ph: ; preds = %for.check45 br label %for.body46 47for.body: ; preds = %for.body, %for.ph48 %iv = phi i32 [ 0, %for.ph ], [ %iv.next, %for.body ]49 call void @use(i32 %iv)50 %iv.next = add nuw nsw i32 %iv, 151 %cmp.3 = icmp ne i32 %iv.next, %lv52 br i1 %cmp.3, label %for.body, label %exit53 54exit: ; preds = %for.body, %for.check, %if.false, %entry55 ret i32 %lv56}57 58!0 = !{!1, !2, i64 0}59!1 = !{!"FULL", !2, i64 0, !2, i64 4, !3, i64 8}60!2 = !{!"int", !3, i64 0}61!3 = !{!"omnipotent char", !4, i64 0}62!4 = !{!"Simple C/C++ TBAA"}63;.64; CHECK: [[INT_TBAA0]] = !{[[META1:![0-9]+]], [[META2:![0-9]+]], i64 0}65; CHECK: [[META1]] = !{!"FULL", [[META2]], i64 0, [[META2]], i64 4, [[META3:![0-9]+]], i64 8}66; CHECK: [[META2]] = !{!"int", [[META3]], i64 0}67; CHECK: [[META3]] = !{!"omnipotent char", [[META4:![0-9]+]], i64 0}68; CHECK: [[META4]] = !{!"Simple C/C++ TBAA"}69;.70