163 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature2; RUN: opt -passes=inline -enable-noalias-to-md-conversion -S < %s | FileCheck %s3; RUN: opt -aa-pipeline=basic-aa -passes=inline -enable-noalias-to-md-conversion -S < %s | 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 8declare void @llvm.experimental.noalias.scope.decl(metadata) #09 10define void @caller_equals_callee(ptr noalias %p0, ptr noalias %p1, i32 %cnt) {11; CHECK-LABEL: define {{[^@]+}}@caller_equals_callee12; CHECK-SAME: (ptr noalias [[P0:%.*]], ptr noalias [[P1:%.*]], i32 [[CNT:%.*]]) {13; CHECK-NEXT: entry:14; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P0]], i64 215; CHECK-NEXT: [[ADD_PTR1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 216; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !0)17; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !3)18; CHECK-NEXT: store i32 10, ptr [[ADD_PTR]], align 4, !alias.scope !0, !noalias !319; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1]], align 4, !alias.scope !3, !noalias !020; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[CNT]], 021; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]22; CHECK: if.then:23; CHECK-NEXT: store i32 11, ptr [[P0]], align 424; CHECK-NEXT: br label [[IF_END:%.*]]25; CHECK: if.else:26; CHECK-NEXT: [[ADD_PTR2:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 127; CHECK-NEXT: [[ADD_PTR3:%.*]] = getelementptr inbounds i32, ptr [[P0]], i64 128; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !5)29; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !8)30; CHECK-NEXT: [[ADD_PTR_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR2]], i64 231; CHECK-NEXT: [[ADD_PTR1_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR3]], i64 232; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !10)33; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !13)34; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I]], align 4, !alias.scope !15, !noalias !1635; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I]], align 4, !alias.scope !16, !noalias !1536; CHECK-NEXT: store i32 11, ptr [[ADD_PTR2]], align 4, !alias.scope !5, !noalias !837; CHECK-NEXT: store i32 12, ptr [[P1]], align 438; CHECK-NEXT: br label [[IF_END]]39; CHECK: if.end:40; CHECK-NEXT: ret void41;42entry:43 %add.ptr = getelementptr inbounds i32, ptr %p0, i64 244 %add.ptr1 = getelementptr inbounds i32, ptr %p1, i64 245 tail call void @llvm.experimental.noalias.scope.decl(metadata !0)46 tail call void @llvm.experimental.noalias.scope.decl(metadata !3)47 store i32 10, ptr %add.ptr, align 4, !alias.scope !0, !noalias !348 store i32 20, ptr %add.ptr1, align 4, !alias.scope !3, !noalias !049 %cmp = icmp eq i32 %cnt, 050 br i1 %cmp, label %if.then, label %if.else51 52if.then: ; preds = %entry53 store i32 11, ptr %p0, align 454 br label %if.end55 56if.else: ; preds = %entry57 %add.ptr2 = getelementptr inbounds i32, ptr %p1, i64 158 %add.ptr3 = getelementptr inbounds i32, ptr %p0, i64 159 tail call void @caller_equals_callee(ptr nonnull %add.ptr2, ptr nonnull %add.ptr3, i32 0)60 store i32 12, ptr %p1, align 461 br label %if.end62 63if.end: ; preds = %if.else, %if.then64 ret void65}66 67define void @test01(ptr noalias %p0, ptr noalias %p1, i32 %cnt) {68; CHECK-LABEL: define {{[^@]+}}@test0169; CHECK-SAME: (ptr noalias [[P0:%.*]], ptr noalias [[P1:%.*]], i32 [[CNT:%.*]]) {70; CHECK-NEXT: entry:71; CHECK-NEXT: store i32 13, ptr [[P0]], align 472; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P0]], i64 173; CHECK-NEXT: [[ADD_PTR1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 174; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !17)75; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !20)76; CHECK-NEXT: [[ADD_PTR_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR]], i64 277; CHECK-NEXT: [[ADD_PTR1_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR1]], i64 278; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !22)79; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !25)80; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I]], align 4, !alias.scope !27, !noalias !2881; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I]], align 4, !alias.scope !28, !noalias !2782; CHECK-NEXT: [[CMP_I:%.*]] = icmp eq i32 [[CNT]], 083; CHECK-NEXT: br i1 [[CMP_I]], label [[IF_THEN_I:%.*]], label [[IF_ELSE_I:%.*]]84; CHECK: if.then.i:85; CHECK-NEXT: store i32 11, ptr [[ADD_PTR]], align 4, !alias.scope !17, !noalias !2086; CHECK-NEXT: br label [[CALLER_EQUALS_CALLEE_EXIT:%.*]]87; CHECK: if.else.i:88; CHECK-NEXT: [[ADD_PTR2_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR1]], i64 189; CHECK-NEXT: [[ADD_PTR3_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR]], i64 190; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !29)91; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !32)92; CHECK-NEXT: [[ADD_PTR_I_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR2_I]], i64 293; CHECK-NEXT: [[ADD_PTR1_I_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR3_I]], i64 294; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !34)95; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !37)96; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I_I]], align 4, !alias.scope !39, !noalias !4097; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I_I]], align 4, !alias.scope !40, !noalias !3998; CHECK-NEXT: store i32 11, ptr [[ADD_PTR2_I]], align 4, !alias.scope !41, !noalias !4299; CHECK-NEXT: store i32 12, ptr [[ADD_PTR1]], align 4, !alias.scope !20, !noalias !17100; CHECK-NEXT: br label [[CALLER_EQUALS_CALLEE_EXIT]]101; CHECK: caller_equals_callee.exit:102; CHECK-NEXT: ret void103;104entry:105 store i32 13, ptr %p0, align 4106 %add.ptr = getelementptr inbounds i32, ptr %p0, i64 1107 %add.ptr1 = getelementptr inbounds i32, ptr %p1, i64 1108 call void @caller_equals_callee(ptr nonnull %add.ptr, ptr nonnull %add.ptr1, i32 %cnt)109 ret void110}111 112attributes #0 = { inaccessiblememonly nofree nosync nounwind willreturn }113 114!0 = !{!1}115!1 = distinct !{!1, !2, !"do_store: %p0"}116!2 = distinct !{!2, !"do_store"}117!3 = !{!4}118!4 = distinct !{!4, !2, !"do_store: %p1"}119 120; CHECK: !0 = !{!1}121; CHECK: !1 = distinct !{!1, !2, !"do_store: %p0"}122; CHECK: !2 = distinct !{!2, !"do_store"}123; CHECK: !3 = !{!4}124; CHECK: !4 = distinct !{!4, !2, !"do_store: %p1"}125; CHECK: !5 = !{!6}126; CHECK: !6 = distinct !{!6, !7, !"caller_equals_callee: %p0"}127; CHECK: !7 = distinct !{!7, !"caller_equals_callee"}128; CHECK: !8 = !{!9}129; CHECK: !9 = distinct !{!9, !7, !"caller_equals_callee: %p1"}130; CHECK: !10 = !{!11}131; CHECK: !11 = distinct !{!11, !12, !"do_store: %p0"}132; CHECK: !12 = distinct !{!12, !"do_store"}133; CHECK: !13 = !{!14}134; CHECK: !14 = distinct !{!14, !12, !"do_store: %p1"}135; CHECK: !15 = !{!11, !6}136; CHECK: !16 = !{!14, !9}137; CHECK: !17 = !{!18}138; CHECK: !18 = distinct !{!18, !19, !"caller_equals_callee: %p0"}139; CHECK: !19 = distinct !{!19, !"caller_equals_callee"}140; CHECK: !20 = !{!21}141; CHECK: !21 = distinct !{!21, !19, !"caller_equals_callee: %p1"}142; CHECK: !22 = !{!23}143; CHECK: !23 = distinct !{!23, !24, !"do_store: %p0"}144; CHECK: !24 = distinct !{!24, !"do_store"}145; CHECK: !25 = !{!26}146; CHECK: !26 = distinct !{!26, !24, !"do_store: %p1"}147; CHECK: !27 = !{!23, !18}148; CHECK: !28 = !{!26, !21}149; CHECK: !29 = !{!30}150; CHECK: !30 = distinct !{!30, !31, !"caller_equals_callee: %p0"}151; CHECK: !31 = distinct !{!31, !"caller_equals_callee"}152; CHECK: !32 = !{!33}153; CHECK: !33 = distinct !{!33, !31, !"caller_equals_callee: %p1"}154; CHECK: !34 = !{!35}155; CHECK: !35 = distinct !{!35, !36, !"do_store: %p0"}156; CHECK: !36 = distinct !{!36, !"do_store"}157; CHECK: !37 = !{!38}158; CHECK: !38 = distinct !{!38, !36, !"do_store: %p1"}159; CHECK: !39 = !{!35, !30, !21}160; CHECK: !40 = !{!38, !33, !18}161; CHECK: !41 = !{!30, !21}162; CHECK: !42 = !{!33, !18}163