104 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=loop-unroll -unroll-count=4 < %s | FileCheck %s3 4define void @test_inside(ptr %addr1, ptr %addr2) {5; CHECK-LABEL: @test_inside(6; CHECK-NEXT: start:7; CHECK-NEXT: br label [[BODY:%.*]]8; CHECK: body:9; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0)10; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[ADDR1:%.*]], align 4, !alias.scope !011; CHECK-NEXT: store i32 [[X]], ptr [[ADDR2:%.*]], align 4, !noalias !012; CHECK-NEXT: [[ADDR1I_1:%.*]] = getelementptr inbounds i32, ptr [[ADDR1]], i32 113; CHECK-NEXT: [[ADDR2I_1:%.*]] = getelementptr inbounds i32, ptr [[ADDR2]], i32 114; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !3)15; CHECK-NEXT: [[X_1:%.*]] = load i32, ptr [[ADDR1I_1]], align 4, !alias.scope !316; CHECK-NEXT: store i32 [[X_1]], ptr [[ADDR2I_1]], align 4, !noalias !317; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !5)18; CHECK-NEXT: [[X_2:%.*]] = load i32, ptr [[ADDR1]], align 4, !alias.scope !519; CHECK-NEXT: store i32 [[X_2]], ptr [[ADDR2]], align 4, !noalias !520; CHECK-NEXT: [[ADDR1I_3:%.*]] = getelementptr inbounds i32, ptr [[ADDR1]], i32 121; CHECK-NEXT: [[ADDR2I_3:%.*]] = getelementptr inbounds i32, ptr [[ADDR2]], i32 122; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !7)23; CHECK-NEXT: [[X_3:%.*]] = load i32, ptr [[ADDR1I_3]], align 4, !alias.scope !724; CHECK-NEXT: store i32 [[X_3]], ptr [[ADDR2I_3]], align 4, !noalias !725; CHECK-NEXT: ret void26;27start:28 br label %body29 30body:31 %i = phi i32 [ 0, %start ], [ %i2, %body ]32 %j = and i32 %i, 133 %addr1i = getelementptr inbounds i32, ptr %addr1, i32 %j34 %addr2i = getelementptr inbounds i32, ptr %addr2, i32 %j35 36 call void @llvm.experimental.noalias.scope.decl(metadata !2)37 %x = load i32, ptr %addr1i, !alias.scope !238 store i32 %x, ptr %addr2i, !noalias !239 40 %i2 = add i32 %i, 141 %cmp = icmp slt i32 %i2, 442 br i1 %cmp, label %body, label %end43 44end:45 ret void46}47 48define void @test_outside(ptr %addr1, ptr %addr2) {49; CHECK-LABEL: @test_outside(50; CHECK-NEXT: start:51; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0)52; CHECK-NEXT: br label [[BODY:%.*]]53; CHECK: body:54; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[ADDR1:%.*]], align 4, !alias.scope !055; CHECK-NEXT: store i32 [[X]], ptr [[ADDR2:%.*]], align 4, !noalias !056; CHECK-NEXT: [[ADDR1I_1:%.*]] = getelementptr inbounds i32, ptr [[ADDR1]], i32 157; CHECK-NEXT: [[ADDR2I_1:%.*]] = getelementptr inbounds i32, ptr [[ADDR2]], i32 158; CHECK-NEXT: [[X_1:%.*]] = load i32, ptr [[ADDR1I_1]], align 4, !alias.scope !059; CHECK-NEXT: store i32 [[X_1]], ptr [[ADDR2I_1]], align 4, !noalias !060; CHECK-NEXT: [[X_2:%.*]] = load i32, ptr [[ADDR1]], align 4, !alias.scope !061; CHECK-NEXT: store i32 [[X_2]], ptr [[ADDR2]], align 4, !noalias !062; CHECK-NEXT: [[ADDR1I_3:%.*]] = getelementptr inbounds i32, ptr [[ADDR1]], i32 163; CHECK-NEXT: [[ADDR2I_3:%.*]] = getelementptr inbounds i32, ptr [[ADDR2]], i32 164; CHECK-NEXT: [[X_3:%.*]] = load i32, ptr [[ADDR1I_3]], align 4, !alias.scope !065; CHECK-NEXT: store i32 [[X_3]], ptr [[ADDR2I_3]], align 4, !noalias !066; CHECK-NEXT: ret void67;68start:69 call void @llvm.experimental.noalias.scope.decl(metadata !2)70 br label %body71 72body:73 %i = phi i32 [ 0, %start ], [ %i2, %body ]74 %j = and i32 %i, 175 %addr1i = getelementptr inbounds i32, ptr %addr1, i32 %j76 %addr2i = getelementptr inbounds i32, ptr %addr2, i32 %j77 78 %x = load i32, ptr %addr1i, !alias.scope !279 store i32 %x, ptr %addr2i, !noalias !280 81 %i2 = add i32 %i, 182 %cmp = icmp slt i32 %i2, 483 br i1 %cmp, label %body, label %end84 85end:86 ret void87}88 89declare void @llvm.experimental.noalias.scope.decl(metadata)90 91!0 = distinct !{!0}92!1 = distinct !{!1, !0}93!2 = !{!1}94 95; CHECK: !0 = !{!1}96; CHECK: !1 = distinct !{!1, !2}97; CHECK: !2 = distinct !{!2}98; CHECK: !3 = !{!4}99; CHECK: !4 = distinct !{!4, !2, !"It1"}100; CHECK: !5 = !{!6}101; CHECK: !6 = distinct !{!6, !2, !"It2"}102; CHECK: !7 = !{!8}103; CHECK: !8 = distinct !{!8, !2, !"It3"}104