brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.9 KiB · ef41488 Raw
503 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck --check-prefix=IC %s3; RUN: opt < %s -passes='instcombine,sroa' -S | FileCheck --check-prefix=IC_SROA %s4 5; rdar://64177246; Instcombine shouldn't do anything to this function that prevents promoting the allocas inside it.7 8target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"9target triple = "i386-apple-darwin9.6"10 11%"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >" = type { ptr }12%"struct.std::_Vector_base<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" }13%"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" = type { ptr, ptr, ptr }14%"struct.std::bidirectional_iterator_tag" = type <{ i8 }>15%"struct.std::forward_iterator_tag" = type <{ i8 }>16%"struct.std::input_iterator_tag" = type <{ i8 }>17%"struct.std::random_access_iterator_tag" = type <{ i8 }>18%"struct.std::vector<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >" }19 20define ptr @_Z3fooRSt6vectorIiSaIiEE(ptr %X) {21; IC-LABEL: @_Z3fooRSt6vectorIiSaIiEE(22; IC-NEXT:  entry:23; IC-NEXT:    [[__FIRST_ADDR_I_I:%.*]] = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", align 824; IC-NEXT:    [[__LAST_ADDR_I_I:%.*]] = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", align 825; IC-NEXT:    [[TMP0:%.*]] = alloca i32, align 426; IC-NEXT:    store i32 42, ptr [[TMP0]], align 427; IC-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[X:%.*]], i32 428; IC-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 429; IC-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[X]], align 430; IC-NEXT:    store ptr [[TMP3]], ptr [[__FIRST_ADDR_I_I]], align 431; IC-NEXT:    store ptr [[TMP2]], ptr [[__LAST_ADDR_I_I]], align 432; IC-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[TMP2]] to i3233; IC-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[TMP3]] to i3234; IC-NEXT:    [[TMP6:%.*]] = sub i32 [[TMP4]], [[TMP5]]35; IC-NEXT:    [[TMP7:%.*]] = ashr i32 [[TMP6]], 436; IC-NEXT:    br label [[BB12_I_I:%.*]]37; IC:       bb.i.i:38; IC-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 439; IC-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 440; IC-NEXT:    [[TMP10:%.*]] = load i32, ptr [[TMP0]], align 441; IC-NEXT:    [[TMP11:%.*]] = icmp eq i32 [[TMP9]], [[TMP10]]42; IC-NEXT:    br i1 [[TMP11]], label [[BB1_I_I:%.*]], label [[BB2_I_I:%.*]]43; IC:       bb1.i.i:44; IC-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 445; IC-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT:%.*]]46; IC:       bb2.i.i:47; IC-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 448; IC-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[TMP13]], i32 449; IC-NEXT:    store ptr [[TMP14]], ptr [[__FIRST_ADDR_I_I]], align 450; IC-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 451; IC-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP0]], align 452; IC-NEXT:    [[TMP17:%.*]] = icmp eq i32 [[TMP15]], [[TMP16]]53; IC-NEXT:    br i1 [[TMP17]], label [[BB4_I_I:%.*]], label [[BB5_I_I:%.*]]54; IC:       bb4.i.i:55; IC-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 456; IC-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]57; IC:       bb5.i.i:58; IC-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 459; IC-NEXT:    [[TMP20:%.*]] = getelementptr i8, ptr [[TMP19]], i32 460; IC-NEXT:    store ptr [[TMP20]], ptr [[__FIRST_ADDR_I_I]], align 461; IC-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 462; IC-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP0]], align 463; IC-NEXT:    [[TMP23:%.*]] = icmp eq i32 [[TMP21]], [[TMP22]]64; IC-NEXT:    br i1 [[TMP23]], label [[BB7_I_I:%.*]], label [[BB8_I_I:%.*]]65; IC:       bb7.i.i:66; IC-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 467; IC-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]68; IC:       bb8.i.i:69; IC-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 470; IC-NEXT:    [[TMP26:%.*]] = getelementptr i8, ptr [[TMP25]], i32 471; IC-NEXT:    store ptr [[TMP26]], ptr [[__FIRST_ADDR_I_I]], align 472; IC-NEXT:    [[TMP27:%.*]] = load i32, ptr [[TMP26]], align 473; IC-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP0]], align 474; IC-NEXT:    [[TMP29:%.*]] = icmp eq i32 [[TMP27]], [[TMP28]]75; IC-NEXT:    br i1 [[TMP29]], label [[BB10_I_I:%.*]], label [[BB11_I_I:%.*]]76; IC:       bb10.i.i:77; IC-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 478; IC-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]79; IC:       bb11.i.i:80; IC-NEXT:    [[TMP31:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 481; IC-NEXT:    [[TMP32:%.*]] = getelementptr i8, ptr [[TMP31]], i32 482; IC-NEXT:    store ptr [[TMP32]], ptr [[__FIRST_ADDR_I_I]], align 483; IC-NEXT:    [[TMP33:%.*]] = add nsw i32 [[__TRIP_COUNT_0_I_I:%.*]], -184; IC-NEXT:    br label [[BB12_I_I]]85; IC:       bb12.i.i:86; IC-NEXT:    [[__TRIP_COUNT_0_I_I]] = phi i32 [ [[TMP7]], [[ENTRY:%.*]] ], [ [[TMP33]], [[BB11_I_I]] ]87; IC-NEXT:    [[TMP34:%.*]] = icmp sgt i32 [[__TRIP_COUNT_0_I_I]], 088; IC-NEXT:    br i1 [[TMP34]], label [[BB_I_I:%.*]], label [[BB13_I_I:%.*]]89; IC:       bb13.i.i:90; IC-NEXT:    [[TMP35:%.*]] = load ptr, ptr [[__LAST_ADDR_I_I]], align 491; IC-NEXT:    [[TMP36:%.*]] = ptrtoint ptr [[TMP35]] to i3292; IC-NEXT:    [[TMP37:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 493; IC-NEXT:    [[TMP38:%.*]] = ptrtoint ptr [[TMP37]] to i3294; IC-NEXT:    [[TMP39:%.*]] = sub i32 [[TMP36]], [[TMP38]]95; IC-NEXT:    [[TMP40:%.*]] = ashr i32 [[TMP39]], 296; IC-NEXT:    switch i32 [[TMP40]], label [[BB26_I_I:%.*]] [97; IC-NEXT:      i32 1, label [[BB22_I_I:%.*]]98; IC-NEXT:      i32 2, label [[BB18_I_I:%.*]]99; IC-NEXT:      i32 3, label [[BB14_I_I:%.*]]100; IC-NEXT:    ]101; IC:       bb14.i.i:102; IC-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4103; IC-NEXT:    [[TMP42:%.*]] = load i32, ptr [[TMP41]], align 4104; IC-NEXT:    [[TMP43:%.*]] = load i32, ptr [[TMP0]], align 4105; IC-NEXT:    [[TMP44:%.*]] = icmp eq i32 [[TMP42]], [[TMP43]]106; IC-NEXT:    br i1 [[TMP44]], label [[BB16_I_I:%.*]], label [[BB17_I_I:%.*]]107; IC:       bb16.i.i:108; IC-NEXT:    [[TMP45:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4109; IC-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]110; IC:       bb17.i.i:111; IC-NEXT:    [[TMP46:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4112; IC-NEXT:    [[TMP47:%.*]] = getelementptr i8, ptr [[TMP46]], i32 4113; IC-NEXT:    store ptr [[TMP47]], ptr [[__FIRST_ADDR_I_I]], align 4114; IC-NEXT:    br label [[BB18_I_I]]115; IC:       bb18.i.i:116; IC-NEXT:    [[TMP48:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4117; IC-NEXT:    [[TMP49:%.*]] = load i32, ptr [[TMP48]], align 4118; IC-NEXT:    [[TMP50:%.*]] = load i32, ptr [[TMP0]], align 4119; IC-NEXT:    [[TMP51:%.*]] = icmp eq i32 [[TMP49]], [[TMP50]]120; IC-NEXT:    br i1 [[TMP51]], label [[BB20_I_I:%.*]], label [[BB21_I_I:%.*]]121; IC:       bb20.i.i:122; IC-NEXT:    [[TMP52:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4123; IC-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]124; IC:       bb21.i.i:125; IC-NEXT:    [[TMP53:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4126; IC-NEXT:    [[TMP54:%.*]] = getelementptr i8, ptr [[TMP53]], i32 4127; IC-NEXT:    store ptr [[TMP54]], ptr [[__FIRST_ADDR_I_I]], align 4128; IC-NEXT:    br label [[BB22_I_I]]129; IC:       bb22.i.i:130; IC-NEXT:    [[TMP55:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4131; IC-NEXT:    [[TMP56:%.*]] = load i32, ptr [[TMP55]], align 4132; IC-NEXT:    [[TMP57:%.*]] = load i32, ptr [[TMP0]], align 4133; IC-NEXT:    [[TMP58:%.*]] = icmp eq i32 [[TMP56]], [[TMP57]]134; IC-NEXT:    br i1 [[TMP58]], label [[BB24_I_I:%.*]], label [[BB25_I_I:%.*]]135; IC:       bb24.i.i:136; IC-NEXT:    [[TMP59:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4137; IC-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]138; IC:       bb25.i.i:139; IC-NEXT:    [[TMP60:%.*]] = load ptr, ptr [[__FIRST_ADDR_I_I]], align 4140; IC-NEXT:    [[TMP61:%.*]] = getelementptr i8, ptr [[TMP60]], i32 4141; IC-NEXT:    store ptr [[TMP61]], ptr [[__FIRST_ADDR_I_I]], align 4142; IC-NEXT:    br label [[BB26_I_I]]143; IC:       bb26.i.i:144; IC-NEXT:    [[TMP62:%.*]] = load ptr, ptr [[__LAST_ADDR_I_I]], align 4145; IC-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]146; IC:       _ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit:147; IC-NEXT:    [[DOT0_0_I_I:%.*]] = phi ptr [ [[TMP62]], [[BB26_I_I]] ], [ [[TMP59]], [[BB24_I_I]] ], [ [[TMP52]], [[BB20_I_I]] ], [ [[TMP45]], [[BB16_I_I]] ], [ [[TMP30]], [[BB10_I_I]] ], [ [[TMP24]], [[BB7_I_I]] ], [ [[TMP18]], [[BB4_I_I]] ], [ [[TMP12]], [[BB1_I_I]] ]148; IC-NEXT:    br label [[RETURN:%.*]]149; IC:       return:150; IC-NEXT:    ret ptr [[DOT0_0_I_I]]151;152; IC_SROA-LABEL: @_Z3fooRSt6vectorIiSaIiEE(153; IC_SROA-NEXT:  entry:154; IC_SROA-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr [[X:%.*]], i32 4155; IC_SROA-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4156; IC_SROA-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[X]], align 4157; IC_SROA-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[TMP1]] to i32158; IC_SROA-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[TMP2]] to i32159; IC_SROA-NEXT:    [[TMP5:%.*]] = sub i32 [[TMP3]], [[TMP4]]160; IC_SROA-NEXT:    [[TMP6:%.*]] = ashr i32 [[TMP5]], 4161; IC_SROA-NEXT:    br label [[BB12_I_I:%.*]]162; IC_SROA:       bb.i.i:163; IC_SROA-NEXT:    [[TMP7:%.*]] = load i32, ptr [[__FIRST_ADDR_I_I_SROA_0_0:%.*]], align 4164; IC_SROA-NEXT:    [[TMP8:%.*]] = icmp eq i32 [[TMP7]], 42165; IC_SROA-NEXT:    br i1 [[TMP8]], label [[BB1_I_I:%.*]], label [[BB2_I_I:%.*]]166; IC_SROA:       bb1.i.i:167; IC_SROA-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT:%.*]]168; IC_SROA:       bb2.i.i:169; IC_SROA-NEXT:    [[TMP9:%.*]] = getelementptr i8, ptr [[__FIRST_ADDR_I_I_SROA_0_0]], i32 4170; IC_SROA-NEXT:    [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 4171; IC_SROA-NEXT:    [[TMP11:%.*]] = icmp eq i32 [[TMP10]], 42172; IC_SROA-NEXT:    br i1 [[TMP11]], label [[BB4_I_I:%.*]], label [[BB5_I_I:%.*]]173; IC_SROA:       bb4.i.i:174; IC_SROA-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]175; IC_SROA:       bb5.i.i:176; IC_SROA-NEXT:    [[TMP12:%.*]] = getelementptr i8, ptr [[TMP9]], i32 4177; IC_SROA-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4178; IC_SROA-NEXT:    [[TMP14:%.*]] = icmp eq i32 [[TMP13]], 42179; IC_SROA-NEXT:    br i1 [[TMP14]], label [[BB7_I_I:%.*]], label [[BB8_I_I:%.*]]180; IC_SROA:       bb7.i.i:181; IC_SROA-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]182; IC_SROA:       bb8.i.i:183; IC_SROA-NEXT:    [[TMP15:%.*]] = getelementptr i8, ptr [[TMP12]], i32 4184; IC_SROA-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 4185; IC_SROA-NEXT:    [[TMP17:%.*]] = icmp eq i32 [[TMP16]], 42186; IC_SROA-NEXT:    br i1 [[TMP17]], label [[BB10_I_I:%.*]], label [[BB11_I_I:%.*]]187; IC_SROA:       bb10.i.i:188; IC_SROA-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]189; IC_SROA:       bb11.i.i:190; IC_SROA-NEXT:    [[TMP18:%.*]] = getelementptr i8, ptr [[TMP15]], i32 4191; IC_SROA-NEXT:    [[TMP19:%.*]] = add nsw i32 [[__TRIP_COUNT_0_I_I:%.*]], -1192; IC_SROA-NEXT:    br label [[BB12_I_I]]193; IC_SROA:       bb12.i.i:194; IC_SROA-NEXT:    [[__FIRST_ADDR_I_I_SROA_0_0]] = phi ptr [ [[TMP2]], [[ENTRY:%.*]] ], [ [[TMP18]], [[BB11_I_I]] ]195; IC_SROA-NEXT:    [[__TRIP_COUNT_0_I_I]] = phi i32 [ [[TMP6]], [[ENTRY]] ], [ [[TMP19]], [[BB11_I_I]] ]196; IC_SROA-NEXT:    [[TMP20:%.*]] = icmp sgt i32 [[__TRIP_COUNT_0_I_I]], 0197; IC_SROA-NEXT:    br i1 [[TMP20]], label [[BB_I_I:%.*]], label [[BB13_I_I:%.*]]198; IC_SROA:       bb13.i.i:199; IC_SROA-NEXT:    [[TMP21:%.*]] = ptrtoint ptr [[TMP1]] to i32200; IC_SROA-NEXT:    [[TMP22:%.*]] = ptrtoint ptr [[__FIRST_ADDR_I_I_SROA_0_0]] to i32201; IC_SROA-NEXT:    [[TMP23:%.*]] = sub i32 [[TMP21]], [[TMP22]]202; IC_SROA-NEXT:    [[TMP24:%.*]] = ashr i32 [[TMP23]], 2203; IC_SROA-NEXT:    switch i32 [[TMP24]], label [[BB26_I_I:%.*]] [204; IC_SROA-NEXT:      i32 1, label [[BB22_I_I:%.*]]205; IC_SROA-NEXT:      i32 2, label [[BB18_I_I:%.*]]206; IC_SROA-NEXT:      i32 3, label [[BB14_I_I:%.*]]207; IC_SROA-NEXT:    ]208; IC_SROA:       bb14.i.i:209; IC_SROA-NEXT:    [[TMP25:%.*]] = load i32, ptr [[__FIRST_ADDR_I_I_SROA_0_0]], align 4210; IC_SROA-NEXT:    [[TMP26:%.*]] = icmp eq i32 [[TMP25]], 42211; IC_SROA-NEXT:    br i1 [[TMP26]], label [[BB16_I_I:%.*]], label [[BB17_I_I:%.*]]212; IC_SROA:       bb16.i.i:213; IC_SROA-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]214; IC_SROA:       bb17.i.i:215; IC_SROA-NEXT:    [[TMP27:%.*]] = getelementptr i8, ptr [[__FIRST_ADDR_I_I_SROA_0_0]], i32 4216; IC_SROA-NEXT:    br label [[BB18_I_I]]217; IC_SROA:       bb18.i.i:218; IC_SROA-NEXT:    [[__FIRST_ADDR_I_I_SROA_0_1:%.*]] = phi ptr [ [[__FIRST_ADDR_I_I_SROA_0_0]], [[BB13_I_I]] ], [ [[TMP27]], [[BB17_I_I]] ]219; IC_SROA-NEXT:    [[TMP28:%.*]] = load i32, ptr [[__FIRST_ADDR_I_I_SROA_0_1]], align 4220; IC_SROA-NEXT:    [[TMP29:%.*]] = icmp eq i32 [[TMP28]], 42221; IC_SROA-NEXT:    br i1 [[TMP29]], label [[BB20_I_I:%.*]], label [[BB21_I_I:%.*]]222; IC_SROA:       bb20.i.i:223; IC_SROA-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]224; IC_SROA:       bb21.i.i:225; IC_SROA-NEXT:    [[TMP30:%.*]] = getelementptr i8, ptr [[__FIRST_ADDR_I_I_SROA_0_1]], i32 4226; IC_SROA-NEXT:    br label [[BB22_I_I]]227; IC_SROA:       bb22.i.i:228; IC_SROA-NEXT:    [[__FIRST_ADDR_I_I_SROA_0_2:%.*]] = phi ptr [ [[__FIRST_ADDR_I_I_SROA_0_0]], [[BB13_I_I]] ], [ [[TMP30]], [[BB21_I_I]] ]229; IC_SROA-NEXT:    [[TMP31:%.*]] = load i32, ptr [[__FIRST_ADDR_I_I_SROA_0_2]], align 4230; IC_SROA-NEXT:    [[TMP32:%.*]] = icmp eq i32 [[TMP31]], 42231; IC_SROA-NEXT:    br i1 [[TMP32]], label [[BB24_I_I:%.*]], label [[BB25_I_I:%.*]]232; IC_SROA:       bb24.i.i:233; IC_SROA-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]234; IC_SROA:       bb25.i.i:235; IC_SROA-NEXT:    [[TMP33:%.*]] = getelementptr i8, ptr [[__FIRST_ADDR_I_I_SROA_0_2]], i32 4236; IC_SROA-NEXT:    br label [[BB26_I_I]]237; IC_SROA:       bb26.i.i:238; IC_SROA-NEXT:    br label [[_ZST4FINDIN9__GNU_CXX17__NORMAL_ITERATORIPIST6VECTORIISAIIEEEEIET_S7_S7_RKT0__EXIT]]239; IC_SROA:       _ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit:240; IC_SROA-NEXT:    [[DOT0_0_I_I:%.*]] = phi ptr [ [[TMP1]], [[BB26_I_I]] ], [ [[__FIRST_ADDR_I_I_SROA_0_2]], [[BB24_I_I]] ], [ [[__FIRST_ADDR_I_I_SROA_0_1]], [[BB20_I_I]] ], [ [[__FIRST_ADDR_I_I_SROA_0_0]], [[BB16_I_I]] ], [ [[TMP15]], [[BB10_I_I]] ], [ [[TMP12]], [[BB7_I_I]] ], [ [[TMP9]], [[BB4_I_I]] ], [ [[__FIRST_ADDR_I_I_SROA_0_0]], [[BB1_I_I]] ]241; IC_SROA-NEXT:    br label [[RETURN:%.*]]242; IC_SROA:       return:243; IC_SROA-NEXT:    ret ptr [[DOT0_0_I_I]]244;245entry:246  %0 = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"247  %__first_addr.i.i = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"248  %__last_addr.i.i = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"249  %unnamed_arg.i = alloca %"struct.std::bidirectional_iterator_tag", align 8250  %1 = alloca %"struct.std::bidirectional_iterator_tag"251  %__first_addr.i = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"252  %2 = alloca %"struct.std::bidirectional_iterator_tag"253  %3 = alloca %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >"254  %4 = alloca i32255  %"alloca point" = bitcast i32 0 to i32256  store i32 42, ptr %4, align 4257  %5 = getelementptr %"struct.std::vector<int,std::allocator<int> >", ptr %X, i32 0, i32 0258  %6 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >", ptr %5, i32 0, i32 0259  %7 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl", ptr %6, i32 0, i32 1260  %8 = load ptr, ptr %7, align 4261  %9 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %3, i32 0, i32 0262  store ptr %8, ptr %9, align 4263  %10 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %3, i32 0, i32 0264  %11 = load ptr, ptr %10, align 4265  %tmp2.i = ptrtoint ptr %11 to i32266  %tmp1.i = inttoptr i32 %tmp2.i to ptr267  %tmp3 = ptrtoint ptr %tmp1.i to i32268  %tmp2 = inttoptr i32 %tmp3 to ptr269  %12 = getelementptr %"struct.std::vector<int,std::allocator<int> >", ptr %X, i32 0, i32 0270  %13 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >", ptr %12, i32 0, i32 0271  %14 = getelementptr %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl", ptr %13, i32 0, i32 0272  %15 = load ptr, ptr %14, align 4273  %16 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %0, i32 0, i32 0274  store ptr %15, ptr %16, align 4275  %17 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %0, i32 0, i32 0276  %18 = load ptr, ptr %17, align 4277  %tmp2.i17 = ptrtoint ptr %18 to i32278  %tmp1.i18 = inttoptr i32 %tmp2.i17 to ptr279  %tmp8 = ptrtoint ptr %tmp1.i18 to i32280  %tmp6 = inttoptr i32 %tmp8 to ptr281  %19 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i, i32 0, i32 0282  store ptr %tmp6, ptr %19283  %20 = load i8, ptr %1, align 1284  %21 = or i8 %20, 0285  %22 = or i8 %21, 0286  %23 = or i8 %22, 0287  store i8 0, ptr %2, align 1288  %elt.i = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i, i32 0, i32 0289  %val.i = load ptr, ptr %elt.i290  call void @llvm.memcpy.p0.p0.i64(ptr %unnamed_arg.i, ptr %2, i64 1, i1 false)291  %24 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0292  store ptr %val.i, ptr %24293  %25 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__last_addr.i.i, i32 0, i32 0294  store ptr %tmp2, ptr %25295  %26 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__last_addr.i.i, i32 0, i32 0296  %27 = load ptr, ptr %26, align 4297  %28 = ptrtoint ptr %27 to i32298  %29 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0299  %30 = load ptr, ptr %29, align 4300  %31 = ptrtoint ptr %30 to i32301  %32 = sub i32 %28, %31302  %33 = ashr i32 %32, 2303  %34 = ashr i32 %33, 2304  br label %bb12.i.i305 306bb.i.i:                                           ; preds = %bb12.i.i307  %35 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0308  %36 = load ptr, ptr %35, align 4309  %37 = load i32, ptr %36, align 4310  %38 = load i32, ptr %4, align 4311  %39 = icmp eq i32 %37, %38312  %40 = zext i1 %39 to i8313  %toBool.i.i = icmp ne i8 %40, 0314  br i1 %toBool.i.i, label %bb1.i.i, label %bb2.i.i315 316bb1.i.i:                                          ; preds = %bb.i.i317  %41 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0318  %42 = load ptr, ptr %41, align 4319  br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit320 321bb2.i.i:                                          ; preds = %bb.i.i322  %43 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0323  %44 = load ptr, ptr %43, align 4324  %45 = getelementptr i32, ptr %44, i64 1325  %46 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0326  store ptr %45, ptr %46, align 4327  %47 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0328  %48 = load ptr, ptr %47, align 4329  %49 = load i32, ptr %48, align 4330  %50 = load i32, ptr %4, align 4331  %51 = icmp eq i32 %49, %50332  %52 = zext i1 %51 to i8333  %toBool3.i.i = icmp ne i8 %52, 0334  br i1 %toBool3.i.i, label %bb4.i.i, label %bb5.i.i335 336bb4.i.i:                                          ; preds = %bb2.i.i337  %53 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0338  %54 = load ptr, ptr %53, align 4339  br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit340 341bb5.i.i:                                          ; preds = %bb2.i.i342  %55 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0343  %56 = load ptr, ptr %55, align 4344  %57 = getelementptr i32, ptr %56, i64 1345  %58 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0346  store ptr %57, ptr %58, align 4347  %59 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0348  %60 = load ptr, ptr %59, align 4349  %61 = load i32, ptr %60, align 4350  %62 = load i32, ptr %4, align 4351  %63 = icmp eq i32 %61, %62352  %64 = zext i1 %63 to i8353  %toBool6.i.i = icmp ne i8 %64, 0354  br i1 %toBool6.i.i, label %bb7.i.i, label %bb8.i.i355 356bb7.i.i:                                          ; preds = %bb5.i.i357  %65 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0358  %66 = load ptr, ptr %65, align 4359  br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit360 361bb8.i.i:                                          ; preds = %bb5.i.i362  %67 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0363  %68 = load ptr, ptr %67, align 4364  %69 = getelementptr i32, ptr %68, i64 1365  %70 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0366  store ptr %69, ptr %70, align 4367  %71 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0368  %72 = load ptr, ptr %71, align 4369  %73 = load i32, ptr %72, align 4370  %74 = load i32, ptr %4, align 4371  %75 = icmp eq i32 %73, %74372  %76 = zext i1 %75 to i8373  %toBool9.i.i = icmp ne i8 %76, 0374  br i1 %toBool9.i.i, label %bb10.i.i, label %bb11.i.i375 376bb10.i.i:                                         ; preds = %bb8.i.i377  %77 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0378  %78 = load ptr, ptr %77, align 4379  br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit380 381bb11.i.i:                                         ; preds = %bb8.i.i382  %79 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0383  %80 = load ptr, ptr %79, align 4384  %81 = getelementptr i32, ptr %80, i64 1385  %82 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0386  store ptr %81, ptr %82, align 4387  %83 = sub i32 %__trip_count.0.i.i, 1388  br label %bb12.i.i389 390bb12.i.i:                                         ; preds = %bb11.i.i, %entry391  %__trip_count.0.i.i = phi i32 [ %34, %entry ], [ %83, %bb11.i.i ]392  %84 = icmp sgt i32 %__trip_count.0.i.i, 0393  br i1 %84, label %bb.i.i, label %bb13.i.i394 395bb13.i.i:                                         ; preds = %bb12.i.i396  %85 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__last_addr.i.i, i32 0, i32 0397  %86 = load ptr, ptr %85, align 4398  %87 = ptrtoint ptr %86 to i32399  %88 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0400  %89 = load ptr, ptr %88, align 4401  %90 = ptrtoint ptr %89 to i32402  %91 = sub i32 %87, %90403  %92 = ashr i32 %91, 2404  switch i32 %92, label %bb26.i.i [405  i32 1, label %bb22.i.i406  i32 2, label %bb18.i.i407  i32 3, label %bb14.i.i408  ]409 410bb14.i.i:                                         ; preds = %bb13.i.i411  %93 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0412  %94 = load ptr, ptr %93, align 4413  %95 = load i32, ptr %94, align 4414  %96 = load i32, ptr %4, align 4415  %97 = icmp eq i32 %95, %96416  %98 = zext i1 %97 to i8417  %toBool15.i.i = icmp ne i8 %98, 0418  br i1 %toBool15.i.i, label %bb16.i.i, label %bb17.i.i419 420bb16.i.i:                                         ; preds = %bb14.i.i421  %99 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0422  %100 = load ptr, ptr %99, align 4423  br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit424 425bb17.i.i:                                         ; preds = %bb14.i.i426  %101 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0427  %102 = load ptr, ptr %101, align 4428  %103 = getelementptr i32, ptr %102, i64 1429  %104 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0430  store ptr %103, ptr %104, align 4431  br label %bb18.i.i432 433bb18.i.i:                                         ; preds = %bb17.i.i, %bb13.i.i434  %105 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0435  %106 = load ptr, ptr %105, align 4436  %107 = load i32, ptr %106, align 4437  %108 = load i32, ptr %4, align 4438  %109 = icmp eq i32 %107, %108439  %110 = zext i1 %109 to i8440  %toBool19.i.i = icmp ne i8 %110, 0441  br i1 %toBool19.i.i, label %bb20.i.i, label %bb21.i.i442 443bb20.i.i:                                         ; preds = %bb18.i.i444  %111 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0445  %112 = load ptr, ptr %111, align 4446  br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit447 448bb21.i.i:                                         ; preds = %bb18.i.i449  %113 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0450  %114 = load ptr, ptr %113, align 4451  %115 = getelementptr i32, ptr %114, i64 1452  %116 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0453  store ptr %115, ptr %116, align 4454  br label %bb22.i.i455 456bb22.i.i:                                         ; preds = %bb21.i.i, %bb13.i.i457  %117 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0458  %118 = load ptr, ptr %117, align 4459  %119 = load i32, ptr %118, align 4460  %120 = load i32, ptr %4, align 4461  %121 = icmp eq i32 %119, %120462  %122 = zext i1 %121 to i8463  %toBool23.i.i = icmp ne i8 %122, 0464  br i1 %toBool23.i.i, label %bb24.i.i, label %bb25.i.i465 466bb24.i.i:                                         ; preds = %bb22.i.i467  %123 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0468  %124 = load ptr, ptr %123, align 4469  br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit470 471bb25.i.i:                                         ; preds = %bb22.i.i472  %125 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0473  %126 = load ptr, ptr %125, align 4474  %127 = getelementptr i32, ptr %126, i64 1475  %128 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__first_addr.i.i, i32 0, i32 0476  store ptr %127, ptr %128, align 4477  br label %bb26.i.i478 479bb26.i.i:                                         ; preds = %bb25.i.i, %bb13.i.i480  %129 = getelementptr %"struct.__gnu_cxx::__normal_iterator<int*,std::vector<int, std::allocator<int> > >", ptr %__last_addr.i.i, i32 0, i32 0481  %130 = load ptr, ptr %129, align 4482  br label %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit483 484_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit: ; preds = %bb26.i.i, %bb24.i.i, %bb20.i.i, %bb16.i.i, %bb10.i.i, %bb7.i.i, %bb4.i.i, %bb1.i.i485  %.0.0.i.i = phi ptr [ %130, %bb26.i.i ], [ %124, %bb24.i.i ], [ %112, %bb20.i.i ], [ %100, %bb16.i.i ], [ %78, %bb10.i.i ], [ %66, %bb7.i.i ], [ %54, %bb4.i.i ], [ %42, %bb1.i.i ]486  %tmp2.i.i = ptrtoint ptr %.0.0.i.i to i32487  %tmp1.i.i = inttoptr i32 %tmp2.i.i to ptr488  %tmp4.i = ptrtoint ptr %tmp1.i.i to i32489  %tmp3.i = inttoptr i32 %tmp4.i to ptr490  %tmp8.i = ptrtoint ptr %tmp3.i to i32491  %tmp6.i = inttoptr i32 %tmp8.i to ptr492  %tmp12 = ptrtoint ptr %tmp6.i to i32493  %tmp10 = inttoptr i32 %tmp12 to ptr494  %tmp16 = ptrtoint ptr %tmp10 to i32495  br label %return496 497return:                                           ; preds = %_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_.exit498  %tmp14 = inttoptr i32 %tmp16 to ptr499  ret ptr %tmp14500}501 502declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) nounwind503