195 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -passes="default<O1>" -S < %s | FileCheck --check-prefixes=O1 %s3; RUN: opt -passes="default<O2>" -S < %s | FileCheck --check-prefixes=O23 %s4; RUN: opt -passes="default<O3>" -S < %s | FileCheck --check-prefixes=O23 %s5 6target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"7target triple = "x86_64-unknown-linux-gnu"8 9%class.FloatVecPair = type { %class.HomemadeVector, %class.HomemadeVector }10%class.HomemadeVector = type <{ ptr, i32, [4 x i8] }>11%class.HomemadeVector.0 = type <{ ptr, i32, [4 x i8] }>12 13$_ZN12FloatVecPair6vecIncEv = comdat any14 15define dso_local void @_Z13vecIncFromPtrP12FloatVecPair(ptr %FVP) {16; O1-LABEL: define dso_local void @_Z13vecIncFromPtrP12FloatVecPair(17; O1-SAME: ptr readonly captures(none) [[FVP:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {18; O1-NEXT: [[ENTRY:.*:]]19; O1-NEXT: [[VSRC23_I:%.*]] = getelementptr inbounds nuw i8, ptr [[FVP]], i64 1620; O1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[VSRC23_I]], align 8, !tbaa [[ANYPTR_TBAA0:![0-9]+]]21; O1-NEXT: [[ARRAYIDX_I_I:%.*]] = getelementptr inbounds [[CLASS_HOMEMADEVECTOR_0:%.*]], ptr [[TMP0]], i64 undef22; O1-NEXT: [[SIZE4_I:%.*]] = getelementptr inbounds nuw i8, ptr [[ARRAYIDX_I_I]], i64 823; O1-NEXT: [[TMP1:%.*]] = load i32, ptr [[SIZE4_I]], align 8, !tbaa [[INT_TBAA6:![0-9]+]]24; O1-NEXT: [[CMP56_NOT_I:%.*]] = icmp eq i32 [[TMP1]], 025; O1-NEXT: br i1 [[CMP56_NOT_I]], label %[[_ZN12FLOATVECPAIR6VECINCEV_EXIT:.*]], label %[[FOR_BODY7_LR_PH_I:.*]]26; O1: [[FOR_BODY7_LR_PH_I]]:27; O1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[ARRAYIDX_I_I]], align 8, !tbaa [[ANYPTR_TBAA8:![0-9]+]]28; O1-NEXT: [[ARRAYIDX_I3_I:%.*]] = getelementptr inbounds float, ptr [[TMP2]], i64 undef29; O1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[FVP]], align 8, !tbaa [[ANYPTR_TBAA0]]30; O1-NEXT: [[ARRAYIDX_I4_I:%.*]] = getelementptr inbounds [[CLASS_HOMEMADEVECTOR_0]], ptr [[TMP3]], i64 undef31; O1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[ARRAYIDX_I4_I]], align 8, !tbaa [[ANYPTR_TBAA8]]32; O1-NEXT: [[ARRAYIDX_I5_I:%.*]] = getelementptr inbounds float, ptr [[TMP4]], i64 undef33; O1-NEXT: br label %[[FOR_BODY7_I:.*]]34; O1: [[FOR_BODY7_I]]:35; O1-NEXT: [[J_07_I:%.*]] = phi i32 [ 0, %[[FOR_BODY7_LR_PH_I]] ], [ [[INC_I:%.*]], %[[FOR_BODY7_I]] ]36; O1-NEXT: [[TMP5:%.*]] = load float, ptr [[ARRAYIDX_I3_I]], align 4, !tbaa [[FLOAT_TBAA9:![0-9]+]]37; O1-NEXT: [[TMP6:%.*]] = load float, ptr [[ARRAYIDX_I5_I]], align 4, !tbaa [[FLOAT_TBAA9]]38; O1-NEXT: [[ADD_I:%.*]] = fadd float [[TMP5]], [[TMP6]]39; O1-NEXT: store float [[ADD_I]], ptr [[ARRAYIDX_I5_I]], align 4, !tbaa [[FLOAT_TBAA9]]40; O1-NEXT: [[INC_I]] = add nuw i32 [[J_07_I]], 141; O1-NEXT: [[EXITCOND_NOT_I:%.*]] = icmp eq i32 [[INC_I]], [[TMP1]]42; O1-NEXT: br i1 [[EXITCOND_NOT_I]], label %[[_ZN12FLOATVECPAIR6VECINCEV_EXIT]], label %[[FOR_BODY7_I]], !llvm.loop [[LOOP11:![0-9]+]]43; O1: [[_ZN12FLOATVECPAIR6VECINCEV_EXIT]]:44; O1-NEXT: ret void45;46; O23-LABEL: define dso_local void @_Z13vecIncFromPtrP12FloatVecPair(47; O23-SAME: ptr readonly captures(none) [[FVP:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {48; O23-NEXT: [[ENTRY:.*:]]49; O23-NEXT: [[VSRC23_I:%.*]] = getelementptr inbounds nuw i8, ptr [[FVP]], i64 1650; O23-NEXT: [[TMP0:%.*]] = load ptr, ptr [[VSRC23_I]], align 8, !tbaa [[ANYPTR_TBAA0:![0-9]+]]51; O23-NEXT: [[ARRAYIDX_I_I:%.*]] = getelementptr inbounds [[CLASS_HOMEMADEVECTOR_0:%.*]], ptr [[TMP0]], i64 undef52; O23-NEXT: [[SIZE4_I:%.*]] = getelementptr inbounds nuw i8, ptr [[ARRAYIDX_I_I]], i64 853; O23-NEXT: [[TMP1:%.*]] = load i32, ptr [[SIZE4_I]], align 8, !tbaa [[INT_TBAA6:![0-9]+]]54; O23-NEXT: [[CMP56_NOT_I:%.*]] = icmp eq i32 [[TMP1]], 055; O23-NEXT: br i1 [[CMP56_NOT_I]], label %[[_ZN12FLOATVECPAIR6VECINCEV_EXIT:.*]], label %[[FOR_BODY7_LR_PH_I:.*]]56; O23: [[FOR_BODY7_LR_PH_I]]:57; O23-NEXT: [[TMP2:%.*]] = load ptr, ptr [[ARRAYIDX_I_I]], align 8, !tbaa [[ANYPTR_TBAA8:![0-9]+]]58; O23-NEXT: [[ARRAYIDX_I3_I:%.*]] = getelementptr inbounds float, ptr [[TMP2]], i64 undef59; O23-NEXT: [[TMP3:%.*]] = load ptr, ptr [[FVP]], align 8, !tbaa [[ANYPTR_TBAA0]]60; O23-NEXT: [[ARRAYIDX_I4_I:%.*]] = getelementptr inbounds [[CLASS_HOMEMADEVECTOR_0]], ptr [[TMP3]], i64 undef61; O23-NEXT: [[TMP4:%.*]] = load ptr, ptr [[ARRAYIDX_I4_I]], align 8, !tbaa [[ANYPTR_TBAA8]]62; O23-NEXT: [[ARRAYIDX_I5_I:%.*]] = getelementptr inbounds float, ptr [[TMP4]], i64 undef63; O23-NEXT: [[DOTPRE_I:%.*]] = load float, ptr [[ARRAYIDX_I5_I]], align 4, !tbaa [[FLOAT_TBAA9:![0-9]+]]64; O23-NEXT: br label %[[FOR_BODY7_I:.*]]65; O23: [[FOR_BODY7_I]]:66; O23-NEXT: [[TMP5:%.*]] = phi float [ [[DOTPRE_I]], %[[FOR_BODY7_LR_PH_I]] ], [ [[ADD_I:%.*]], %[[FOR_BODY7_I]] ]67; O23-NEXT: [[J_07_I:%.*]] = phi i32 [ 0, %[[FOR_BODY7_LR_PH_I]] ], [ [[INC_I:%.*]], %[[FOR_BODY7_I]] ]68; O23-NEXT: [[TMP6:%.*]] = load float, ptr [[ARRAYIDX_I3_I]], align 4, !tbaa [[FLOAT_TBAA9]]69; O23-NEXT: [[ADD_I]] = fadd float [[TMP5]], [[TMP6]]70; O23-NEXT: store float [[ADD_I]], ptr [[ARRAYIDX_I5_I]], align 4, !tbaa [[FLOAT_TBAA9]]71; O23-NEXT: [[INC_I]] = add nuw i32 [[J_07_I]], 172; O23-NEXT: [[EXITCOND_NOT_I:%.*]] = icmp eq i32 [[INC_I]], [[TMP1]]73; O23-NEXT: br i1 [[EXITCOND_NOT_I]], label %[[_ZN12FLOATVECPAIR6VECINCEV_EXIT]], label %[[FOR_BODY7_I]], !llvm.loop [[LOOP11:![0-9]+]]74; O23: [[_ZN12FLOATVECPAIR6VECINCEV_EXIT]]:75; O23-NEXT: ret void76;77entry:78 %FVP.addr = alloca ptr, align 879 store ptr %FVP, ptr %FVP.addr, align 8, !tbaa !080 %0 = load ptr, ptr %FVP.addr, align 8, !tbaa !081 call void @_ZN12FloatVecPair6vecIncEv(ptr %0)82 ret void83}84 85define linkonce_odr dso_local void @_ZN12FloatVecPair6vecIncEv(ptr %this) comdat align 2 {86entry:87 %this.addr = alloca ptr, align 888 %j = alloca i32, align 489 store ptr %this, ptr %this.addr, align 8, !tbaa !090 %this1 = load ptr, ptr %this.addr, align 891 br label %for.cond92 93for.cond: ; preds = %entry94 br label %for.body95 96for.body: ; preds = %for.cond97 store i32 0, ptr %j, align 4, !tbaa !498 br label %for.cond299 100for.cond2: ; preds = %for.inc, %for.body101 %0 = load i32, ptr %j, align 4, !tbaa !4102 %Vsrc23 = getelementptr inbounds %class.FloatVecPair, ptr %this1, i32 0, i32 1103 %call = call ptr @_ZN14HomemadeVectorIS_IfLj8EELj8EEixEj(ptr %Vsrc23)104 %size4 = getelementptr inbounds %class.HomemadeVector.0, ptr %call, i32 0, i32 1105 %1 = load i32, ptr %size4, align 8, !tbaa !6106 %cmp5 = icmp ult i32 %0, %1107 br i1 %cmp5, label %for.body7, label %for.cond.cleanup6108 109for.cond.cleanup6: ; preds = %for.cond2110 ret void111 112for.body7: ; preds = %for.cond2113 %Vsrc28 = getelementptr inbounds %class.FloatVecPair, ptr %this1, i32 0, i32 1114 %call9 = call ptr @_ZN14HomemadeVectorIS_IfLj8EELj8EEixEj(ptr %Vsrc28)115 %call10 = call ptr @_ZN14HomemadeVectorIfLj8EEixEj(ptr %call9)116 %2 = load float, ptr %call10, align 4, !tbaa !8117 %call11 = call ptr @_ZN14HomemadeVectorIS_IfLj8EELj8EEixEj(ptr %this1)118 %call12 = call ptr @_ZN14HomemadeVectorIfLj8EEixEj(ptr %call11)119 %3 = load float, ptr %call12, align 4, !tbaa !8120 %add = fadd float %3, %2121 store float %add, ptr %call12, align 4, !tbaa !8122 br label %for.inc123 124for.inc: ; preds = %for.body7125 %4 = load i32, ptr %j, align 4, !tbaa !4126 %inc = add i32 %4, 1127 store i32 %inc, ptr %j, align 4, !tbaa !4128 br label %for.cond2, !llvm.loop !10129}130 131define linkonce_odr dso_local ptr @_ZN14HomemadeVectorIS_IfLj8EELj8EEixEj(ptr %this) align 2 {132entry:133 %this.addr = alloca ptr, align 8134 store ptr %this, ptr %this.addr, align 8, !tbaa !0135 %this1 = load ptr, ptr %this.addr, align 8136 %0 = load ptr, ptr %this1, align 8, !tbaa !12137 %arrayidx = getelementptr inbounds %class.HomemadeVector.0, ptr %0, i64 undef138 ret ptr %arrayidx139}140 141define linkonce_odr dso_local ptr @_ZN14HomemadeVectorIfLj8EEixEj(ptr %this) align 2 {142entry:143 %this.addr = alloca ptr, align 8144 store ptr %this, ptr %this.addr, align 8, !tbaa !0145 %this1 = load ptr, ptr %this.addr, align 8146 %0 = load ptr, ptr %this1, align 8, !tbaa !14147 %arrayidx = getelementptr inbounds float, ptr %0, i64 undef148 ret ptr %arrayidx149}150 151!0 = !{!1, !1, i64 0}152!1 = !{!"any pointer", !2, i64 0}153!2 = !{!"omnipotent char", !3, i64 0}154!3 = !{!"Simple C++ TBAA"}155!4 = !{!5, !5, i64 0}156!5 = !{!"int", !2, i64 0}157!6 = !{!7, !5, i64 8}158!7 = !{!"_ZTS14HomemadeVectorIfLj8EE", !1, i64 0, !5, i64 8}159!8 = !{!9, !9, i64 0}160!9 = !{!"float", !2, i64 0}161!10 = distinct !{!10, !11}162!11 = !{!"llvm.loop.mustprogress"}163!12 = !{!13, !1, i64 0}164!13 = !{!"_ZTS14HomemadeVectorIS_IfLj8EELj8EE", !1, i64 0, !5, i64 8}165!14 = !{!7, !1, i64 0}166;.167; O1: [[ANYPTR_TBAA0]] = !{[[META1:![0-9]+]], [[META2:![0-9]+]], i64 0}168; O1: [[META1]] = !{!"_ZTS14HomemadeVectorIS_IfLj8EELj8EE", [[META2]], i64 0, [[META5:![0-9]+]], i64 8}169; O1: [[META2]] = !{!"any pointer", [[META3:![0-9]+]], i64 0}170; O1: [[META3]] = !{!"omnipotent char", [[META4:![0-9]+]], i64 0}171; O1: [[META4]] = !{!"Simple C++ TBAA"}172; O1: [[META5]] = !{!"int", [[META3]], i64 0}173; O1: [[INT_TBAA6]] = !{[[META7:![0-9]+]], [[META5]], i64 8}174; O1: [[META7]] = !{!"_ZTS14HomemadeVectorIfLj8EE", [[META2]], i64 0, [[META5]], i64 8}175; O1: [[ANYPTR_TBAA8]] = !{[[META7]], [[META2]], i64 0}176; O1: [[FLOAT_TBAA9]] = !{[[META10:![0-9]+]], [[META10]], i64 0}177; O1: [[META10]] = !{!"float", [[META3]], i64 0}178; O1: [[LOOP11]] = distinct !{[[LOOP11]], [[META12:![0-9]+]]}179; O1: [[META12]] = !{!"llvm.loop.mustprogress"}180;.181; O23: [[ANYPTR_TBAA0]] = !{[[META1:![0-9]+]], [[META2:![0-9]+]], i64 0}182; O23: [[META1]] = !{!"_ZTS14HomemadeVectorIS_IfLj8EELj8EE", [[META2]], i64 0, [[META5:![0-9]+]], i64 8}183; O23: [[META2]] = !{!"any pointer", [[META3:![0-9]+]], i64 0}184; O23: [[META3]] = !{!"omnipotent char", [[META4:![0-9]+]], i64 0}185; O23: [[META4]] = !{!"Simple C++ TBAA"}186; O23: [[META5]] = !{!"int", [[META3]], i64 0}187; O23: [[INT_TBAA6]] = !{[[META7:![0-9]+]], [[META5]], i64 8}188; O23: [[META7]] = !{!"_ZTS14HomemadeVectorIfLj8EE", [[META2]], i64 0, [[META5]], i64 8}189; O23: [[ANYPTR_TBAA8]] = !{[[META7]], [[META2]], i64 0}190; O23: [[FLOAT_TBAA9]] = !{[[META10:![0-9]+]], [[META10]], i64 0}191; O23: [[META10]] = !{!"float", [[META3]], i64 0}192; O23: [[LOOP11]] = distinct !{[[LOOP11]], [[META12:![0-9]+]]}193; O23: [[META12]] = !{!"llvm.loop.mustprogress"}194;.195