1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -scoped-noalias-aa -memcpyopt < %s | FileCheck %s 3 4; ModuleID = '<stdin>' 5source_filename = "test.cpp" 6target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 7target triple = "aarch64-unknown-linux-android21" 8 9define dso_local void @_Z1ml(i64 %e) { 10; CHECK-LABEL: @_Z1ml( 11; CHECK-NEXT: entry: 12; CHECK-NEXT: [[L:%.*]] = alloca i8, align 1 13; CHECK-NEXT: br label [[WHILE_COND:%.*]] 14; CHECK: for.cond.while.cond.loopexit_crit_edge.us-lcssa: 15; CHECK-NEXT: br label [[WHILE_COND_LOOPEXIT:%.*]] 16; CHECK: while.cond.loopexit: 17; CHECK-NEXT: [[TMP0:%.*]] = phi i8* [ [[ADD_PTR_I:%.*]], [[FOR_COND_WHILE_COND_LOOPEXIT_CRIT_EDGE_US_LCSSA:%.*]] ], [ [[TMP1:%.*]], [[WHILE_COND]] ] 18; CHECK-NEXT: [[I_1_LCSSA:%.*]] = phi i8* [ [[I_2:%.*]], [[FOR_COND_WHILE_COND_LOOPEXIT_CRIT_EDGE_US_LCSSA]] ], [ [[I_0:%.*]], [[WHILE_COND]] ] 19; CHECK-NEXT: br label [[WHILE_COND]] 20; CHECK: while.cond: 21; CHECK-NEXT: [[TMP1]] = phi i8* [ [[L]], [[ENTRY:%.*]] ], [ [[TMP0]], [[WHILE_COND_LOOPEXIT]] ] 22; CHECK-NEXT: [[I_0]] = phi i8* [ [[L]], [[ENTRY]] ], [ [[I_1_LCSSA]], [[WHILE_COND_LOOPEXIT]] ] 23; CHECK-NEXT: br i1 undef, label [[FOR_BODY_LR_PH:%.*]], label [[WHILE_COND_LOOPEXIT]] 24; CHECK: for.body.lr.ph: 25; CHECK-NEXT: br label [[FOR_BODY:%.*]] 26; CHECK: for.body: 27; CHECK-NEXT: [[TMP2:%.*]] = phi i8* [ [[TMP1]], [[FOR_BODY_LR_PH]] ], [ [[ADD_PTR_I]], [[IF_END5:%.*]] ] 28; CHECK-NEXT: [[I_15:%.*]] = phi i8* [ [[I_0]], [[FOR_BODY_LR_PH]] ], [ [[I_2]], [[IF_END5]] ] 29; CHECK-NEXT: [[ADD_PTR_I]] = getelementptr inbounds i8, i8* [[TMP2]], i64 [[E:%.*]] 30; CHECK-NEXT: [[TMP3:%.*]] = load i8, i8* [[TMP2]], align 1, !noalias !0 31; CHECK-NEXT: [[TMP4:%.*]] = load i8, i8* [[I_15]], align 1, !alias.scope !0 32; CHECK-NEXT: store i8 [[TMP4]], i8* [[TMP2]], align 1 33; CHECK-NEXT: br label [[_Z1DPCS_L_EXIT:%.*]] 34; CHECK: _Z1dPcS_l.exit: 35; CHECK-NEXT: br i1 undef, label [[IF_THEN3:%.*]], label [[IF_END5]] 36; CHECK: if.then3: 37; CHECK-NEXT: [[ADD_PTR4:%.*]] = getelementptr inbounds i8, i8* [[I_15]], i64 [[E]] 38; CHECK-NEXT: br label [[IF_END5]] 39; CHECK: if.end5: 40; CHECK-NEXT: [[I_2]] = phi i8* [ [[ADD_PTR4]], [[IF_THEN3]] ], [ [[I_15]], [[_Z1DPCS_L_EXIT]] ] 41; CHECK-NEXT: br i1 false, label [[FOR_BODY]], label [[FOR_COND_WHILE_COND_LOOPEXIT_CRIT_EDGE_US_LCSSA]] 42; 43entry: 44 %l = alloca i8, align 1 45 br label %while.cond 46 47for.cond.while.cond.loopexit_crit_edge.us-lcssa: ; preds = %if.end5 48 br label %while.cond.loopexit 49 50while.cond.loopexit: ; preds = %while.cond, %for.cond.while.cond.loopexit_crit_edge.us-lcssa 51 %0 = phi i8* [ %add.ptr.i, %for.cond.while.cond.loopexit_crit_edge.us-lcssa ], [ %1, %while.cond ] 52 %i.1.lcssa = phi i8* [ %i.2, %for.cond.while.cond.loopexit_crit_edge.us-lcssa ], [ %i.0, %while.cond ] 53 br label %while.cond 54 55while.cond: ; preds = %while.cond.loopexit, %entry 56 %1 = phi i8* [ %l, %entry ], [ %0, %while.cond.loopexit ] 57 %i.0 = phi i8* [ %l, %entry ], [ %i.1.lcssa, %while.cond.loopexit ] 58 br i1 undef, label %for.body.lr.ph, label %while.cond.loopexit 59 60for.body.lr.ph: ; preds = %while.cond 61 br label %for.body 62 63for.body: ; preds = %if.end5, %for.body.lr.ph 64 %2 = phi i8* [ %1, %for.body.lr.ph ], [ %add.ptr.i, %if.end5 ] 65 %i.15 = phi i8* [ %i.0, %for.body.lr.ph ], [ %i.2, %if.end5 ] 66 %add.ptr.i = getelementptr inbounds i8, i8* %2, i64 %e 67 %3 = load i8, i8* %2, align 1, !noalias !0 68 %4 = load i8, i8* %i.15, align 1, !alias.scope !0 69 store i8 %4, i8* %2, align 1 70 br label %_Z1dPcS_l.exit 71 72_Z1dPcS_l.exit: ; preds = %for.body 73 br i1 undef, label %if.then3, label %if.end5 74 75if.then3: ; preds = %_Z1dPcS_l.exit 76 %add.ptr4 = getelementptr inbounds i8, i8* %i.15, i64 %e 77 br label %if.end5 78 79if.end5: ; preds = %if.then3, %_Z1dPcS_l.exit 80 %i.2 = phi i8* [ %add.ptr4, %if.then3 ], [ %i.15, %_Z1dPcS_l.exit ] 81 br i1 false, label %for.body, label %for.cond.while.cond.loopexit_crit_edge.us-lcssa 82} 83 84!0 = !{!1} 85!1 = distinct !{!1, !2, !"_Z1dPcS_l: %h"} 86!2 = distinct !{!2, !"_Z1dPcS_l"} 87