brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.1 KiB · 839bdbd Raw
150 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -S -passes=loop-unroll -unroll-force-peel-count=1 | FileCheck %s3; RUN: opt < %s -S -passes='loop-unroll<peeling;no-runtime>' -unroll-force-peel-count=1 | FileCheck %s4 5target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"6target triple = "x86_64-unknown-linux-gnu"7 8; Loop peeling must result in valid scope declartions9 10define internal fastcc void @test01(ptr %p0, ptr %p1, ptr %p2) unnamed_addr align 2 {11; CHECK-LABEL: @test01(12; CHECK-NEXT:  for.body47.lr.ph:13; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)14; CHECK-NEXT:    br label [[FOR_BODY47_PEEL_BEGIN:%.*]]15; CHECK:       for.body47.peel.begin:16; CHECK-NEXT:    br label [[FOR_BODY47_PEEL:%.*]]17; CHECK:       for.body47.peel:18; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !3)19; CHECK-NEXT:    store i8 42, ptr [[P0:%.*]], align 1, !alias.scope !320; CHECK-NEXT:    store i8 43, ptr [[P1:%.*]], align 1, !alias.scope !021; CHECK-NEXT:    store i8 44, ptr [[P2:%.*]], align 1, !alias.scope !522; CHECK-NEXT:    store i8 42, ptr [[P0]], align 1, !noalias !323; CHECK-NEXT:    store i8 43, ptr [[P1]], align 1, !noalias !024; CHECK-NEXT:    store i8 44, ptr [[P2]], align 1, !noalias !525; CHECK-NEXT:    [[CMP52_PEEL:%.*]] = icmp eq i32 0, 026; CHECK-NEXT:    br i1 [[CMP52_PEEL]], label [[COND_TRUE_PEEL:%.*]], label [[COND_END_PEEL:%.*]]27; CHECK:       cond.true.peel:28; CHECK-NEXT:    store i8 52, ptr [[P0]], align 1, !alias.scope !329; CHECK-NEXT:    store i8 53, ptr [[P1]], align 1, !alias.scope !030; CHECK-NEXT:    store i8 54, ptr [[P2]], align 1, !alias.scope !531; CHECK-NEXT:    store i8 52, ptr [[P0]], align 1, !noalias !332; CHECK-NEXT:    store i8 53, ptr [[P1]], align 1, !noalias !033; CHECK-NEXT:    store i8 54, ptr [[P2]], align 1, !noalias !534; CHECK-NEXT:    br label [[COND_END_PEEL]]35; CHECK:       cond.end.peel:36; CHECK-NEXT:    store i8 62, ptr [[P0]], align 1, !alias.scope !337; CHECK-NEXT:    store i8 63, ptr [[P1]], align 1, !alias.scope !038; CHECK-NEXT:    store i8 64, ptr [[P2]], align 1, !alias.scope !539; CHECK-NEXT:    store i8 62, ptr [[P0]], align 1, !noalias !340; CHECK-NEXT:    store i8 63, ptr [[P1]], align 1, !noalias !041; CHECK-NEXT:    store i8 64, ptr [[P2]], align 1, !noalias !542; CHECK-NEXT:    [[INC_PEEL:%.*]] = add nuw i32 0, 143; CHECK-NEXT:    [[EXITCOND_NOT_PEEL:%.*]] = icmp eq i32 [[INC_PEEL]], undef44; CHECK-NEXT:    br i1 [[EXITCOND_NOT_PEEL]], label [[FOR_COND_CLEANUP46:%.*]], label [[FOR_BODY47_PEEL_NEXT:%.*]]45; CHECK:       for.body47.peel.next:46; CHECK-NEXT:    br label [[FOR_BODY47_PEEL_NEXT1:%.*]]47; CHECK:       for.body47.peel.next1:48; CHECK-NEXT:    br label [[FOR_BODY47_LR_PH_PEEL_NEWPH:%.*]]49; CHECK:       for.body47.lr.ph.peel.newph:50; CHECK-NEXT:    br label [[FOR_BODY47:%.*]]51; CHECK:       for.cond.cleanup46.loopexit:52; CHECK-NEXT:    br label [[FOR_COND_CLEANUP46]]53; CHECK:       for.cond.cleanup46:54; CHECK-NEXT:    ret void55; CHECK:       for.body47:56; CHECK-NEXT:    [[J_02:%.*]] = phi i32 [ [[INC_PEEL]], [[FOR_BODY47_LR_PH_PEEL_NEWPH]] ], [ [[INC:%.*]], [[COND_END:%.*]] ]57; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !6)58; CHECK-NEXT:    store i8 42, ptr [[P0]], align 1, !alias.scope !659; CHECK-NEXT:    store i8 43, ptr [[P1]], align 1, !alias.scope !060; CHECK-NEXT:    store i8 44, ptr [[P2]], align 1, !alias.scope !861; CHECK-NEXT:    store i8 42, ptr [[P0]], align 1, !noalias !662; CHECK-NEXT:    store i8 43, ptr [[P1]], align 1, !noalias !063; CHECK-NEXT:    store i8 44, ptr [[P2]], align 1, !noalias !864; CHECK-NEXT:    br i1 false, label [[COND_TRUE:%.*]], label [[COND_END]]65; CHECK:       cond.true:66; CHECK-NEXT:    store i8 52, ptr [[P0]], align 1, !alias.scope !667; CHECK-NEXT:    store i8 53, ptr [[P1]], align 1, !alias.scope !068; CHECK-NEXT:    store i8 54, ptr [[P2]], align 1, !alias.scope !869; CHECK-NEXT:    store i8 52, ptr [[P0]], align 1, !noalias !670; CHECK-NEXT:    store i8 53, ptr [[P1]], align 1, !noalias !071; CHECK-NEXT:    store i8 54, ptr [[P2]], align 1, !noalias !872; CHECK-NEXT:    br label [[COND_END]]73; CHECK:       cond.end:74; CHECK-NEXT:    store i8 62, ptr [[P0]], align 1, !alias.scope !675; CHECK-NEXT:    store i8 63, ptr [[P1]], align 1, !alias.scope !076; CHECK-NEXT:    store i8 64, ptr [[P2]], align 1, !alias.scope !877; CHECK-NEXT:    store i8 62, ptr [[P0]], align 1, !noalias !678; CHECK-NEXT:    store i8 63, ptr [[P1]], align 1, !noalias !079; CHECK-NEXT:    store i8 64, ptr [[P2]], align 1, !noalias !880; CHECK-NEXT:    [[INC]] = add nuw i32 [[J_02]], 181; CHECK-NEXT:    br i1 undef, label [[FOR_COND_CLEANUP46_LOOPEXIT:%.*]], label [[FOR_BODY47]], [[LOOP9:!llvm.loop !.*]]82;83for.body47.lr.ph:84  call void @llvm.experimental.noalias.scope.decl(metadata !5)85  br label %for.body4786 87for.cond.cleanup46:                               ; preds = %cond.end88  ret void89 90for.body47:                                       ; preds = %cond.end, %for.body47.lr.ph91  %j.02 = phi i32 [ 0, %for.body47.lr.ph ], [ %inc, %cond.end ]92  call void @llvm.experimental.noalias.scope.decl(metadata !0)93  store i8 42, ptr %p0, !alias.scope !094  store i8 43, ptr %p1, !alias.scope !595  store i8 44, ptr %p2, !alias.scope !796  store i8 42, ptr %p0, !noalias !097  store i8 43, ptr %p1, !noalias !598  store i8 44, ptr %p2, !noalias !799  %cmp52 = icmp eq i32 %j.02, 0100  br i1 %cmp52, label %cond.true, label %cond.end101 102cond.true:                                        ; preds = %for.body47103  store i8 52, ptr %p0, !alias.scope !0104  store i8 53, ptr %p1, !alias.scope !5105  store i8 54, ptr %p2, !alias.scope !7106  store i8 52, ptr %p0, !noalias !0107  store i8 53, ptr %p1, !noalias !5108  store i8 54, ptr %p2, !noalias !7109  br label %cond.end110 111cond.end:                                         ; preds = %cond.true, %for.body47112  store i8 62, ptr %p0, !alias.scope !0113  store i8 63, ptr %p1, !alias.scope !5114  store i8 64, ptr %p2, !alias.scope !7115  store i8 62, ptr %p0, !noalias !0116  store i8 63, ptr %p1, !noalias !5117  store i8 64, ptr %p2, !noalias !7118  %inc = add nuw i32 %j.02, 1119  %exitcond.not = icmp eq i32 %inc, undef120  br i1 %exitcond.not, label %for.cond.cleanup46, label %for.body47, !llvm.loop !3121}122 123; Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn124declare void @llvm.experimental.noalias.scope.decl(metadata) #0125 126attributes #0 = { inaccessiblememonly nofree nosync nounwind willreturn }127 128!0 = !{!1}129!1 = distinct !{!1, !2, !"foo: %inner.result"}130!2 = distinct !{!2, !"foo"}131!3 = distinct !{!3, !4}132!4 = !{!"llvm.loop.mustprogress"}133!5 = !{!6}134!6 = distinct !{!6, !2, !"foo: %outer.result"}135!7 = !{!1, !6}136 137; CHECK: !0 = !{!1}138; CHECK: !1 = distinct !{!1, !2, !"foo: %outer.result"}139; CHECK: !2 = distinct !{!2, !"foo"}140; CHECK: !3 = !{!4}141; CHECK: !4 = distinct !{!4, !2, !"foo: %inner.result:Peel0"}142; CHECK: !5 = !{!4, !1}143; CHECK: !6 = !{!7}144; CHECK: !7 = distinct !{!7, !2, !"foo: %inner.result"}145; CHECK: !8 = !{!7, !1}146; CHECK: !9 = distinct !{!9, !10, !11, !12}147; CHECK: !10 = !{!"llvm.loop.mustprogress"}148; CHECK: !11 = !{!"llvm.loop.peeled.count", i32 1}149; CHECK: !12 = !{!"llvm.loop.unroll.disable"}150