[llvm] r200621 - LoopVectorizer: Enable unrolling of conditional stores and the load/store

Tobias Grosser tobias at grosser.es
Mon Feb 3 14:42:53 PST 2014


On 02/03/2014 07:14 PM, Arnold Schwaighofer wrote:
> I cannot reproduce this regression on my side.
>
> On a Sandy-bridge machine I don’t see a regression for -O3 (without -mavx). The only difference between before/after in my test is that we unroll one vectorized loop by two:

It was run on an:

Intel(R) Xeon(R) CPU E5430  @ 2.66GHz

using plain 'clang -O3'.

I just reproduced the regression though it is rather close and there is 
some variance, but after several runs it becomes clear.

I attached the LLVM-IR before and after the commit. It is just a single 
change (and seems to be the one you have also seen).

I did not run the -mavx numbers and personally don't worry about this 
slight performance change (posted numbers just for information). In case 
you want to investigate yourself, I can give you SSH access on the machine.

Tobias
-------------- next part --------------
; ModuleID = 'test-suite/SingleSource/UnitTests/Vectorizer/gcc-loops.cpp'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::ios_base::Init" = type { i8 }
%struct.A = type { [1024 x i32] }
%"class.std::basic_ostream" = type { i32 (...)**, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", %"class.std::basic_ostream"*, i8, i8, %"class.std::basic_streambuf"*, %"class.std::ctype"*, %"class.std::num_put"*, %"class.std::num_get"* }
%"class.std::ios_base" = type { i32 (...)**, i64, i64, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"class.std::locale" }
%"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"class.std::ios_base"*, i32)*, i32, i32 }
%"struct.std::ios_base::_Words" = type { i8*, i64 }
%"class.std::locale" = type { %"class.std::locale::_Impl"* }
%"class.std::locale::_Impl" = type { i32, %"class.std::locale::facet"**, i64, %"class.std::locale::facet"**, i8** }
%"class.std::locale::facet" = type { i32 (...)**, i32 }
%"class.std::basic_streambuf" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"class.std::locale" }
%"class.std::ctype" = type { [12 x i8], %struct.__locale_struct*, i8, i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8 }
%struct.__locale_struct = type { [13 x %struct.__locale_data*], i16*, i32*, i32*, [13 x i8*] }
%struct.__locale_data = type opaque
%"class.std::num_put" = type { [12 x i8], [4 x i8] }
%"class.std::num_get" = type { [12 x i8], [4 x i8] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int> >::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int> >::_Vector_impl" = type { i32*, i32*, i32* }
%class.Timer = type { i8*, i8, %struct.timeval, %struct.timeval }
%struct.timeval = type { i64, i64 }
%struct.timezone = type { i32, i32 }

@_ZStL8__ioinit = internal global %"class.std::ios_base::Init" zeroinitializer, align 1
@__dso_handle = external global i8
@usa = global [1024 x i16] zeroinitializer, align 16
@sa = global [1024 x i16] zeroinitializer, align 16
@sb = global [1024 x i16] zeroinitializer, align 16
@sc = global [1024 x i16] zeroinitializer, align 16
@ua = global [1024 x i32] zeroinitializer, align 16
@ia = global [1024 x i32] zeroinitializer, align 16
@ib = global [1024 x i32] zeroinitializer, align 16
@ic = global [1024 x i32] zeroinitializer, align 16
@ub = global [1024 x i32] zeroinitializer, align 16
@uc = global [1024 x i32] zeroinitializer, align 16
@fa = global [1024 x float] zeroinitializer, align 16
@fb = global [1024 x float] zeroinitializer, align 16
@da = global [1024 x float] zeroinitializer, align 16
@db = global [1024 x float] zeroinitializer, align 16
@dc = global [1024 x float] zeroinitializer, align 16
@dd = global [1024 x float] zeroinitializer, align 16
@dj = global [1024 x i32] zeroinitializer, align 16
@s = global %struct.A zeroinitializer, align 4
@a = global [2048 x i32] zeroinitializer, align 16
@b = global [2048 x i32] zeroinitializer, align 16
@c = global [2048 x i32] zeroinitializer, align 16
@d = global [2048 x i32] zeroinitializer, align 16
@G = global [32 x [1024 x i32]] zeroinitializer, align 16
@.str = private unnamed_addr constant [9 x i8] c"Example1\00", align 1
@.str1 = private unnamed_addr constant [10 x i8] c"Example2a\00", align 1
@.str2 = private unnamed_addr constant [10 x i8] c"Example2b\00", align 1
@.str3 = private unnamed_addr constant [9 x i8] c"Example3\00", align 1
@.str4 = private unnamed_addr constant [10 x i8] c"Example4a\00", align 1
@.str5 = private unnamed_addr constant [10 x i8] c"Example4b\00", align 1
@.str6 = private unnamed_addr constant [10 x i8] c"Example4c\00", align 1
@.str7 = private unnamed_addr constant [9 x i8] c"Example7\00", align 1
@.str8 = private unnamed_addr constant [9 x i8] c"Example8\00", align 1
@.str9 = private unnamed_addr constant [9 x i8] c"Example9\00", align 1
@.str10 = private unnamed_addr constant [11 x i8] c"Example10a\00", align 1
@.str11 = private unnamed_addr constant [11 x i8] c"Example10b\00", align 1
@.str12 = private unnamed_addr constant [10 x i8] c"Example11\00", align 1
@.str13 = private unnamed_addr constant [10 x i8] c"Example12\00", align 1
@.str14 = private unnamed_addr constant [10 x i8] c"Example23\00", align 1
@.str15 = private unnamed_addr constant [10 x i8] c"Example24\00", align 1
@.str16 = private unnamed_addr constant [10 x i8] c"Example25\00", align 1
@_ZSt4cout = external global %"class.std::basic_ostream"
@.str17 = private unnamed_addr constant [11 x i8] c"Results: (\00", align 1
@.str18 = private unnamed_addr constant [3 x i8] c"):\00", align 1
@.str19 = private unnamed_addr constant [2 x i8] c" \00", align 1
@.str20 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@.str22 = private unnamed_addr constant [3 x i8] c", \00", align 1
@.str23 = private unnamed_addr constant [8 x i8] c", msec\0A\00", align 1
@llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_a }]

declare void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"*) #0

declare void @_ZNSt8ios_base4InitD1Ev(%"class.std::ios_base::Init"*) #0

; Function Attrs: nounwind
declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*) #1

; Function Attrs: noinline nounwind uwtable
define void @_Z8example1v() #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %index
  %1 = bitcast i32* %0 to <4 x i32>*
  %wide.load = load <4 x i32>* %1, align 16
  %.sum6 = or i64 %index, 4
  %2 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum6
  %3 = bitcast i32* %2 to <4 x i32>*
  %wide.load3 = load <4 x i32>* %3, align 16
  %4 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %index
  %5 = bitcast i32* %4 to <4 x i32>*
  %wide.load4 = load <4 x i32>* %5, align 16
  %.sum7 = or i64 %index, 4
  %6 = getelementptr [2048 x i32]* @c, i64 0, i64 %.sum7
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load5 = load <4 x i32>* %7, align 16
  %8 = add nsw <4 x i32> %wide.load4, %wide.load
  %9 = add nsw <4 x i32> %wide.load5, %wide.load3
  %10 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %11 = bitcast i32* %10 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %11, align 16
  %.sum8 = or i64 %index, 4
  %12 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum8
  %13 = bitcast i32* %12 to <4 x i32>*
  store <4 x i32> %9, <4 x i32>* %13, align 16
  %index.next = add i64 %index, 8
  %14 = icmp eq i64 %index.next, 256
  br i1 %14, label %middle.block, label %vector.body, !llvm.loop !1

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example2aii(i32 %n, i32 %x) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %broadcast.splatinsert3 = insertelement <4 x i32> undef, i32 %x, i32 0
  %broadcast.splat4 = shufflevector <4 x i32> %broadcast.splatinsert3, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %5 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %index
  %6 = bitcast i32* %5 to <4 x i32>*
  store <4 x i32> %broadcast.splat4, <4 x i32>* %6, align 16
  %.sum7 = or i64 %index, 4
  %7 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum7
  %8 = bitcast i32* %7 to <4 x i32>*
  store <4 x i32> %broadcast.splat4, <4 x i32>* %8, align 16
  %index.next = add i64 %index, 8
  %9 = icmp eq i64 %index.next, %n.vec
  br i1 %9, label %middle.block, label %vector.body, !llvm.loop !4

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %10 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %indvars.iv
  store i32 %x, i32* %10, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %n
  br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !9

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example2bii(i32 %n, i32 %x) #2 {
  %1 = icmp eq i32 %n, 0
  br i1 %1, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %cast.crd = trunc i64 %n.vec to i32
  %rev.ind.end = sub i32 %n, %cast.crd
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %5 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %index
  %6 = bitcast i32* %5 to <4 x i32>*
  %wide.load = load <4 x i32>* %6, align 16
  %.sum12 = or i64 %index, 4
  %7 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum12
  %8 = bitcast i32* %7 to <4 x i32>*
  %wide.load9 = load <4 x i32>* %8, align 16
  %9 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %index
  %10 = bitcast i32* %9 to <4 x i32>*
  %wide.load10 = load <4 x i32>* %10, align 16
  %.sum13 = or i64 %index, 4
  %11 = getelementptr [2048 x i32]* @c, i64 0, i64 %.sum13
  %12 = bitcast i32* %11 to <4 x i32>*
  %wide.load11 = load <4 x i32>* %12, align 16
  %13 = and <4 x i32> %wide.load10, %wide.load
  %14 = and <4 x i32> %wide.load11, %wide.load9
  %15 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %16 = bitcast i32* %15 to <4 x i32>*
  store <4 x i32> %13, <4 x i32>* %16, align 16
  %.sum14 = or i64 %index, 4
  %17 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum14
  %18 = bitcast i32* %17 to <4 x i32>*
  store <4 x i32> %14, <4 x i32>* %18, align 16
  %index.next = add i64 %index, 8
  %19 = icmp eq i64 %index.next, %n.vec
  br i1 %19, label %middle.block, label %vector.body, !llvm.loop !10

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %resume.val3 = phi i32 [ %n, %.lr.ph.preheader ], [ %rev.ind.end, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %.01 = phi i32 [ %20, %.lr.ph ], [ %resume.val3, %middle.block ]
  %20 = add nsw i32 %.01, -1
  %21 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %indvars.iv
  %22 = load i32* %21, align 4, !tbaa !5
  %23 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %indvars.iv
  %24 = load i32* %23, align 4, !tbaa !5
  %25 = and i32 %24, %22
  %26 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
  store i32 %25, i32* %26, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %27 = icmp eq i32 %20, 0
  br i1 %27, label %._crit_edge, label %.lr.ph, !llvm.loop !11

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example3iPiS_(i32 %n, i32* noalias nocapture %p, i32* noalias nocapture readonly %q) #2 {
  %1 = icmp eq i32 %n, 0
  br i1 %1, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %ptr.ind.end = getelementptr i32* %q, i64 %n.vec
  %ptr.ind.end8 = getelementptr i32* %p, i64 %n.vec
  %cast.crd = trunc i64 %n.vec to i32
  %rev.ind.end = sub i32 %n, %cast.crd
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %next.gep = getelementptr i32* %q, i64 %index
  %next.gep33 = getelementptr i32* %p, i64 %index
  %5 = bitcast i32* %next.gep to <4 x i32>*
  %wide.load = load <4 x i32>* %5, align 16
  %next.gep.sum77 = or i64 %index, 4
  %6 = getelementptr i32* %q, i64 %next.gep.sum77
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load58 = load <4 x i32>* %7, align 16
  %8 = bitcast i32* %next.gep33 to <4 x i32>*
  store <4 x i32> %wide.load, <4 x i32>* %8, align 16
  %next.gep33.sum82 = or i64 %index, 4
  %9 = getelementptr i32* %p, i64 %next.gep33.sum82
  %10 = bitcast i32* %9 to <4 x i32>*
  store <4 x i32> %wide.load58, <4 x i32>* %10, align 16
  %index.next = add i64 %index, 8
  %11 = icmp eq i64 %index.next, %n.vec
  br i1 %11, label %middle.block, label %vector.body, !llvm.loop !12

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i32* [ %q, %.lr.ph.preheader ], [ %ptr.ind.end, %vector.body ]
  %resume.val7 = phi i32* [ %p, %.lr.ph.preheader ], [ %ptr.ind.end8, %vector.body ]
  %resume.val9 = phi i32 [ %n, %.lr.ph.preheader ], [ %rev.ind.end, %vector.body ]
  %new.indc.resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %new.indc.resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %.05 = phi i32* [ %13, %.lr.ph ], [ %resume.val, %middle.block ]
  %.014 = phi i32* [ %15, %.lr.ph ], [ %resume.val7, %middle.block ]
  %.023 = phi i32 [ %12, %.lr.ph ], [ %resume.val9, %middle.block ]
  %12 = add nsw i32 %.023, -1
  %13 = getelementptr inbounds i32* %.05, i64 1
  %14 = load i32* %.05, align 16, !tbaa !5
  %15 = getelementptr inbounds i32* %.014, i64 1
  store i32 %14, i32* %.014, align 16, !tbaa !5
  %16 = icmp eq i32 %12, 0
  br i1 %16, label %._crit_edge, label %.lr.ph, !llvm.loop !13

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example4aiPiS_(i32 %n, i32* noalias nocapture %p, i32* noalias nocapture readonly %q) #2 {
  %1 = icmp eq i32 %n, 0
  br i1 %1, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %ptr.ind.end = getelementptr i32* %q, i64 %n.vec
  %ptr.ind.end7 = getelementptr i32* %p, i64 %n.vec
  %cast.crd = trunc i64 %n.vec to i32
  %rev.ind.end = sub i32 %n, %cast.crd
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %next.gep = getelementptr i32* %q, i64 %index
  %next.gep32 = getelementptr i32* %p, i64 %index
  %5 = bitcast i32* %next.gep to <4 x i32>*
  %wide.load = load <4 x i32>* %5, align 16
  %next.gep.sum76 = or i64 %index, 4
  %6 = getelementptr i32* %q, i64 %next.gep.sum76
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load57 = load <4 x i32>* %7, align 16
  %8 = add nsw <4 x i32> %wide.load, <i32 5, i32 5, i32 5, i32 5>
  %9 = add nsw <4 x i32> %wide.load57, <i32 5, i32 5, i32 5, i32 5>
  %10 = bitcast i32* %next.gep32 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %10, align 16
  %next.gep32.sum81 = or i64 %index, 4
  %11 = getelementptr i32* %p, i64 %next.gep32.sum81
  %12 = bitcast i32* %11 to <4 x i32>*
  store <4 x i32> %9, <4 x i32>* %12, align 16
  %index.next = add i64 %index, 8
  %13 = icmp eq i64 %index.next, %n.vec
  br i1 %13, label %middle.block, label %vector.body, !llvm.loop !14

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i32* [ %q, %.lr.ph.preheader ], [ %ptr.ind.end, %vector.body ]
  %resume.val6 = phi i32* [ %p, %.lr.ph.preheader ], [ %ptr.ind.end7, %vector.body ]
  %resume.val8 = phi i32 [ %n, %.lr.ph.preheader ], [ %rev.ind.end, %vector.body ]
  %new.indc.resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %new.indc.resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %.05 = phi i32* [ %15, %.lr.ph ], [ %resume.val, %middle.block ]
  %.014 = phi i32* [ %18, %.lr.ph ], [ %resume.val6, %middle.block ]
  %.023 = phi i32 [ %14, %.lr.ph ], [ %resume.val8, %middle.block ]
  %14 = add nsw i32 %.023, -1
  %15 = getelementptr inbounds i32* %.05, i64 1
  %16 = load i32* %.05, align 16, !tbaa !5
  %17 = add nsw i32 %16, 5
  %18 = getelementptr inbounds i32* %.014, i64 1
  store i32 %17, i32* %.014, align 16, !tbaa !5
  %19 = icmp eq i32 %14, 0
  br i1 %19, label %._crit_edge, label %.lr.ph, !llvm.loop !15

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example4biPiS_(i32 %n, i32* noalias nocapture readnone %p, i32* noalias nocapture readnone %q) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %5 = or i64 %index, 1
  %6 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %5
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load = load <4 x i32>* %7, align 4
  %.sum11 = or i64 %index, 5
  %8 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum11
  %9 = bitcast i32* %8 to <4 x i32>*
  %wide.load3 = load <4 x i32>* %9, align 4
  %10 = or i64 %index, 3
  %11 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %10
  %12 = bitcast i32* %11 to <4 x i32>*
  %wide.load4 = load <4 x i32>* %12, align 4
  %.sum812 = or i64 %index, 7
  %13 = getelementptr [2048 x i32]* @c, i64 0, i64 %.sum812
  %14 = bitcast i32* %13 to <4 x i32>*
  %wide.load5 = load <4 x i32>* %14, align 4
  %15 = add nsw <4 x i32> %wide.load4, %wide.load
  %16 = add nsw <4 x i32> %wide.load5, %wide.load3
  %17 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %18 = bitcast i32* %17 to <4 x i32>*
  store <4 x i32> %15, <4 x i32>* %18, align 16
  %.sum910 = or i64 %index, 4
  %19 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum910
  %20 = bitcast i32* %19 to <4 x i32>*
  store <4 x i32> %16, <4 x i32>* %20, align 16
  %index.next = add i64 %index, 8
  %21 = icmp eq i64 %index.next, %n.vec
  br i1 %21, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %22 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %indvars.iv.next
  %23 = load i32* %22, align 4, !tbaa !5
  %24 = add nsw i64 %indvars.iv, 3
  %25 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %24
  %26 = load i32* %25, align 4, !tbaa !5
  %27 = add nsw i32 %26, %23
  %28 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
  store i32 %27, i32* %28, align 4, !tbaa !5
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %n
  br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !17

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example4ciPiS_(i32 %n, i32* noalias nocapture readnone %p, i32* noalias nocapture readnone %q) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934588
  %cmp.zero = icmp eq i64 %n.vec, 0
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %5 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %6 = bitcast i32* %5 to <4 x i32>*
  %wide.load = load <4 x i32>* %6, align 16
  %7 = icmp sgt <4 x i32> %wide.load, <i32 4, i32 4, i32 4, i32 4>
  %8 = select <4 x i1> %7, <4 x i32> <i32 4, i32 4, i32 4, i32 4>, <4 x i32> zeroinitializer
  %9 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %index
  %10 = bitcast i32* %9 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %10, align 16
  %index.next = add i64 %index, 4
  %11 = icmp eq i64 %index.next, %n.vec
  br i1 %11, label %middle.block, label %vector.body, !llvm.loop !18

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %12 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
  %13 = load i32* %12, align 4, !tbaa !5
  %14 = icmp sgt i32 %13, 4
  %15 = select i1 %14, i32 4, i32 0
  %16 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %indvars.iv
  store i32 %15, i32* %16, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %n
  br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !19

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example5iP1A(i32 %n, %struct.A* nocapture %s) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %5 = getelementptr inbounds %struct.A* %s, i64 0, i32 0, i64 %index
  %6 = bitcast i32* %5 to <4 x i32>*
  store <4 x i32> <i32 5, i32 5, i32 5, i32 5>, <4 x i32>* %6, align 4
  %.sum5 = or i64 %index, 4
  %7 = getelementptr %struct.A* %s, i64 0, i32 0, i64 %.sum5
  %8 = bitcast i32* %7 to <4 x i32>*
  store <4 x i32> <i32 5, i32 5, i32 5, i32 5>, <4 x i32>* %8, align 4
  %index.next = add i64 %index, 8
  %9 = icmp eq i64 %index.next, %n.vec
  br i1 %9, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %10 = getelementptr inbounds %struct.A* %s, i64 0, i32 0, i64 %indvars.iv
  store i32 5, i32* %10, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %n
  br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !21

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example7i(i32 %x) #2 {
  %1 = sext i32 %x to i64
  %scevgep = getelementptr [2048 x i32]* @b, i64 0, i64 %1
  %scevgep2 = bitcast i32* %scevgep to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* bitcast ([2048 x i32]* @a to i8*), i8* %scevgep2, i64 4096, i32 4, i1 false)
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example8i(i32 %x) #2 {
  br label %vector.ph

vector.ph:                                        ; preds = %0, %middle.block
  %indvars.iv3 = phi i64 [ 0, %0 ], [ %indvars.iv.next4, %middle.block ]
  %broadcast.splatinsert7 = insertelement <4 x i32> undef, i32 %x, i32 0
  %broadcast.splat8 = shufflevector <4 x i32> %broadcast.splatinsert7, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %1 = getelementptr inbounds [32 x [1024 x i32]]* @G, i64 0, i64 %indvars.iv3, i64 %index
  %2 = bitcast i32* %1 to <4 x i32>*
  store <4 x i32> %broadcast.splat8, <4 x i32>* %2, align 16
  %.sum9 = or i64 %index, 4
  %3 = getelementptr [32 x [1024 x i32]]* @G, i64 0, i64 %indvars.iv3, i64 %.sum9
  %4 = bitcast i32* %3 to <4 x i32>*
  store <4 x i32> %broadcast.splat8, <4 x i32>* %4, align 16
  %index.next = add i64 %index, 8
  %5 = icmp eq i64 %index.next, 1024
  br i1 %5, label %middle.block, label %vector.body, !llvm.loop !22

middle.block:                                     ; preds = %vector.body
  %indvars.iv.next4 = add nuw nsw i64 %indvars.iv3, 1
  %exitcond5 = icmp eq i64 %indvars.iv.next4, 32
  br i1 %exitcond5, label %6, label %vector.ph

; <label>:6                                       ; preds = %middle.block
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example9Pj(i32* nocapture %ret) #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %10, %vector.body ]
  %vec.phi4 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %11, %vector.body ]
  %0 = getelementptr inbounds [1024 x i32]* @ub, i64 0, i64 %index
  %1 = bitcast i32* %0 to <4 x i32>*
  %wide.load = load <4 x i32>* %1, align 16
  %.sum12 = or i64 %index, 4
  %2 = getelementptr [1024 x i32]* @ub, i64 0, i64 %.sum12
  %3 = bitcast i32* %2 to <4 x i32>*
  %wide.load5 = load <4 x i32>* %3, align 16
  %4 = getelementptr inbounds [1024 x i32]* @uc, i64 0, i64 %index
  %5 = bitcast i32* %4 to <4 x i32>*
  %wide.load6 = load <4 x i32>* %5, align 16
  %.sum13 = or i64 %index, 4
  %6 = getelementptr [1024 x i32]* @uc, i64 0, i64 %.sum13
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load7 = load <4 x i32>* %7, align 16
  %8 = add <4 x i32> %wide.load, %vec.phi
  %9 = add <4 x i32> %wide.load5, %vec.phi4
  %10 = sub <4 x i32> %8, %wide.load6
  %11 = sub <4 x i32> %9, %wide.load7
  %index.next = add i64 %index, 8
  %12 = icmp eq i64 %index.next, 1024
  br i1 %12, label %middle.block, label %vector.body, !llvm.loop !23

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %11, %10
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx9 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf10 = shufflevector <4 x i32> %bin.rdx9, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx11 = add <4 x i32> %bin.rdx9, %rdx.shuf10
  %13 = extractelement <4 x i32> %bin.rdx11, i32 0
  store i32 %13, i32* %ret, align 4, !tbaa !5
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z10example10aPsS_S_PiS0_S0_(i16* noalias nocapture %sa, i16* noalias nocapture readonly %sb, i16* noalias nocapture readonly %sc, i32* noalias nocapture %ia, i32* noalias nocapture readonly %ib, i32* noalias nocapture readonly %ic) #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds i32* %ib, i64 %index
  %1 = bitcast i32* %0 to <4 x i32>*
  %wide.load = load <4 x i32>* %1, align 4
  %.sum10 = or i64 %index, 4
  %2 = getelementptr i32* %ib, i64 %.sum10
  %3 = bitcast i32* %2 to <4 x i32>*
  %wide.load3 = load <4 x i32>* %3, align 4
  %4 = getelementptr inbounds i32* %ic, i64 %index
  %5 = bitcast i32* %4 to <4 x i32>*
  %wide.load4 = load <4 x i32>* %5, align 4
  %.sum11 = or i64 %index, 4
  %6 = getelementptr i32* %ic, i64 %.sum11
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load5 = load <4 x i32>* %7, align 4
  %8 = add nsw <4 x i32> %wide.load4, %wide.load
  %9 = add nsw <4 x i32> %wide.load5, %wide.load3
  %10 = getelementptr inbounds i32* %ia, i64 %index
  %11 = bitcast i32* %10 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %11, align 4
  %.sum12 = or i64 %index, 4
  %12 = getelementptr i32* %ia, i64 %.sum12
  %13 = bitcast i32* %12 to <4 x i32>*
  store <4 x i32> %9, <4 x i32>* %13, align 4
  %14 = getelementptr inbounds i16* %sb, i64 %index
  %15 = bitcast i16* %14 to <4 x i16>*
  %wide.load6 = load <4 x i16>* %15, align 2
  %.sum13 = or i64 %index, 4
  %16 = getelementptr i16* %sb, i64 %.sum13
  %17 = bitcast i16* %16 to <4 x i16>*
  %wide.load7 = load <4 x i16>* %17, align 2
  %18 = getelementptr inbounds i16* %sc, i64 %index
  %19 = bitcast i16* %18 to <4 x i16>*
  %wide.load8 = load <4 x i16>* %19, align 2
  %.sum14 = or i64 %index, 4
  %20 = getelementptr i16* %sc, i64 %.sum14
  %21 = bitcast i16* %20 to <4 x i16>*
  %wide.load9 = load <4 x i16>* %21, align 2
  %22 = add <4 x i16> %wide.load8, %wide.load6
  %23 = add <4 x i16> %wide.load9, %wide.load7
  %24 = getelementptr inbounds i16* %sa, i64 %index
  %25 = bitcast i16* %24 to <4 x i16>*
  store <4 x i16> %22, <4 x i16>* %25, align 2
  %.sum15 = or i64 %index, 4
  %26 = getelementptr i16* %sa, i64 %.sum15
  %27 = bitcast i16* %26 to <4 x i16>*
  store <4 x i16> %23, <4 x i16>* %27, align 2
  %index.next = add i64 %index, 8
  %28 = icmp eq i64 %index.next, 1024
  br i1 %28, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z10example10bPsS_S_PiS0_S0_(i16* noalias nocapture readnone %sa, i16* noalias nocapture readonly %sb, i16* noalias nocapture readnone %sc, i32* noalias nocapture %ia, i32* noalias nocapture readnone %ib, i32* noalias nocapture readnone %ic) #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds i16* %sb, i64 %index
  %1 = bitcast i16* %0 to <4 x i16>*
  %wide.load = load <4 x i16>* %1, align 2
  %.sum4 = or i64 %index, 4
  %2 = getelementptr i16* %sb, i64 %.sum4
  %3 = bitcast i16* %2 to <4 x i16>*
  %wide.load3 = load <4 x i16>* %3, align 2
  %4 = sext <4 x i16> %wide.load to <4 x i32>
  %5 = sext <4 x i16> %wide.load3 to <4 x i32>
  %6 = getelementptr inbounds i32* %ia, i64 %index
  %7 = bitcast i32* %6 to <4 x i32>*
  store <4 x i32> %4, <4 x i32>* %7, align 4
  %.sum5 = or i64 %index, 4
  %8 = getelementptr i32* %ia, i64 %.sum5
  %9 = bitcast i32* %8 to <4 x i32>*
  store <4 x i32> %5, <4 x i32>* %9, align 4
  %index.next = add i64 %index, 8
  %10 = icmp eq i64 %index.next, 1024
  br i1 %10, label %middle.block, label %vector.body, !llvm.loop !25

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example11v() #2 {
  br label %1

; <label>:1                                       ; preds = %1, %0
  %indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %1 ]
  %2 = shl nsw i64 %indvars.iv, 1
  %3 = or i64 %2, 1
  %4 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %3
  %5 = load i32* %4, align 4, !tbaa !5
  %6 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %3
  %7 = load i32* %6, align 4, !tbaa !5
  %8 = mul nsw i32 %7, %5
  %9 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %2
  %10 = load i32* %9, align 8, !tbaa !5
  %11 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %2
  %12 = load i32* %11, align 8, !tbaa !5
  %13 = mul nsw i32 %12, %10
  %14 = sub nsw i32 %8, %13
  %15 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
  store i32 %14, i32* %15, align 4, !tbaa !5
  %16 = mul nsw i32 %7, %10
  %17 = mul nsw i32 %12, %5
  %18 = add nsw i32 %17, %16
  %19 = getelementptr inbounds [2048 x i32]* @d, i64 0, i64 %indvars.iv
  store i32 %18, i32* %19, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond = icmp eq i64 %indvars.iv.next, 512
  br i1 %exitcond, label %20, label %1

; <label>:20                                      ; preds = %1
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example12v() #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %1 = trunc i64 %index to i32
  %broadcast.splatinsert3 = insertelement <4 x i32> undef, i32 %1, i32 0
  %broadcast.splat4 = shufflevector <4 x i32> %broadcast.splatinsert3, <4 x i32> undef, <4 x i32> zeroinitializer
  %induction5 = add <4 x i32> %broadcast.splat4, <i32 0, i32 1, i32 2, i32 3>
  %induction6 = add <4 x i32> %broadcast.splat4, <i32 4, i32 5, i32 6, i32 7>
  %2 = bitcast i32* %0 to <4 x i32>*
  store <4 x i32> %induction5, <4 x i32>* %2, align 16
  %.sum7 = or i64 %index, 4
  %3 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum7
  %4 = bitcast i32* %3 to <4 x i32>*
  store <4 x i32> %induction6, <4 x i32>* %4, align 16
  %index.next = add i64 %index, 8
  %5 = icmp eq i64 %index.next, 1024
  br i1 %5, label %middle.block, label %vector.body, !llvm.loop !26

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example13PPiS0_S_(i32** nocapture readonly %A, i32** nocapture readonly %B, i32* nocapture %out) #2 {
  br label %.preheader

.preheader:                                       ; preds = %14, %0
  %indvars.iv4 = phi i64 [ 0, %0 ], [ %indvars.iv.next5, %14 ]
  %1 = getelementptr inbounds i32** %A, i64 %indvars.iv4
  %2 = load i32** %1, align 8, !tbaa !27
  %3 = getelementptr inbounds i32** %B, i64 %indvars.iv4
  %4 = load i32** %3, align 8, !tbaa !27
  br label %5

; <label>:5                                       ; preds = %.preheader, %5
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %5 ]
  %diff.02 = phi i32 [ 0, %.preheader ], [ %11, %5 ]
  %6 = getelementptr inbounds i32* %2, i64 %indvars.iv
  %7 = load i32* %6, align 4, !tbaa !5
  %8 = getelementptr inbounds i32* %4, i64 %indvars.iv
  %9 = load i32* %8, align 4, !tbaa !5
  %10 = add i32 %7, %diff.02
  %11 = sub i32 %10, %9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 8
  %12 = trunc i64 %indvars.iv.next to i32
  %13 = icmp slt i32 %12, 1024
  br i1 %13, label %5, label %14

; <label>:14                                      ; preds = %5
  %15 = getelementptr inbounds i32* %out, i64 %indvars.iv4
  store i32 %11, i32* %15, align 4, !tbaa !5
  %indvars.iv.next5 = add nuw nsw i64 %indvars.iv4, 1
  %exitcond = icmp eq i64 %indvars.iv.next5, 32
  br i1 %exitcond, label %16, label %.preheader

; <label>:16                                      ; preds = %14
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example14PPiS0_S_(i32** nocapture readonly %in, i32** nocapture readonly %coeff, i32* nocapture %out) #2 {
.preheader1:
  br label %vector.ph

vector.ph:                                        ; preds = %.preheader1, %middle.block
  %indvars.iv7 = phi i64 [ 0, %.preheader1 ], [ %indvars.iv.next8, %middle.block ]
  %sum.05 = phi i32 [ 0, %.preheader1 ], [ %bin.rdx, %middle.block ]
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi i32 [ %sum.05, %vector.ph ], [ %18, %vector.body ]
  %vec.phi20 = phi i32 [ 0, %vector.ph ], [ %19, %vector.body ]
  %induction1970 = or i64 %index, 1
  %0 = getelementptr inbounds i32** %in, i64 %index
  %1 = getelementptr inbounds i32** %in, i64 %induction1970
  %2 = load i32** %0, align 8, !tbaa !27
  %3 = load i32** %1, align 8, !tbaa !27
  %4 = getelementptr inbounds i32* %2, i64 %indvars.iv7
  %5 = getelementptr inbounds i32* %3, i64 %indvars.iv7
  %6 = load i32* %4, align 4, !tbaa !5
  %7 = load i32* %5, align 4, !tbaa !5
  %8 = getelementptr inbounds i32** %coeff, i64 %index
  %9 = getelementptr inbounds i32** %coeff, i64 %induction1970
  %10 = load i32** %8, align 8, !tbaa !27
  %11 = load i32** %9, align 8, !tbaa !27
  %12 = getelementptr inbounds i32* %10, i64 %indvars.iv7
  %13 = getelementptr inbounds i32* %11, i64 %indvars.iv7
  %14 = load i32* %12, align 4, !tbaa !5
  %15 = load i32* %13, align 4, !tbaa !5
  %16 = mul nsw i32 %14, %6
  %17 = mul nsw i32 %15, %7
  %18 = add nsw i32 %16, %vec.phi
  %19 = add nsw i32 %17, %vec.phi20
  %index.next = add i64 %index, 2
  %20 = icmp eq i64 %index.next, 1024
  br i1 %20, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add i32 %19, %18
  %indvars.iv.next8 = add nuw nsw i64 %indvars.iv7, 1
  %exitcond9 = icmp eq i64 %indvars.iv.next8, 32
  br i1 %exitcond9, label %.preheader1.113, label %vector.ph

.preheader1.113:                                  ; preds = %middle.block
  store i32 %bin.rdx, i32* %out, align 4, !tbaa !5
  br label %vector.ph22

vector.ph22:                                      ; preds = %.preheader1.113, %middle.block24
  %indvars.iv7.1 = phi i64 [ 0, %.preheader1.113 ], [ %indvars.iv.next8.1, %middle.block24 ]
  %sum.05.1 = phi i32 [ 0, %.preheader1.113 ], [ %bin.rdx37, %middle.block24 ]
  br label %vector.body23

vector.body23:                                    ; preds = %vector.body23, %vector.ph22
  %index26 = phi i64 [ 0, %vector.ph22 ], [ %index.next30, %vector.body23 ]
  %vec.phi33 = phi i32 [ %sum.05.1, %vector.ph22 ], [ %41, %vector.body23 ]
  %vec.phi34 = phi i32 [ 0, %vector.ph22 ], [ %42, %vector.body23 ]
  %induction3271 = or i64 %index26, 1
  %21 = or i64 %index26, 1
  %22 = add nsw i64 %induction3271, 1
  %23 = getelementptr inbounds i32** %in, i64 %21
  %24 = getelementptr inbounds i32** %in, i64 %22
  %25 = load i32** %23, align 8, !tbaa !27
  %26 = load i32** %24, align 8, !tbaa !27
  %27 = getelementptr inbounds i32* %25, i64 %indvars.iv7.1
  %28 = getelementptr inbounds i32* %26, i64 %indvars.iv7.1
  %29 = load i32* %27, align 4, !tbaa !5
  %30 = load i32* %28, align 4, !tbaa !5
  %31 = getelementptr inbounds i32** %coeff, i64 %index26
  %32 = getelementptr inbounds i32** %coeff, i64 %induction3271
  %33 = load i32** %31, align 8, !tbaa !27
  %34 = load i32** %32, align 8, !tbaa !27
  %35 = getelementptr inbounds i32* %33, i64 %indvars.iv7.1
  %36 = getelementptr inbounds i32* %34, i64 %indvars.iv7.1
  %37 = load i32* %35, align 4, !tbaa !5
  %38 = load i32* %36, align 4, !tbaa !5
  %39 = mul nsw i32 %37, %29
  %40 = mul nsw i32 %38, %30
  %41 = add nsw i32 %39, %vec.phi33
  %42 = add nsw i32 %40, %vec.phi34
  %index.next30 = add i64 %index26, 2
  %43 = icmp eq i64 %index.next30, 1024
  br i1 %43, label %middle.block24, label %vector.body23, !llvm.loop !30

middle.block24:                                   ; preds = %vector.body23
  %bin.rdx37 = add i32 %42, %41
  %indvars.iv.next8.1 = add nuw nsw i64 %indvars.iv7.1, 1
  %exitcond9.1 = icmp eq i64 %indvars.iv.next8.1, 32
  br i1 %exitcond9.1, label %.preheader1.214, label %vector.ph22

.preheader1.214:                                  ; preds = %middle.block24
  %44 = getelementptr inbounds i32* %out, i64 1
  store i32 %bin.rdx37, i32* %44, align 4, !tbaa !5
  br label %vector.ph38

vector.ph38:                                      ; preds = %.preheader1.214, %middle.block40
  %indvars.iv7.2 = phi i64 [ 0, %.preheader1.214 ], [ %indvars.iv.next8.2, %middle.block40 ]
  %sum.05.2 = phi i32 [ 0, %.preheader1.214 ], [ %bin.rdx53, %middle.block40 ]
  br label %vector.body39

vector.body39:                                    ; preds = %vector.body39, %vector.ph38
  %index42 = phi i64 [ 0, %vector.ph38 ], [ %index.next46, %vector.body39 ]
  %vec.phi49 = phi i32 [ %sum.05.2, %vector.ph38 ], [ %65, %vector.body39 ]
  %vec.phi50 = phi i32 [ 0, %vector.ph38 ], [ %66, %vector.body39 ]
  %induction4872 = or i64 %index42, 1
  %45 = add nsw i64 %index42, 2
  %46 = add nsw i64 %induction4872, 2
  %47 = getelementptr inbounds i32** %in, i64 %45
  %48 = getelementptr inbounds i32** %in, i64 %46
  %49 = load i32** %47, align 8, !tbaa !27
  %50 = load i32** %48, align 8, !tbaa !27
  %51 = getelementptr inbounds i32* %49, i64 %indvars.iv7.2
  %52 = getelementptr inbounds i32* %50, i64 %indvars.iv7.2
  %53 = load i32* %51, align 4, !tbaa !5
  %54 = load i32* %52, align 4, !tbaa !5
  %55 = getelementptr inbounds i32** %coeff, i64 %index42
  %56 = getelementptr inbounds i32** %coeff, i64 %induction4872
  %57 = load i32** %55, align 8, !tbaa !27
  %58 = load i32** %56, align 8, !tbaa !27
  %59 = getelementptr inbounds i32* %57, i64 %indvars.iv7.2
  %60 = getelementptr inbounds i32* %58, i64 %indvars.iv7.2
  %61 = load i32* %59, align 4, !tbaa !5
  %62 = load i32* %60, align 4, !tbaa !5
  %63 = mul nsw i32 %61, %53
  %64 = mul nsw i32 %62, %54
  %65 = add nsw i32 %63, %vec.phi49
  %66 = add nsw i32 %64, %vec.phi50
  %index.next46 = add i64 %index42, 2
  %67 = icmp eq i64 %index.next46, 1024
  br i1 %67, label %middle.block40, label %vector.body39, !llvm.loop !31

middle.block40:                                   ; preds = %vector.body39
  %bin.rdx53 = add i32 %66, %65
  %indvars.iv.next8.2 = add nuw nsw i64 %indvars.iv7.2, 1
  %exitcond9.2 = icmp eq i64 %indvars.iv.next8.2, 32
  br i1 %exitcond9.2, label %.preheader1.315, label %vector.ph38

.preheader1.315:                                  ; preds = %middle.block40
  %68 = getelementptr inbounds i32* %out, i64 2
  store i32 %bin.rdx53, i32* %68, align 4, !tbaa !5
  br label %vector.ph54

vector.ph54:                                      ; preds = %.preheader1.315, %middle.block56
  %indvars.iv7.3 = phi i64 [ 0, %.preheader1.315 ], [ %indvars.iv.next8.3, %middle.block56 ]
  %sum.05.3 = phi i32 [ 0, %.preheader1.315 ], [ %bin.rdx69, %middle.block56 ]
  br label %vector.body55

vector.body55:                                    ; preds = %vector.body55, %vector.ph54
  %index58 = phi i64 [ 0, %vector.ph54 ], [ %index.next62, %vector.body55 ]
  %vec.phi65 = phi i32 [ %sum.05.3, %vector.ph54 ], [ %89, %vector.body55 ]
  %vec.phi66 = phi i32 [ 0, %vector.ph54 ], [ %90, %vector.body55 ]
  %induction6473 = or i64 %index58, 1
  %69 = add nsw i64 %index58, 3
  %70 = add nsw i64 %induction6473, 3
  %71 = getelementptr inbounds i32** %in, i64 %69
  %72 = getelementptr inbounds i32** %in, i64 %70
  %73 = load i32** %71, align 8, !tbaa !27
  %74 = load i32** %72, align 8, !tbaa !27
  %75 = getelementptr inbounds i32* %73, i64 %indvars.iv7.3
  %76 = getelementptr inbounds i32* %74, i64 %indvars.iv7.3
  %77 = load i32* %75, align 4, !tbaa !5
  %78 = load i32* %76, align 4, !tbaa !5
  %79 = getelementptr inbounds i32** %coeff, i64 %index58
  %80 = getelementptr inbounds i32** %coeff, i64 %induction6473
  %81 = load i32** %79, align 8, !tbaa !27
  %82 = load i32** %80, align 8, !tbaa !27
  %83 = getelementptr inbounds i32* %81, i64 %indvars.iv7.3
  %84 = getelementptr inbounds i32* %82, i64 %indvars.iv7.3
  %85 = load i32* %83, align 4, !tbaa !5
  %86 = load i32* %84, align 4, !tbaa !5
  %87 = mul nsw i32 %85, %77
  %88 = mul nsw i32 %86, %78
  %89 = add nsw i32 %87, %vec.phi65
  %90 = add nsw i32 %88, %vec.phi66
  %index.next62 = add i64 %index58, 2
  %91 = icmp eq i64 %index.next62, 1024
  br i1 %91, label %middle.block56, label %vector.body55, !llvm.loop !32

middle.block56:                                   ; preds = %vector.body55
  %bin.rdx69 = add i32 %90, %89
  %indvars.iv.next8.3 = add nuw nsw i64 %indvars.iv7.3, 1
  %exitcond9.3 = icmp eq i64 %indvars.iv.next8.3, 32
  br i1 %exitcond9.3, label %92, label %vector.ph54

; <label>:92                                      ; preds = %middle.block56
  %93 = getelementptr inbounds i32* %out, i64 3
  store i32 %bin.rdx69, i32* %93, align 4, !tbaa !5
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example21Pii(i32* nocapture %b, i32 %n) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %0
  %2 = sext i32 %n to i64
  %3 = add i32 %n, -1
  %4 = zext i32 %3 to i64
  %5 = add i64 %4, 1
  %end.idx = add i64 %4, 1
  %n.vec = and i64 %5, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %rev.ind.end = sub i64 %2, %n.vec
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph ]
  %vec.phi = phi <4 x i32> [ %10, %vector.body ], [ zeroinitializer, %.lr.ph ]
  %vec.phi5 = phi <4 x i32> [ %11, %vector.body ], [ zeroinitializer, %.lr.ph ]
  %reverse.idx = sub i64 %2, %index
  %.sum = add i64 %reverse.idx, -4
  %6 = getelementptr i32* %b, i64 %.sum
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load = load <4 x i32>* %7, align 4
  %reverse = shufflevector <4 x i32> %wide.load, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %.sum13 = add i64 %reverse.idx, -8
  %8 = getelementptr i32* %b, i64 %.sum13
  %9 = bitcast i32* %8 to <4 x i32>*
  %wide.load6 = load <4 x i32>* %9, align 4
  %reverse7 = shufflevector <4 x i32> %wide.load6, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %10 = add nsw <4 x i32> %reverse, %vec.phi
  %11 = add nsw <4 x i32> %reverse7, %vec.phi5
  %index.next = add i64 %index, 8
  %12 = icmp eq i64 %index.next, %n.vec
  br i1 %12, label %middle.block, label %vector.body, !llvm.loop !33

middle.block:                                     ; preds = %vector.body, %.lr.ph
  %resume.val = phi i64 [ %2, %.lr.ph ], [ %rev.ind.end, %vector.body ]
  %new.indc.resume.val = phi i64 [ 0, %.lr.ph ], [ %n.vec, %vector.body ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %.lr.ph ], [ %10, %vector.body ]
  %rdx.vec.exit.phi8 = phi <4 x i32> [ zeroinitializer, %.lr.ph ], [ %11, %vector.body ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi8, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx9 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf10 = shufflevector <4 x i32> %bin.rdx9, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx11 = add <4 x i32> %bin.rdx9, %rdx.shuf10
  %13 = extractelement <4 x i32> %bin.rdx11, i32 0
  %cmp.n = icmp eq i64 %end.idx, %new.indc.resume.val
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph

scalar.ph:                                        ; preds = %middle.block, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %resume.val, %middle.block ]
  %a.02 = phi i32 [ %16, %scalar.ph ], [ %13, %middle.block ]
  %indvars.iv.next = add nsw i64 %indvars.iv, -1
  %14 = getelementptr inbounds i32* %b, i64 %indvars.iv.next
  %15 = load i32* %14, align 4, !tbaa !5
  %16 = add nsw i32 %15, %a.02
  %17 = trunc i64 %indvars.iv.next to i32
  %18 = icmp sgt i32 %17, 0
  br i1 %18, label %scalar.ph, label %._crit_edge, !llvm.loop !34

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %0
  %a.0.lcssa = phi i32 [ 0, %0 ], [ %16, %scalar.ph ], [ %13, %middle.block ]
  store i32 %a.0.lcssa, i32* %b, align 4, !tbaa !5
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example23PtPj(i16* nocapture readonly %src, i32* nocapture %dst) #2 {
vector.memcheck:
  %scevgep8 = getelementptr i16* %src, i64 255
  %scevgep = getelementptr i32* %dst, i64 255
  %0 = bitcast i32* %scevgep to i16*
  %1 = bitcast i16* %scevgep8 to i32*
  %bound1 = icmp uge i16* %0, %src
  %bound0 = icmp uge i32* %1, %dst
  %memcheck.conflict = and i1 %bound0, %bound1
  %ptr.ind.end = getelementptr i32* %dst, i64 256
  %ptr.ind.end12 = getelementptr i16* %src, i64 256
  br i1 %memcheck.conflict, label %middle.block, label %vector.body

vector.body:                                      ; preds = %vector.memcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.memcheck ]
  %next.gep = getelementptr i32* %dst, i64 %index
  %next.gep37 = getelementptr i16* %src, i64 %index
  %2 = bitcast i16* %next.gep37 to <4 x i16>*
  %wide.load = load <4 x i16>* %2, align 2
  %next.gep37.sum79 = or i64 %index, 4
  %3 = getelementptr i16* %src, i64 %next.gep37.sum79
  %4 = bitcast i16* %3 to <4 x i16>*
  %wide.load60 = load <4 x i16>* %4, align 2
  %5 = zext <4 x i16> %wide.load to <4 x i32>
  %6 = zext <4 x i16> %wide.load60 to <4 x i32>
  %7 = shl nuw nsw <4 x i32> %5, <i32 7, i32 7, i32 7, i32 7>
  %8 = shl nuw nsw <4 x i32> %6, <i32 7, i32 7, i32 7, i32 7>
  %9 = bitcast i32* %next.gep to <4 x i32>*
  store <4 x i32> %7, <4 x i32>* %9, align 4
  %next.gep.sum84 = or i64 %index, 4
  %10 = getelementptr i32* %dst, i64 %next.gep.sum84
  %11 = bitcast i32* %10 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %11, align 4
  %index.next = add i64 %index, 8
  %12 = icmp eq i64 %index.next, 256
  br i1 %12, label %middle.block, label %vector.body, !llvm.loop !35

middle.block:                                     ; preds = %vector.body, %vector.memcheck
  %resume.val = phi i1 [ false, %vector.memcheck ], [ true, %vector.body ]
  %trunc.resume.val = phi i32 [ 0, %vector.memcheck ], [ 256, %vector.body ]
  %resume.val10 = phi i32* [ %dst, %vector.memcheck ], [ %ptr.ind.end, %vector.body ]
  %resume.val11 = phi i16* [ %src, %vector.memcheck ], [ %ptr.ind.end12, %vector.body ]
  br i1 %resume.val, label %19, label %scalar.ph

scalar.ph:                                        ; preds = %middle.block, %scalar.ph
  %i.04 = phi i32 [ %18, %scalar.ph ], [ %trunc.resume.val, %middle.block ]
  %.03 = phi i32* [ %17, %scalar.ph ], [ %resume.val10, %middle.block ]
  %.012 = phi i16* [ %13, %scalar.ph ], [ %resume.val11, %middle.block ]
  %13 = getelementptr inbounds i16* %.012, i64 1
  %14 = load i16* %.012, align 2, !tbaa !36
  %15 = zext i16 %14 to i32
  %16 = shl nuw nsw i32 %15, 7
  %17 = getelementptr inbounds i32* %.03, i64 1
  store i32 %16, i32* %.03, align 4, !tbaa !5
  %18 = add nsw i32 %i.04, 1
  %exitcond = icmp eq i32 %18, 256
  br i1 %exitcond, label %19, label %scalar.ph, !llvm.loop !38

; <label>:19                                      ; preds = %middle.block, %scalar.ph
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example24ss(i16 signext %x, i16 signext %y) #2 {
vector.ph:
  %broadcast.splatinsert3 = insertelement <4 x i16> undef, i16 %x, i32 0
  %broadcast.splat4 = shufflevector <4 x i16> %broadcast.splatinsert3, <4 x i16> undef, <4 x i32> zeroinitializer
  %broadcast.splatinsert5 = insertelement <4 x i16> undef, i16 %y, i32 0
  %broadcast.splat6 = shufflevector <4 x i16> %broadcast.splatinsert5, <4 x i16> undef, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds [1024 x float]* @fa, i64 0, i64 %index
  %1 = bitcast float* %0 to <4 x float>*
  %wide.load = load <4 x float>* %1, align 16
  %2 = getelementptr inbounds [1024 x float]* @fb, i64 0, i64 %index
  %3 = bitcast float* %2 to <4 x float>*
  %wide.load2 = load <4 x float>* %3, align 16
  %4 = fcmp olt <4 x float> %wide.load, %wide.load2
  %5 = select <4 x i1> %4, <4 x i16> %broadcast.splat4, <4 x i16> %broadcast.splat6
  %6 = sext <4 x i16> %5 to <4 x i32>
  %7 = getelementptr inbounds [1024 x i32]* @ic, i64 0, i64 %index
  %8 = bitcast i32* %7 to <4 x i32>*
  store <4 x i32> %6, <4 x i32>* %8, align 16
  %index.next = add i64 %index, 4
  %9 = icmp eq i64 %index.next, 1024
  br i1 %9, label %middle.block, label %vector.body, !llvm.loop !39

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example25v() #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds [1024 x float]* @da, i64 0, i64 %index
  %1 = bitcast float* %0 to <4 x float>*
  %wide.load = load <4 x float>* %1, align 16
  %2 = getelementptr inbounds [1024 x float]* @db, i64 0, i64 %index
  %3 = bitcast float* %2 to <4 x float>*
  %wide.load2 = load <4 x float>* %3, align 16
  %4 = fcmp olt <4 x float> %wide.load, %wide.load2
  %5 = getelementptr inbounds [1024 x float]* @dc, i64 0, i64 %index
  %6 = bitcast float* %5 to <4 x float>*
  %wide.load3 = load <4 x float>* %6, align 16
  %7 = getelementptr inbounds [1024 x float]* @dd, i64 0, i64 %index
  %8 = bitcast float* %7 to <4 x float>*
  %wide.load4 = load <4 x float>* %8, align 16
  %9 = fcmp olt <4 x float> %wide.load3, %wide.load4
  %10 = and <4 x i1> %4, %9
  %11 = zext <4 x i1> %10 to <4 x i32>
  %12 = getelementptr inbounds [1024 x i32]* @dj, i64 0, i64 %index
  %13 = bitcast i32* %12 to <4 x i32>*
  store <4 x i32> %11, <4 x i32>* %13, align 16
  %index.next = add i64 %index, 4
  %14 = icmp eq i64 %index.next, 1024
  br i1 %14, label %middle.block, label %vector.body, !llvm.loop !40

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: nounwind uwtable
define void @_Z11init_memoryPvS_(i8* %start, i8* readnone %end) #3 {
  %1 = icmp eq i8* %start, %end
  br i1 %1, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %0, %.lr.ph
  %state.02 = phi i32 [ %6, %.lr.ph ], [ 1, %0 ]
  %.01 = phi i8* [ %8, %.lr.ph ], [ %start, %0 ]
  %2 = and i32 %state.02, 255
  %3 = mul nsw i32 %2, 7
  %4 = and i32 %3, 255
  %5 = xor i32 %4, 39
  %6 = add nsw i32 %5, 1
  %7 = trunc i32 %6 to i8
  store i8 %7, i8* %.01, align 1, !tbaa !41
  %8 = getelementptr inbounds i8* %.01, i64 1
  %9 = icmp eq i8* %8, %end
  br i1 %9, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %0
  ret void
}

; Function Attrs: nounwind uwtable
define void @_Z17init_memory_floatPfS_(float* %start, float* readnone %end) #3 {
  %1 = icmp eq float* %start, %end
  br i1 %1, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %0, %.lr.ph
  %state.02 = phi float [ %4, %.lr.ph ], [ 1.000000e+00, %0 ]
  %.01 = phi float* [ %5, %.lr.ph ], [ %start, %0 ]
  %2 = fpext float %state.02 to double
  %3 = fmul double %2, 1.100000e+00
  %4 = fptrunc double %3 to float
  store float %4, float* %.01, align 4, !tbaa !42
  %5 = getelementptr inbounds float* %.01, i64 1
  %6 = icmp eq float* %5, %end
  br i1 %6, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %0
  ret void
}

; Function Attrs: nounwind readonly uwtable
define i32 @_Z13digest_memoryPvS_(i8* readonly %start, i8* readnone %end) #4 {
  %1 = icmp eq i8* %start, %end
  br i1 %1, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %0, %.lr.ph
  %state.02 = phi i32 [ %8, %.lr.ph ], [ 1, %0 ]
  %.01 = phi i8* [ %9, %.lr.ph ], [ %start, %0 ]
  %2 = mul i32 %state.02, 3
  %3 = load i8* %.01, align 1, !tbaa !41
  %4 = zext i8 %3 to i32
  %5 = xor i32 %4, %2
  %6 = lshr i32 %2, 8
  %7 = shl i32 %5, 8
  %8 = xor i32 %7, %6
  %9 = getelementptr inbounds i8* %.01, i64 1
  %10 = icmp eq i8* %9, %end
  br i1 %10, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %0
  %state.0.lcssa = phi i32 [ 1, %0 ], [ %8, %.lr.ph ]
  ret i32 %state.0.lcssa
}

; Function Attrs: uwtable
define i32 @main(i32 %argc, i8** nocapture readnone %argv) #5 {
  %results = alloca %"class.std::vector", align 8
  %dummy = alloca i32, align 4
  %atimer = alloca %class.Timer, align 8
  %r = alloca i32, align 4
  %atimer1 = alloca %class.Timer, align 8
  %r3 = alloca i32, align 4
  %atimer4 = alloca %class.Timer, align 8
  %r6 = alloca i32, align 4
  %atimer7 = alloca %class.Timer, align 8
  %r9 = alloca i32, align 4
  %atimer10 = alloca %class.Timer, align 8
  %r12 = alloca i32, align 4
  %atimer13 = alloca %class.Timer, align 8
  %r15 = alloca i32, align 4
  %atimer16 = alloca %class.Timer, align 8
  %r18 = alloca i32, align 4
  %atimer19 = alloca %class.Timer, align 8
  %r21 = alloca i32, align 4
  %atimer22 = alloca %class.Timer, align 8
  %r24 = alloca i32, align 4
  %atimer25 = alloca %class.Timer, align 8
  %r27 = alloca i32, align 4
  %atimer28 = alloca %class.Timer, align 8
  %r30 = alloca i32, align 4
  %atimer31 = alloca %class.Timer, align 8
  %r33 = alloca i32, align 4
  %atimer34 = alloca %class.Timer, align 8
  %r36 = alloca i32, align 4
  %atimer37 = alloca %class.Timer, align 8
  %r39 = alloca i32, align 4
  %atimer40 = alloca %class.Timer, align 8
  %r42 = alloca i32, align 4
  %atimer43 = alloca %class.Timer, align 8
  %r45 = alloca i32, align 4
  %atimer46 = alloca %class.Timer, align 8
  %r48 = alloca i32, align 4
  %1 = bitcast %"class.std::vector"* %results to i8*
  call void @llvm.memset.p0i8.i64(i8* %1, i8 0, i64 24, i32 8, i1 false) #1
  store i32 0, i32* %dummy, align 4, !tbaa !5
  br label %.lr.ph.i

.lr.ph.i:                                         ; preds = %.lr.ph.i, %0
  %state.02.i = phi i32 [ %6, %.lr.ph.i ], [ 1, %0 ]
  %.01.i = phi i8* [ %8, %.lr.ph.i ], [ bitcast ([1024 x i32]* @ia to i8*), %0 ]
  %2 = and i32 %state.02.i, 255
  %3 = mul nsw i32 %2, 7
  %4 = and i32 %3, 255
  %5 = xor i32 %4, 39
  %6 = add nsw i32 %5, 1
  %7 = trunc i32 %6 to i8
  store i8 %7, i8* %.01.i, align 1, !tbaa !41
  %8 = getelementptr inbounds i8* %.01.i, i64 1
  %9 = icmp eq i8* %8, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %9, label %.lr.ph.i54.preheader, label %.lr.ph.i

.lr.ph.i54.preheader:                             ; preds = %.lr.ph.i
  %10 = icmp sgt i32 %argc, 1
  br label %.lr.ph.i54

.lr.ph.i54:                                       ; preds = %.lr.ph.i54.preheader, %.lr.ph.i54
  %state.02.i52 = phi i32 [ %15, %.lr.ph.i54 ], [ 1, %.lr.ph.i54.preheader ]
  %.01.i53 = phi i8* [ %17, %.lr.ph.i54 ], [ bitcast ([1024 x i32]* @ib to i8*), %.lr.ph.i54.preheader ]
  %11 = and i32 %state.02.i52, 255
  %12 = mul nsw i32 %11, 7
  %13 = and i32 %12, 255
  %14 = xor i32 %13, 39
  %15 = add nsw i32 %14, 1
  %16 = trunc i32 %15 to i8
  store i8 %16, i8* %.01.i53, align 1, !tbaa !41
  %17 = getelementptr inbounds i8* %.01.i53, i64 1
  %18 = icmp eq i8* %17, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ib, i64 1, i64 0) to i8*)
  br i1 %18, label %.lr.ph.i59, label %.lr.ph.i54

.lr.ph.i59:                                       ; preds = %.lr.ph.i54, %.lr.ph.i59
  %state.02.i57 = phi i32 [ %23, %.lr.ph.i59 ], [ 1, %.lr.ph.i54 ]
  %.01.i58 = phi i8* [ %25, %.lr.ph.i59 ], [ bitcast ([1024 x i32]* @ic to i8*), %.lr.ph.i54 ]
  %19 = and i32 %state.02.i57, 255
  %20 = mul nsw i32 %19, 7
  %21 = and i32 %20, 255
  %22 = xor i32 %21, 39
  %23 = add nsw i32 %22, 1
  %24 = trunc i32 %23 to i8
  store i8 %24, i8* %.01.i58, align 1, !tbaa !41
  %25 = getelementptr inbounds i8* %.01.i58, i64 1
  %26 = icmp eq i8* %25, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ic, i64 1, i64 0) to i8*)
  br i1 %26, label %.lr.ph.i63, label %.lr.ph.i59

.lr.ph.i63:                                       ; preds = %.lr.ph.i59, %.lr.ph.i63
  %state.02.i61 = phi i32 [ %31, %.lr.ph.i63 ], [ 1, %.lr.ph.i59 ]
  %.01.i62 = phi i8* [ %33, %.lr.ph.i63 ], [ bitcast ([1024 x i16]* @sa to i8*), %.lr.ph.i59 ]
  %27 = and i32 %state.02.i61, 255
  %28 = mul nsw i32 %27, 7
  %29 = and i32 %28, 255
  %30 = xor i32 %29, 39
  %31 = add nsw i32 %30, 1
  %32 = trunc i32 %31 to i8
  store i8 %32, i8* %.01.i62, align 1, !tbaa !41
  %33 = getelementptr inbounds i8* %.01.i62, i64 1
  %34 = icmp eq i8* %33, bitcast (i16* getelementptr inbounds ([1024 x i16]* @sa, i64 1, i64 0) to i8*)
  br i1 %34, label %.lr.ph.i67, label %.lr.ph.i63

.lr.ph.i67:                                       ; preds = %.lr.ph.i63, %.lr.ph.i67
  %state.02.i65 = phi i32 [ %39, %.lr.ph.i67 ], [ 1, %.lr.ph.i63 ]
  %.01.i66 = phi i8* [ %41, %.lr.ph.i67 ], [ bitcast ([1024 x i16]* @sb to i8*), %.lr.ph.i63 ]
  %35 = and i32 %state.02.i65, 255
  %36 = mul nsw i32 %35, 7
  %37 = and i32 %36, 255
  %38 = xor i32 %37, 39
  %39 = add nsw i32 %38, 1
  %40 = trunc i32 %39 to i8
  store i8 %40, i8* %.01.i66, align 1, !tbaa !41
  %41 = getelementptr inbounds i8* %.01.i66, i64 1
  %42 = icmp eq i8* %41, bitcast (i16* getelementptr inbounds ([1024 x i16]* @sb, i64 1, i64 0) to i8*)
  br i1 %42, label %.lr.ph.i71, label %.lr.ph.i67

.lr.ph.i71:                                       ; preds = %.lr.ph.i67, %.lr.ph.i71
  %state.02.i69 = phi i32 [ %47, %.lr.ph.i71 ], [ 1, %.lr.ph.i67 ]
  %.01.i70 = phi i8* [ %49, %.lr.ph.i71 ], [ bitcast ([1024 x i16]* @sc to i8*), %.lr.ph.i67 ]
  %43 = and i32 %state.02.i69, 255
  %44 = mul nsw i32 %43, 7
  %45 = and i32 %44, 255
  %46 = xor i32 %45, 39
  %47 = add nsw i32 %46, 1
  %48 = trunc i32 %47 to i8
  store i8 %48, i8* %.01.i70, align 1, !tbaa !41
  %49 = getelementptr inbounds i8* %.01.i70, i64 1
  %50 = icmp eq i8* %49, bitcast (i16* getelementptr inbounds ([1024 x i16]* @sc, i64 1, i64 0) to i8*)
  br i1 %50, label %.lr.ph.i76, label %.lr.ph.i71

.lr.ph.i76:                                       ; preds = %.lr.ph.i71, %.lr.ph.i76
  %state.02.i74 = phi i32 [ %55, %.lr.ph.i76 ], [ 1, %.lr.ph.i71 ]
  %.01.i75 = phi i8* [ %57, %.lr.ph.i76 ], [ bitcast ([2048 x i32]* @a to i8*), %.lr.ph.i71 ]
  %51 = and i32 %state.02.i74, 255
  %52 = mul nsw i32 %51, 7
  %53 = and i32 %52, 255
  %54 = xor i32 %53, 39
  %55 = add nsw i32 %54, 1
  %56 = trunc i32 %55 to i8
  store i8 %56, i8* %.01.i75, align 1, !tbaa !41
  %57 = getelementptr inbounds i8* %.01.i75, i64 1
  %58 = icmp eq i8* %57, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 1, i64 0) to i8*)
  br i1 %58, label %.lr.ph.i80, label %.lr.ph.i76

.lr.ph.i80:                                       ; preds = %.lr.ph.i76, %.lr.ph.i80
  %state.02.i78 = phi i32 [ %63, %.lr.ph.i80 ], [ 1, %.lr.ph.i76 ]
  %.01.i79 = phi i8* [ %65, %.lr.ph.i80 ], [ bitcast ([2048 x i32]* @b to i8*), %.lr.ph.i76 ]
  %59 = and i32 %state.02.i78, 255
  %60 = mul nsw i32 %59, 7
  %61 = and i32 %60, 255
  %62 = xor i32 %61, 39
  %63 = add nsw i32 %62, 1
  %64 = trunc i32 %63 to i8
  store i8 %64, i8* %.01.i79, align 1, !tbaa !41
  %65 = getelementptr inbounds i8* %.01.i79, i64 1
  %66 = icmp eq i8* %65, bitcast (i32* getelementptr inbounds ([2048 x i32]* @b, i64 1, i64 0) to i8*)
  br i1 %66, label %.lr.ph.i85, label %.lr.ph.i80

.lr.ph.i85:                                       ; preds = %.lr.ph.i80, %.lr.ph.i85
  %state.02.i83 = phi i32 [ %71, %.lr.ph.i85 ], [ 1, %.lr.ph.i80 ]
  %.01.i84 = phi i8* [ %73, %.lr.ph.i85 ], [ bitcast ([2048 x i32]* @c to i8*), %.lr.ph.i80 ]
  %67 = and i32 %state.02.i83, 255
  %68 = mul nsw i32 %67, 7
  %69 = and i32 %68, 255
  %70 = xor i32 %69, 39
  %71 = add nsw i32 %70, 1
  %72 = trunc i32 %71 to i8
  store i8 %72, i8* %.01.i84, align 1, !tbaa !41
  %73 = getelementptr inbounds i8* %.01.i84, i64 1
  %74 = icmp eq i8* %73, bitcast (i32* getelementptr inbounds ([2048 x i32]* @c, i64 1, i64 0) to i8*)
  br i1 %74, label %.lr.ph.i89, label %.lr.ph.i85

.lr.ph.i89:                                       ; preds = %.lr.ph.i85, %.lr.ph.i89
  %state.02.i87 = phi i32 [ %79, %.lr.ph.i89 ], [ 1, %.lr.ph.i85 ]
  %.01.i88 = phi i8* [ %81, %.lr.ph.i89 ], [ bitcast ([1024 x i32]* @ua to i8*), %.lr.ph.i85 ]
  %75 = and i32 %state.02.i87, 255
  %76 = mul nsw i32 %75, 7
  %77 = and i32 %76, 255
  %78 = xor i32 %77, 39
  %79 = add nsw i32 %78, 1
  %80 = trunc i32 %79 to i8
  store i8 %80, i8* %.01.i88, align 1, !tbaa !41
  %81 = getelementptr inbounds i8* %.01.i88, i64 1
  %82 = icmp eq i8* %81, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ua, i64 1, i64 0) to i8*)
  br i1 %82, label %.lr.ph.i95, label %.lr.ph.i89

.lr.ph.i95:                                       ; preds = %.lr.ph.i89, %.lr.ph.i95
  %state.02.i93 = phi i32 [ %87, %.lr.ph.i95 ], [ 1, %.lr.ph.i89 ]
  %.01.i94 = phi i8* [ %89, %.lr.ph.i95 ], [ bitcast ([1024 x i32]* @ub to i8*), %.lr.ph.i89 ]
  %83 = and i32 %state.02.i93, 255
  %84 = mul nsw i32 %83, 7
  %85 = and i32 %84, 255
  %86 = xor i32 %85, 39
  %87 = add nsw i32 %86, 1
  %88 = trunc i32 %87 to i8
  store i8 %88, i8* %.01.i94, align 1, !tbaa !41
  %89 = getelementptr inbounds i8* %.01.i94, i64 1
  %90 = icmp eq i8* %89, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ub, i64 1, i64 0) to i8*)
  br i1 %90, label %.lr.ph.i99, label %.lr.ph.i95

.lr.ph.i99:                                       ; preds = %.lr.ph.i95, %.lr.ph.i99
  %state.02.i97 = phi i32 [ %95, %.lr.ph.i99 ], [ 1, %.lr.ph.i95 ]
  %.01.i98 = phi i8* [ %97, %.lr.ph.i99 ], [ bitcast ([1024 x i32]* @uc to i8*), %.lr.ph.i95 ]
  %91 = and i32 %state.02.i97, 255
  %92 = mul nsw i32 %91, 7
  %93 = and i32 %92, 255
  %94 = xor i32 %93, 39
  %95 = add nsw i32 %94, 1
  %96 = trunc i32 %95 to i8
  store i8 %96, i8* %.01.i98, align 1, !tbaa !41
  %97 = getelementptr inbounds i8* %.01.i98, i64 1
  %98 = icmp eq i8* %97, bitcast (i32* getelementptr inbounds ([1024 x i32]* @uc, i64 1, i64 0) to i8*)
  br i1 %98, label %.lr.ph.i103, label %.lr.ph.i99

.lr.ph.i103:                                      ; preds = %.lr.ph.i99, %.lr.ph.i103
  %state.02.i101 = phi i32 [ %103, %.lr.ph.i103 ], [ 1, %.lr.ph.i99 ]
  %.01.i102 = phi i8* [ %105, %.lr.ph.i103 ], [ bitcast ([32 x [1024 x i32]]* @G to i8*), %.lr.ph.i99 ]
  %99 = and i32 %state.02.i101, 255
  %100 = mul nsw i32 %99, 7
  %101 = and i32 %100, 255
  %102 = xor i32 %101, 39
  %103 = add nsw i32 %102, 1
  %104 = trunc i32 %103 to i8
  store i8 %104, i8* %.01.i102, align 1, !tbaa !41
  %105 = getelementptr inbounds i8* %.01.i102, i64 1
  %106 = icmp eq i8* %105, bitcast (i32* getelementptr inbounds ([32 x [1024 x i32]]* @G, i64 0, i64 1, i64 0) to i8*)
  br i1 %106, label %.lr.ph.i107, label %.lr.ph.i103

.lr.ph.i107:                                      ; preds = %.lr.ph.i103, %.lr.ph.i107
  %state.02.i105 = phi float [ %109, %.lr.ph.i107 ], [ 1.000000e+00, %.lr.ph.i103 ]
  %.01.i106 = phi float* [ %110, %.lr.ph.i107 ], [ getelementptr inbounds ([1024 x float]* @fa, i64 0, i64 0), %.lr.ph.i103 ]
  %107 = fpext float %state.02.i105 to double
  %108 = fmul double %107, 1.100000e+00
  %109 = fptrunc double %108 to float
  store float %109, float* %.01.i106, align 4, !tbaa !42
  %110 = getelementptr inbounds float* %.01.i106, i64 1
  %111 = icmp eq float* %110, getelementptr inbounds ([1024 x float]* @fa, i64 1, i64 0)
  br i1 %111, label %.lr.ph.i113, label %.lr.ph.i107

.lr.ph.i113:                                      ; preds = %.lr.ph.i107, %.lr.ph.i113
  %state.02.i111 = phi float [ %114, %.lr.ph.i113 ], [ 1.000000e+00, %.lr.ph.i107 ]
  %.01.i112 = phi float* [ %115, %.lr.ph.i113 ], [ getelementptr inbounds ([1024 x float]* @fb, i64 0, i64 0), %.lr.ph.i107 ]
  %112 = fpext float %state.02.i111 to double
  %113 = fmul double %112, 1.100000e+00
  %114 = fptrunc double %113 to float
  store float %114, float* %.01.i112, align 4, !tbaa !42
  %115 = getelementptr inbounds float* %.01.i112, i64 1
  %116 = icmp eq float* %115, getelementptr inbounds ([1024 x float]* @fb, i64 1, i64 0)
  br i1 %116, label %.lr.ph.i117, label %.lr.ph.i113

.lr.ph.i117:                                      ; preds = %.lr.ph.i113, %.lr.ph.i117
  %state.02.i115 = phi float [ %119, %.lr.ph.i117 ], [ 1.000000e+00, %.lr.ph.i113 ]
  %.01.i116 = phi float* [ %120, %.lr.ph.i117 ], [ getelementptr inbounds ([1024 x float]* @da, i64 0, i64 0), %.lr.ph.i113 ]
  %117 = fpext float %state.02.i115 to double
  %118 = fmul double %117, 1.100000e+00
  %119 = fptrunc double %118 to float
  store float %119, float* %.01.i116, align 4, !tbaa !42
  %120 = getelementptr inbounds float* %.01.i116, i64 1
  %121 = icmp eq float* %120, getelementptr inbounds ([1024 x float]* @da, i64 1, i64 0)
  br i1 %121, label %.lr.ph.i121, label %.lr.ph.i117

.lr.ph.i121:                                      ; preds = %.lr.ph.i117, %.lr.ph.i121
  %state.02.i119 = phi float [ %124, %.lr.ph.i121 ], [ 1.000000e+00, %.lr.ph.i117 ]
  %.01.i120 = phi float* [ %125, %.lr.ph.i121 ], [ getelementptr inbounds ([1024 x float]* @db, i64 0, i64 0), %.lr.ph.i117 ]
  %122 = fpext float %state.02.i119 to double
  %123 = fmul double %122, 1.100000e+00
  %124 = fptrunc double %123 to float
  store float %124, float* %.01.i120, align 4, !tbaa !42
  %125 = getelementptr inbounds float* %.01.i120, i64 1
  %126 = icmp eq float* %125, getelementptr inbounds ([1024 x float]* @db, i64 1, i64 0)
  br i1 %126, label %.lr.ph.i125, label %.lr.ph.i121

.lr.ph.i125:                                      ; preds = %.lr.ph.i121, %.lr.ph.i125
  %state.02.i123 = phi float [ %129, %.lr.ph.i125 ], [ 1.000000e+00, %.lr.ph.i121 ]
  %.01.i124 = phi float* [ %130, %.lr.ph.i125 ], [ getelementptr inbounds ([1024 x float]* @dc, i64 0, i64 0), %.lr.ph.i121 ]
  %127 = fpext float %state.02.i123 to double
  %128 = fmul double %127, 1.100000e+00
  %129 = fptrunc double %128 to float
  store float %129, float* %.01.i124, align 4, !tbaa !42
  %130 = getelementptr inbounds float* %.01.i124, i64 1
  %131 = icmp eq float* %130, getelementptr inbounds ([1024 x float]* @dc, i64 1, i64 0)
  br i1 %131, label %.lr.ph.i129, label %.lr.ph.i125

.lr.ph.i129:                                      ; preds = %.lr.ph.i125, %.lr.ph.i129
  %state.02.i127 = phi float [ %134, %.lr.ph.i129 ], [ 1.000000e+00, %.lr.ph.i125 ]
  %.01.i128 = phi float* [ %135, %.lr.ph.i129 ], [ getelementptr inbounds ([1024 x float]* @dd, i64 0, i64 0), %.lr.ph.i125 ]
  %132 = fpext float %state.02.i127 to double
  %133 = fmul double %132, 1.100000e+00
  %134 = fptrunc double %133 to float
  store float %134, float* %.01.i128, align 4, !tbaa !42
  %135 = getelementptr inbounds float* %.01.i128, i64 1
  %136 = icmp eq float* %135, getelementptr inbounds ([1024 x float]* @dd, i64 1, i64 0)
  br i1 %136, label %_Z17init_memory_floatPfS_.exit130, label %.lr.ph.i129

_Z17init_memory_floatPfS_.exit130:                ; preds = %.lr.ph.i129
  call void @_Z8example1v()
  %137 = bitcast %class.Timer* %atimer to i8*
  call void @llvm.lifetime.start(i64 48, i8* %137) #1
  %138 = getelementptr inbounds %class.Timer* %atimer, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str, i64 0, i64 0), i8** %138, align 8, !tbaa !44
  %139 = getelementptr inbounds %class.Timer* %atimer, i64 0, i32 1
  %140 = zext i1 %10 to i8
  store i8 %140, i8* %139, align 8, !tbaa !49
  %141 = getelementptr inbounds %class.Timer* %atimer, i64 0, i32 2
  %142 = call i32 @gettimeofday(%struct.timeval* %141, %struct.timezone* null) #1
  br label %143

; <label>:143                                     ; preds = %143, %_Z17init_memory_floatPfS_.exit130
  %i.0272 = phi i32 [ 0, %_Z17init_memory_floatPfS_.exit130 ], [ %144, %143 ]
  call void @_Z8example1v()
  %144 = add nsw i32 %i.0272, 1
  %exitcond304 = icmp eq i32 %144, 2621440
  br i1 %exitcond304, label %.lr.ph.i136, label %143

.loopexit:                                        ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit73, %.lr.ph
  %lpad.loopexit = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  br label %145

.nonloopexit:                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit140, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit147, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit154, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit161, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit168, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit178, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit189, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit196, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit203, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit206, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit217, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit227, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit238, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit224, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit175, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit133, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit, %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge, %663, %630
  %lpad.nonloopexit = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  br label %145

; <label>:145                                     ; preds = %.nonloopexit, %.loopexit
  %lpad.phi = phi { i8*, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.nonloopexit, %.nonloopexit ]
  %146 = extractvalue { i8*, i32 } %lpad.phi, 0
  %147 = extractvalue { i8*, i32 } %lpad.phi, 1
  br label %689

; <label>:148                                     ; preds = %170
  %149 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %150 = extractvalue { i8*, i32 } %149, 0
  %151 = extractvalue { i8*, i32 } %149, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer)
          to label %689 unwind label %697

.lr.ph.i136:                                      ; preds = %143, %.lr.ph.i136
  %state.02.i134 = phi i32 [ %158, %.lr.ph.i136 ], [ 1, %143 ]
  %.01.i135 = phi i8* [ %159, %.lr.ph.i136 ], [ bitcast ([2048 x i32]* @a to i8*), %143 ]
  %152 = mul i32 %state.02.i134, 3
  %153 = load i8* %.01.i135, align 1, !tbaa !41
  %154 = zext i8 %153 to i32
  %155 = xor i32 %154, %152
  %156 = lshr i32 %152, 8
  %157 = shl i32 %155, 8
  %158 = xor i32 %157, %156
  %159 = getelementptr inbounds i8* %.01.i135, i64 1
  %160 = icmp eq i8* %159, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 0, i64 256) to i8*)
  br i1 %160, label %_Z13digest_memoryPvS_.exit137, label %.lr.ph.i136

_Z13digest_memoryPvS_.exit137:                    ; preds = %.lr.ph.i136
  store i32 %158, i32* %r, align 4, !tbaa !5
  %161 = getelementptr inbounds %"class.std::vector"* %results, i64 0, i32 0, i32 0, i32 1
  %162 = load i32** %161, align 8, !tbaa !50
  %163 = getelementptr inbounds %"class.std::vector"* %results, i64 0, i32 0, i32 0, i32 2
  %164 = load i32** %163, align 8, !tbaa !53
  %165 = icmp eq i32* %162, %164
  br i1 %165, label %170, label %166

; <label>:166                                     ; preds = %_Z13digest_memoryPvS_.exit137
  %167 = icmp eq i32* %162, null
  br i1 %167, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i138, label %168

; <label>:168                                     ; preds = %166
  store i32 %158, i32* %162, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i138

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i138: ; preds = %168, %166
  %169 = getelementptr inbounds i32* %162, i64 1
  store i32* %169, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit140

; <label>:170                                     ; preds = %_Z13digest_memoryPvS_.exit137
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %162, i32* %r)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit140 unwind label %148

_ZNSt6vectorIjSaIjEE9push_backERKj.exit140:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i138, %170
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer)
          to label %171 unwind label %.nonloopexit

; <label>:171                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit140
  call void @llvm.lifetime.end(i64 48, i8* %137) #1
  call void @_Z9example2aii(i32 1024, i32 2)
  %172 = bitcast %class.Timer* %atimer1 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %172) #1
  %173 = getelementptr inbounds %class.Timer* %atimer1, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str1, i64 0, i64 0), i8** %173, align 8, !tbaa !44
  %174 = getelementptr inbounds %class.Timer* %atimer1, i64 0, i32 1
  store i8 %140, i8* %174, align 8, !tbaa !49
  %175 = getelementptr inbounds %class.Timer* %atimer1, i64 0, i32 2
  %176 = call i32 @gettimeofday(%struct.timeval* %175, %struct.timezone* null) #1
  br label %177

; <label>:177                                     ; preds = %177, %171
  %i2.0271 = phi i32 [ 0, %171 ], [ %178, %177 ]
  call void @_Z9example2aii(i32 1024, i32 2)
  %178 = add nsw i32 %i2.0271, 1
  %exitcond303 = icmp eq i32 %178, 1048576
  br i1 %exitcond303, label %.lr.ph.i143, label %177

; <label>:179                                     ; preds = %199
  %180 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %181 = extractvalue { i8*, i32 } %180, 0
  %182 = extractvalue { i8*, i32 } %180, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer1)
          to label %689 unwind label %697

.lr.ph.i143:                                      ; preds = %177, %.lr.ph.i143
  %state.02.i141 = phi i32 [ %189, %.lr.ph.i143 ], [ 1, %177 ]
  %.01.i142 = phi i8* [ %190, %.lr.ph.i143 ], [ bitcast ([2048 x i32]* @b to i8*), %177 ]
  %183 = mul i32 %state.02.i141, 3
  %184 = load i8* %.01.i142, align 1, !tbaa !41
  %185 = zext i8 %184 to i32
  %186 = xor i32 %185, %183
  %187 = lshr i32 %183, 8
  %188 = shl i32 %186, 8
  %189 = xor i32 %188, %187
  %190 = getelementptr inbounds i8* %.01.i142, i64 1
  %191 = icmp eq i8* %190, bitcast (i32* getelementptr inbounds ([2048 x i32]* @b, i64 0, i64 1024) to i8*)
  br i1 %191, label %_Z13digest_memoryPvS_.exit144, label %.lr.ph.i143

_Z13digest_memoryPvS_.exit144:                    ; preds = %.lr.ph.i143
  store i32 %189, i32* %r3, align 4, !tbaa !5
  %192 = load i32** %161, align 8, !tbaa !50
  %193 = load i32** %163, align 8, !tbaa !53
  %194 = icmp eq i32* %192, %193
  br i1 %194, label %199, label %195

; <label>:195                                     ; preds = %_Z13digest_memoryPvS_.exit144
  %196 = icmp eq i32* %192, null
  br i1 %196, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i145, label %197

; <label>:197                                     ; preds = %195
  store i32 %189, i32* %192, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i145

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i145: ; preds = %197, %195
  %198 = getelementptr inbounds i32* %192, i64 1
  store i32* %198, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit147

; <label>:199                                     ; preds = %_Z13digest_memoryPvS_.exit144
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %192, i32* %r3)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit147 unwind label %179

_ZNSt6vectorIjSaIjEE9push_backERKj.exit147:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i145, %199
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer1)
          to label %200 unwind label %.nonloopexit

; <label>:200                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit147
  call void @llvm.lifetime.end(i64 48, i8* %172) #1
  call void @_Z9example2bii(i32 1024, i32 undef)
  %201 = bitcast %class.Timer* %atimer4 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %201) #1
  %202 = getelementptr inbounds %class.Timer* %atimer4, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str2, i64 0, i64 0), i8** %202, align 8, !tbaa !44
  %203 = getelementptr inbounds %class.Timer* %atimer4, i64 0, i32 1
  store i8 %140, i8* %203, align 8, !tbaa !49
  %204 = getelementptr inbounds %class.Timer* %atimer4, i64 0, i32 2
  %205 = call i32 @gettimeofday(%struct.timeval* %204, %struct.timezone* null) #1
  br label %206

; <label>:206                                     ; preds = %206, %200
  %i5.0270 = phi i32 [ 0, %200 ], [ %207, %206 ]
  call void @_Z9example2bii(i32 1024, i32 undef)
  %207 = add nsw i32 %i5.0270, 1
  %exitcond302 = icmp eq i32 %207, 524288
  br i1 %exitcond302, label %.lr.ph.i150, label %206

; <label>:208                                     ; preds = %228
  %209 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %210 = extractvalue { i8*, i32 } %209, 0
  %211 = extractvalue { i8*, i32 } %209, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer4)
          to label %689 unwind label %697

.lr.ph.i150:                                      ; preds = %206, %.lr.ph.i150
  %state.02.i148 = phi i32 [ %218, %.lr.ph.i150 ], [ 1, %206 ]
  %.01.i149 = phi i8* [ %219, %.lr.ph.i150 ], [ bitcast ([2048 x i32]* @a to i8*), %206 ]
  %212 = mul i32 %state.02.i148, 3
  %213 = load i8* %.01.i149, align 1, !tbaa !41
  %214 = zext i8 %213 to i32
  %215 = xor i32 %214, %212
  %216 = lshr i32 %212, 8
  %217 = shl i32 %215, 8
  %218 = xor i32 %217, %216
  %219 = getelementptr inbounds i8* %.01.i149, i64 1
  %220 = icmp eq i8* %219, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 0, i64 1024) to i8*)
  br i1 %220, label %_Z13digest_memoryPvS_.exit151, label %.lr.ph.i150

_Z13digest_memoryPvS_.exit151:                    ; preds = %.lr.ph.i150
  store i32 %218, i32* %r6, align 4, !tbaa !5
  %221 = load i32** %161, align 8, !tbaa !50
  %222 = load i32** %163, align 8, !tbaa !53
  %223 = icmp eq i32* %221, %222
  br i1 %223, label %228, label %224

; <label>:224                                     ; preds = %_Z13digest_memoryPvS_.exit151
  %225 = icmp eq i32* %221, null
  br i1 %225, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i152, label %226

; <label>:226                                     ; preds = %224
  store i32 %218, i32* %221, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i152

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i152: ; preds = %226, %224
  %227 = getelementptr inbounds i32* %221, i64 1
  store i32* %227, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit154

; <label>:228                                     ; preds = %_Z13digest_memoryPvS_.exit151
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %221, i32* %r6)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit154 unwind label %208

_ZNSt6vectorIjSaIjEE9push_backERKj.exit154:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i152, %228
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer4)
          to label %229 unwind label %.nonloopexit

; <label>:229                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit154
  call void @llvm.lifetime.end(i64 48, i8* %201) #1
  call void @_Z8example3iPiS_(i32 1024, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0))
  %230 = bitcast %class.Timer* %atimer7 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %230) #1
  %231 = getelementptr inbounds %class.Timer* %atimer7, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str3, i64 0, i64 0), i8** %231, align 8, !tbaa !44
  %232 = getelementptr inbounds %class.Timer* %atimer7, i64 0, i32 1
  store i8 %140, i8* %232, align 8, !tbaa !49
  %233 = getelementptr inbounds %class.Timer* %atimer7, i64 0, i32 2
  %234 = call i32 @gettimeofday(%struct.timeval* %233, %struct.timezone* null) #1
  br label %235

; <label>:235                                     ; preds = %235, %229
  %i8.0269 = phi i32 [ 0, %229 ], [ %236, %235 ]
  call void @_Z8example3iPiS_(i32 1024, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0))
  %236 = add nsw i32 %i8.0269, 1
  %exitcond301 = icmp eq i32 %236, 524288
  br i1 %exitcond301, label %.lr.ph.i157, label %235

; <label>:237                                     ; preds = %257
  %238 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %239 = extractvalue { i8*, i32 } %238, 0
  %240 = extractvalue { i8*, i32 } %238, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer7)
          to label %689 unwind label %697

.lr.ph.i157:                                      ; preds = %235, %.lr.ph.i157
  %state.02.i155 = phi i32 [ %247, %.lr.ph.i157 ], [ 1, %235 ]
  %.01.i156 = phi i8* [ %248, %.lr.ph.i157 ], [ bitcast ([1024 x i32]* @ia to i8*), %235 ]
  %241 = mul i32 %state.02.i155, 3
  %242 = load i8* %.01.i156, align 1, !tbaa !41
  %243 = zext i8 %242 to i32
  %244 = xor i32 %243, %241
  %245 = lshr i32 %241, 8
  %246 = shl i32 %244, 8
  %247 = xor i32 %246, %245
  %248 = getelementptr inbounds i8* %.01.i156, i64 1
  %249 = icmp eq i8* %248, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %249, label %_Z13digest_memoryPvS_.exit158, label %.lr.ph.i157

_Z13digest_memoryPvS_.exit158:                    ; preds = %.lr.ph.i157
  store i32 %247, i32* %r9, align 4, !tbaa !5
  %250 = load i32** %161, align 8, !tbaa !50
  %251 = load i32** %163, align 8, !tbaa !53
  %252 = icmp eq i32* %250, %251
  br i1 %252, label %257, label %253

; <label>:253                                     ; preds = %_Z13digest_memoryPvS_.exit158
  %254 = icmp eq i32* %250, null
  br i1 %254, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i159, label %255

; <label>:255                                     ; preds = %253
  store i32 %247, i32* %250, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i159

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i159: ; preds = %255, %253
  %256 = getelementptr inbounds i32* %250, i64 1
  store i32* %256, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit161

; <label>:257                                     ; preds = %_Z13digest_memoryPvS_.exit158
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %250, i32* %r9)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit161 unwind label %237

_ZNSt6vectorIjSaIjEE9push_backERKj.exit161:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i159, %257
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer7)
          to label %258 unwind label %.nonloopexit

; <label>:258                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit161
  call void @llvm.lifetime.end(i64 48, i8* %230) #1
  call void @_Z9example4aiPiS_(i32 1024, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0))
  %259 = bitcast %class.Timer* %atimer10 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %259) #1
  %260 = getelementptr inbounds %class.Timer* %atimer10, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str4, i64 0, i64 0), i8** %260, align 8, !tbaa !44
  %261 = getelementptr inbounds %class.Timer* %atimer10, i64 0, i32 1
  store i8 %140, i8* %261, align 8, !tbaa !49
  %262 = getelementptr inbounds %class.Timer* %atimer10, i64 0, i32 2
  %263 = call i32 @gettimeofday(%struct.timeval* %262, %struct.timezone* null) #1
  br label %264

; <label>:264                                     ; preds = %264, %258
  %i11.0268 = phi i32 [ 0, %258 ], [ %265, %264 ]
  call void @_Z9example4aiPiS_(i32 1024, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0))
  %265 = add nsw i32 %i11.0268, 1
  %exitcond300 = icmp eq i32 %265, 524288
  br i1 %exitcond300, label %.lr.ph.i164, label %264

; <label>:266                                     ; preds = %286
  %267 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %268 = extractvalue { i8*, i32 } %267, 0
  %269 = extractvalue { i8*, i32 } %267, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer10)
          to label %689 unwind label %697

.lr.ph.i164:                                      ; preds = %264, %.lr.ph.i164
  %state.02.i162 = phi i32 [ %276, %.lr.ph.i164 ], [ 1, %264 ]
  %.01.i163 = phi i8* [ %277, %.lr.ph.i164 ], [ bitcast ([1024 x i32]* @ia to i8*), %264 ]
  %270 = mul i32 %state.02.i162, 3
  %271 = load i8* %.01.i163, align 1, !tbaa !41
  %272 = zext i8 %271 to i32
  %273 = xor i32 %272, %270
  %274 = lshr i32 %270, 8
  %275 = shl i32 %273, 8
  %276 = xor i32 %275, %274
  %277 = getelementptr inbounds i8* %.01.i163, i64 1
  %278 = icmp eq i8* %277, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %278, label %_Z13digest_memoryPvS_.exit165, label %.lr.ph.i164

_Z13digest_memoryPvS_.exit165:                    ; preds = %.lr.ph.i164
  store i32 %276, i32* %r12, align 4, !tbaa !5
  %279 = load i32** %161, align 8, !tbaa !50
  %280 = load i32** %163, align 8, !tbaa !53
  %281 = icmp eq i32* %279, %280
  br i1 %281, label %286, label %282

; <label>:282                                     ; preds = %_Z13digest_memoryPvS_.exit165
  %283 = icmp eq i32* %279, null
  br i1 %283, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i166, label %284

; <label>:284                                     ; preds = %282
  store i32 %276, i32* %279, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i166

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i166: ; preds = %284, %282
  %285 = getelementptr inbounds i32* %279, i64 1
  store i32* %285, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit168

; <label>:286                                     ; preds = %_Z13digest_memoryPvS_.exit165
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %279, i32* %r12)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit168 unwind label %266

_ZNSt6vectorIjSaIjEE9push_backERKj.exit168:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i166, %286
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer10)
          to label %287 unwind label %.nonloopexit

; <label>:287                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit168
  call void @llvm.lifetime.end(i64 48, i8* %259) #1
  call void @_Z9example4biPiS_(i32 1014, i32* undef, i32* undef)
  %288 = bitcast %class.Timer* %atimer13 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %288) #1
  %289 = getelementptr inbounds %class.Timer* %atimer13, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str5, i64 0, i64 0), i8** %289, align 8, !tbaa !44
  %290 = getelementptr inbounds %class.Timer* %atimer13, i64 0, i32 1
  store i8 %140, i8* %290, align 8, !tbaa !49
  %291 = getelementptr inbounds %class.Timer* %atimer13, i64 0, i32 2
  %292 = call i32 @gettimeofday(%struct.timeval* %291, %struct.timezone* null) #1
  br label %293

; <label>:293                                     ; preds = %293, %287
  %i14.0267 = phi i32 [ 0, %287 ], [ %294, %293 ]
  call void @_Z9example4biPiS_(i32 1014, i32* undef, i32* undef)
  %294 = add nsw i32 %i14.0267, 1
  %exitcond299 = icmp eq i32 %294, 524288
  br i1 %exitcond299, label %.lr.ph.i171, label %293

; <label>:295                                     ; preds = %315
  %296 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %297 = extractvalue { i8*, i32 } %296, 0
  %298 = extractvalue { i8*, i32 } %296, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer13)
          to label %689 unwind label %697

.lr.ph.i171:                                      ; preds = %293, %.lr.ph.i171
  %state.02.i169 = phi i32 [ %305, %.lr.ph.i171 ], [ 1, %293 ]
  %.01.i170 = phi i8* [ %306, %.lr.ph.i171 ], [ bitcast ([1024 x i32]* @ia to i8*), %293 ]
  %299 = mul i32 %state.02.i169, 3
  %300 = load i8* %.01.i170, align 1, !tbaa !41
  %301 = zext i8 %300 to i32
  %302 = xor i32 %301, %299
  %303 = lshr i32 %299, 8
  %304 = shl i32 %302, 8
  %305 = xor i32 %304, %303
  %306 = getelementptr inbounds i8* %.01.i170, i64 1
  %307 = icmp eq i8* %306, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %307, label %_Z13digest_memoryPvS_.exit172, label %.lr.ph.i171

_Z13digest_memoryPvS_.exit172:                    ; preds = %.lr.ph.i171
  store i32 %305, i32* %r15, align 4, !tbaa !5
  %308 = load i32** %161, align 8, !tbaa !50
  %309 = load i32** %163, align 8, !tbaa !53
  %310 = icmp eq i32* %308, %309
  br i1 %310, label %315, label %311

; <label>:311                                     ; preds = %_Z13digest_memoryPvS_.exit172
  %312 = icmp eq i32* %308, null
  br i1 %312, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i176, label %313

; <label>:313                                     ; preds = %311
  store i32 %305, i32* %308, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i176

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i176: ; preds = %313, %311
  %314 = getelementptr inbounds i32* %308, i64 1
  store i32* %314, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit178

; <label>:315                                     ; preds = %_Z13digest_memoryPvS_.exit172
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %308, i32* %r15)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit178 unwind label %295

_ZNSt6vectorIjSaIjEE9push_backERKj.exit178:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i176, %315
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer13)
          to label %316 unwind label %.nonloopexit

; <label>:316                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit178
  call void @llvm.lifetime.end(i64 48, i8* %288) #1
  call void @_Z9example4ciPiS_(i32 1024, i32* undef, i32* undef)
  %317 = bitcast %class.Timer* %atimer16 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %317) #1
  %318 = getelementptr inbounds %class.Timer* %atimer16, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str6, i64 0, i64 0), i8** %318, align 8, !tbaa !44
  %319 = getelementptr inbounds %class.Timer* %atimer16, i64 0, i32 1
  store i8 %140, i8* %319, align 8, !tbaa !49
  %320 = getelementptr inbounds %class.Timer* %atimer16, i64 0, i32 2
  %321 = call i32 @gettimeofday(%struct.timeval* %320, %struct.timezone* null) #1
  br label %322

; <label>:322                                     ; preds = %322, %316
  %i17.0266 = phi i32 [ 0, %316 ], [ %323, %322 ]
  call void @_Z9example4ciPiS_(i32 1024, i32* undef, i32* undef)
  %323 = add nsw i32 %i17.0266, 1
  %exitcond298 = icmp eq i32 %323, 524288
  br i1 %exitcond298, label %.lr.ph.i181, label %322

; <label>:324                                     ; preds = %344
  %325 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %326 = extractvalue { i8*, i32 } %325, 0
  %327 = extractvalue { i8*, i32 } %325, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer16)
          to label %689 unwind label %697

.lr.ph.i181:                                      ; preds = %322, %.lr.ph.i181
  %state.02.i179 = phi i32 [ %334, %.lr.ph.i181 ], [ 1, %322 ]
  %.01.i180 = phi i8* [ %335, %.lr.ph.i181 ], [ bitcast ([1024 x i32]* @ib to i8*), %322 ]
  %328 = mul i32 %state.02.i179, 3
  %329 = load i8* %.01.i180, align 1, !tbaa !41
  %330 = zext i8 %329 to i32
  %331 = xor i32 %330, %328
  %332 = lshr i32 %328, 8
  %333 = shl i32 %331, 8
  %334 = xor i32 %333, %332
  %335 = getelementptr inbounds i8* %.01.i180, i64 1
  %336 = icmp eq i8* %335, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ib, i64 1, i64 0) to i8*)
  br i1 %336, label %_Z13digest_memoryPvS_.exit182, label %.lr.ph.i181

_Z13digest_memoryPvS_.exit182:                    ; preds = %.lr.ph.i181
  store i32 %334, i32* %r18, align 4, !tbaa !5
  %337 = load i32** %161, align 8, !tbaa !50
  %338 = load i32** %163, align 8, !tbaa !53
  %339 = icmp eq i32* %337, %338
  br i1 %339, label %344, label %340

; <label>:340                                     ; preds = %_Z13digest_memoryPvS_.exit182
  %341 = icmp eq i32* %337, null
  br i1 %341, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i187, label %342

; <label>:342                                     ; preds = %340
  store i32 %334, i32* %337, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i187

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i187: ; preds = %342, %340
  %343 = getelementptr inbounds i32* %337, i64 1
  store i32* %343, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit189

; <label>:344                                     ; preds = %_Z13digest_memoryPvS_.exit182
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %337, i32* %r18)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit189 unwind label %324

_ZNSt6vectorIjSaIjEE9push_backERKj.exit189:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i187, %344
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer16)
          to label %345 unwind label %.nonloopexit

; <label>:345                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit189
  call void @llvm.lifetime.end(i64 48, i8* %317) #1
  call void @_Z8example7i(i32 4)
  %346 = bitcast %class.Timer* %atimer19 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %346) #1
  %347 = getelementptr inbounds %class.Timer* %atimer19, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str7, i64 0, i64 0), i8** %347, align 8, !tbaa !44
  %348 = getelementptr inbounds %class.Timer* %atimer19, i64 0, i32 1
  store i8 %140, i8* %348, align 8, !tbaa !49
  %349 = getelementptr inbounds %class.Timer* %atimer19, i64 0, i32 2
  %350 = call i32 @gettimeofday(%struct.timeval* %349, %struct.timezone* null) #1
  br label %351

; <label>:351                                     ; preds = %351, %345
  %i20.0265 = phi i32 [ 0, %345 ], [ %352, %351 ]
  call void @_Z8example7i(i32 4)
  %352 = add nsw i32 %i20.0265, 1
  %exitcond297 = icmp eq i32 %352, 1048576
  br i1 %exitcond297, label %.lr.ph.i192, label %351

; <label>:353                                     ; preds = %373
  %354 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %355 = extractvalue { i8*, i32 } %354, 0
  %356 = extractvalue { i8*, i32 } %354, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer19)
          to label %689 unwind label %697

.lr.ph.i192:                                      ; preds = %351, %.lr.ph.i192
  %state.02.i190 = phi i32 [ %363, %.lr.ph.i192 ], [ 1, %351 ]
  %.01.i191 = phi i8* [ %364, %.lr.ph.i192 ], [ bitcast ([2048 x i32]* @a to i8*), %351 ]
  %357 = mul i32 %state.02.i190, 3
  %358 = load i8* %.01.i191, align 1, !tbaa !41
  %359 = zext i8 %358 to i32
  %360 = xor i32 %359, %357
  %361 = lshr i32 %357, 8
  %362 = shl i32 %360, 8
  %363 = xor i32 %362, %361
  %364 = getelementptr inbounds i8* %.01.i191, i64 1
  %365 = icmp eq i8* %364, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 0, i64 1024) to i8*)
  br i1 %365, label %_Z13digest_memoryPvS_.exit193, label %.lr.ph.i192

_Z13digest_memoryPvS_.exit193:                    ; preds = %.lr.ph.i192
  store i32 %363, i32* %r21, align 4, !tbaa !5
  %366 = load i32** %161, align 8, !tbaa !50
  %367 = load i32** %163, align 8, !tbaa !53
  %368 = icmp eq i32* %366, %367
  br i1 %368, label %373, label %369

; <label>:369                                     ; preds = %_Z13digest_memoryPvS_.exit193
  %370 = icmp eq i32* %366, null
  br i1 %370, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i194, label %371

; <label>:371                                     ; preds = %369
  store i32 %363, i32* %366, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i194

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i194: ; preds = %371, %369
  %372 = getelementptr inbounds i32* %366, i64 1
  store i32* %372, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit196

; <label>:373                                     ; preds = %_Z13digest_memoryPvS_.exit193
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %366, i32* %r21)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit196 unwind label %353

_ZNSt6vectorIjSaIjEE9push_backERKj.exit196:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i194, %373
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer19)
          to label %374 unwind label %.nonloopexit

; <label>:374                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit196
  call void @llvm.lifetime.end(i64 48, i8* %346) #1
  call void @_Z8example8i(i32 8)
  %375 = bitcast %class.Timer* %atimer22 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %375) #1
  %376 = getelementptr inbounds %class.Timer* %atimer22, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str8, i64 0, i64 0), i8** %376, align 8, !tbaa !44
  %377 = getelementptr inbounds %class.Timer* %atimer22, i64 0, i32 1
  store i8 %140, i8* %377, align 8, !tbaa !49
  %378 = getelementptr inbounds %class.Timer* %atimer22, i64 0, i32 2
  %379 = call i32 @gettimeofday(%struct.timeval* %378, %struct.timezone* null) #1
  br label %380

; <label>:380                                     ; preds = %380, %374
  %i23.0264 = phi i32 [ 0, %374 ], [ %381, %380 ]
  call void @_Z8example8i(i32 8)
  %381 = add nsw i32 %i23.0264, 1
  %exitcond296 = icmp eq i32 %381, 65536
  br i1 %exitcond296, label %.lr.ph.i199, label %380

; <label>:382                                     ; preds = %402
  %383 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %384 = extractvalue { i8*, i32 } %383, 0
  %385 = extractvalue { i8*, i32 } %383, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer22)
          to label %689 unwind label %697

.lr.ph.i199:                                      ; preds = %380, %.lr.ph.i199
  %state.02.i197 = phi i32 [ %392, %.lr.ph.i199 ], [ 1, %380 ]
  %.01.i198 = phi i8* [ %393, %.lr.ph.i199 ], [ bitcast ([32 x [1024 x i32]]* @G to i8*), %380 ]
  %386 = mul i32 %state.02.i197, 3
  %387 = load i8* %.01.i198, align 1, !tbaa !41
  %388 = zext i8 %387 to i32
  %389 = xor i32 %388, %386
  %390 = lshr i32 %386, 8
  %391 = shl i32 %389, 8
  %392 = xor i32 %391, %390
  %393 = getelementptr inbounds i8* %.01.i198, i64 1
  %394 = icmp eq i8* %393, bitcast (i32* getelementptr inbounds ([32 x [1024 x i32]]* @G, i64 0, i64 1, i64 0) to i8*)
  br i1 %394, label %_Z13digest_memoryPvS_.exit200, label %.lr.ph.i199

_Z13digest_memoryPvS_.exit200:                    ; preds = %.lr.ph.i199
  store i32 %392, i32* %r24, align 4, !tbaa !5
  %395 = load i32** %161, align 8, !tbaa !50
  %396 = load i32** %163, align 8, !tbaa !53
  %397 = icmp eq i32* %395, %396
  br i1 %397, label %402, label %398

; <label>:398                                     ; preds = %_Z13digest_memoryPvS_.exit200
  %399 = icmp eq i32* %395, null
  br i1 %399, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i201, label %400

; <label>:400                                     ; preds = %398
  store i32 %392, i32* %395, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i201

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i201: ; preds = %400, %398
  %401 = getelementptr inbounds i32* %395, i64 1
  store i32* %401, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit203

; <label>:402                                     ; preds = %_Z13digest_memoryPvS_.exit200
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %395, i32* %r24)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit203 unwind label %382

_ZNSt6vectorIjSaIjEE9push_backERKj.exit203:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i201, %402
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer22)
          to label %403 unwind label %.nonloopexit

; <label>:403                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit203
  call void @llvm.lifetime.end(i64 48, i8* %375) #1
  call void @_Z8example9Pj(i32* %dummy)
  %404 = bitcast %class.Timer* %atimer25 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %404) #1
  %405 = getelementptr inbounds %class.Timer* %atimer25, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str9, i64 0, i64 0), i8** %405, align 8, !tbaa !44
  %406 = getelementptr inbounds %class.Timer* %atimer25, i64 0, i32 1
  store i8 %140, i8* %406, align 8, !tbaa !49
  %407 = getelementptr inbounds %class.Timer* %atimer25, i64 0, i32 2
  %408 = call i32 @gettimeofday(%struct.timeval* %407, %struct.timezone* null) #1
  br label %409

; <label>:409                                     ; preds = %409, %403
  %i26.0263 = phi i32 [ 0, %403 ], [ %410, %409 ]
  call void @_Z8example9Pj(i32* %dummy)
  %410 = add nsw i32 %i26.0263, 1
  %exitcond295 = icmp eq i32 %410, 524288
  br i1 %exitcond295, label %415, label %409

; <label>:411                                     ; preds = %424
  %412 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %413 = extractvalue { i8*, i32 } %412, 0
  %414 = extractvalue { i8*, i32 } %412, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer25)
          to label %689 unwind label %697

; <label>:415                                     ; preds = %409
  %416 = load i32* %dummy, align 4, !tbaa !5
  store i32 %416, i32* %r27, align 4, !tbaa !5
  %417 = load i32** %161, align 8, !tbaa !50
  %418 = load i32** %163, align 8, !tbaa !53
  %419 = icmp eq i32* %417, %418
  br i1 %419, label %424, label %420

; <label>:420                                     ; preds = %415
  %421 = icmp eq i32* %417, null
  br i1 %421, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i204, label %422

; <label>:422                                     ; preds = %420
  store i32 %416, i32* %417, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i204

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i204: ; preds = %422, %420
  %423 = getelementptr inbounds i32* %417, i64 1
  store i32* %423, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit206

; <label>:424                                     ; preds = %415
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %417, i32* %r27)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit206 unwind label %411

_ZNSt6vectorIjSaIjEE9push_backERKj.exit206:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i204, %424
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer25)
          to label %425 unwind label %.nonloopexit

; <label>:425                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit206
  call void @llvm.lifetime.end(i64 48, i8* %404) #1
  call void @_Z10example10aPsS_S_PiS0_S0_(i16* getelementptr inbounds ([1024 x i16]* @sa, i64 0, i64 0), i16* getelementptr inbounds ([1024 x i16]* @sb, i64 0, i64 0), i16* getelementptr inbounds ([1024 x i16]* @sc, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ic, i64 0, i64 0))
  %426 = bitcast %class.Timer* %atimer28 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %426) #1
  %427 = getelementptr inbounds %class.Timer* %atimer28, i64 0, i32 0
  store i8* getelementptr inbounds ([11 x i8]* @.str10, i64 0, i64 0), i8** %427, align 8, !tbaa !44
  %428 = getelementptr inbounds %class.Timer* %atimer28, i64 0, i32 1
  store i8 %140, i8* %428, align 8, !tbaa !49
  %429 = getelementptr inbounds %class.Timer* %atimer28, i64 0, i32 2
  %430 = call i32 @gettimeofday(%struct.timeval* %429, %struct.timezone* null) #1
  br label %431

; <label>:431                                     ; preds = %431, %425
  %i29.0262 = phi i32 [ 0, %425 ], [ %432, %431 ]
  call void @_Z10example10aPsS_S_PiS0_S0_(i16* getelementptr inbounds ([1024 x i16]* @sa, i64 0, i64 0), i16* getelementptr inbounds ([1024 x i16]* @sb, i64 0, i64 0), i16* getelementptr inbounds ([1024 x i16]* @sc, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ic, i64 0, i64 0))
  %432 = add nsw i32 %i29.0262, 1
  %exitcond294 = icmp eq i32 %432, 524288
  br i1 %exitcond294, label %.lr.ph.i209, label %431

; <label>:433                                     ; preds = %463
  %434 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %435 = extractvalue { i8*, i32 } %434, 0
  %436 = extractvalue { i8*, i32 } %434, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer28)
          to label %689 unwind label %697

.lr.ph.i209:                                      ; preds = %431, %.lr.ph.i209
  %state.02.i207 = phi i32 [ %443, %.lr.ph.i209 ], [ 1, %431 ]
  %.01.i208 = phi i8* [ %444, %.lr.ph.i209 ], [ bitcast ([1024 x i32]* @ia to i8*), %431 ]
  %437 = mul i32 %state.02.i207, 3
  %438 = load i8* %.01.i208, align 1, !tbaa !41
  %439 = zext i8 %438 to i32
  %440 = xor i32 %439, %437
  %441 = lshr i32 %437, 8
  %442 = shl i32 %440, 8
  %443 = xor i32 %442, %441
  %444 = getelementptr inbounds i8* %.01.i208, i64 1
  %445 = icmp eq i8* %444, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %445, label %.lr.ph.i213, label %.lr.ph.i209

.lr.ph.i213:                                      ; preds = %.lr.ph.i209, %.lr.ph.i213
  %state.02.i211 = phi i32 [ %452, %.lr.ph.i213 ], [ 1, %.lr.ph.i209 ]
  %.01.i212 = phi i8* [ %453, %.lr.ph.i213 ], [ bitcast ([1024 x i16]* @sa to i8*), %.lr.ph.i209 ]
  %446 = mul i32 %state.02.i211, 3
  %447 = load i8* %.01.i212, align 1, !tbaa !41
  %448 = zext i8 %447 to i32
  %449 = xor i32 %448, %446
  %450 = lshr i32 %446, 8
  %451 = shl i32 %449, 8
  %452 = xor i32 %451, %450
  %453 = getelementptr inbounds i8* %.01.i212, i64 1
  %454 = icmp eq i8* %453, bitcast (i16* getelementptr inbounds ([1024 x i16]* @sa, i64 1, i64 0) to i8*)
  br i1 %454, label %_Z13digest_memoryPvS_.exit214, label %.lr.ph.i213

_Z13digest_memoryPvS_.exit214:                    ; preds = %.lr.ph.i213
  %455 = add i32 %452, %443
  store i32 %455, i32* %r30, align 4, !tbaa !5
  %456 = load i32** %161, align 8, !tbaa !50
  %457 = load i32** %163, align 8, !tbaa !53
  %458 = icmp eq i32* %456, %457
  br i1 %458, label %463, label %459

; <label>:459                                     ; preds = %_Z13digest_memoryPvS_.exit214
  %460 = icmp eq i32* %456, null
  br i1 %460, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i215, label %461

; <label>:461                                     ; preds = %459
  store i32 %455, i32* %456, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i215

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i215: ; preds = %461, %459
  %462 = getelementptr inbounds i32* %456, i64 1
  store i32* %462, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit217

; <label>:463                                     ; preds = %_Z13digest_memoryPvS_.exit214
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %456, i32* %r30)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit217 unwind label %433

_ZNSt6vectorIjSaIjEE9push_backERKj.exit217:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i215, %463
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer28)
          to label %464 unwind label %.nonloopexit

; <label>:464                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit217
  call void @llvm.lifetime.end(i64 48, i8* %426) #1
  call void @_Z10example10bPsS_S_PiS0_S0_(i16* undef, i16* getelementptr inbounds ([1024 x i16]* @sb, i64 0, i64 0), i16* undef, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* undef, i32* undef)
  %465 = bitcast %class.Timer* %atimer31 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %465) #1
  %466 = getelementptr inbounds %class.Timer* %atimer31, i64 0, i32 0
  store i8* getelementptr inbounds ([11 x i8]* @.str11, i64 0, i64 0), i8** %466, align 8, !tbaa !44
  %467 = getelementptr inbounds %class.Timer* %atimer31, i64 0, i32 1
  store i8 %140, i8* %467, align 8, !tbaa !49
  %468 = getelementptr inbounds %class.Timer* %atimer31, i64 0, i32 2
  %469 = call i32 @gettimeofday(%struct.timeval* %468, %struct.timezone* null) #1
  br label %470

; <label>:470                                     ; preds = %470, %464
  %i32.0261 = phi i32 [ 0, %464 ], [ %471, %470 ]
  call void @_Z10example10bPsS_S_PiS0_S0_(i16* undef, i16* getelementptr inbounds ([1024 x i16]* @sb, i64 0, i64 0), i16* undef, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* undef, i32* undef)
  %471 = add nsw i32 %i32.0261, 1
  %exitcond293 = icmp eq i32 %471, 1048576
  br i1 %exitcond293, label %.lr.ph.i220, label %470

; <label>:472                                     ; preds = %492
  %473 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %474 = extractvalue { i8*, i32 } %473, 0
  %475 = extractvalue { i8*, i32 } %473, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer31)
          to label %689 unwind label %697

.lr.ph.i220:                                      ; preds = %470, %.lr.ph.i220
  %state.02.i218 = phi i32 [ %482, %.lr.ph.i220 ], [ 1, %470 ]
  %.01.i219 = phi i8* [ %483, %.lr.ph.i220 ], [ bitcast ([1024 x i32]* @ia to i8*), %470 ]
  %476 = mul i32 %state.02.i218, 3
  %477 = load i8* %.01.i219, align 1, !tbaa !41
  %478 = zext i8 %477 to i32
  %479 = xor i32 %478, %476
  %480 = lshr i32 %476, 8
  %481 = shl i32 %479, 8
  %482 = xor i32 %481, %480
  %483 = getelementptr inbounds i8* %.01.i219, i64 1
  %484 = icmp eq i8* %483, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %484, label %_Z13digest_memoryPvS_.exit221, label %.lr.ph.i220

_Z13digest_memoryPvS_.exit221:                    ; preds = %.lr.ph.i220
  store i32 %482, i32* %r33, align 4, !tbaa !5
  %485 = load i32** %161, align 8, !tbaa !50
  %486 = load i32** %163, align 8, !tbaa !53
  %487 = icmp eq i32* %485, %486
  br i1 %487, label %492, label %488

; <label>:488                                     ; preds = %_Z13digest_memoryPvS_.exit221
  %489 = icmp eq i32* %485, null
  br i1 %489, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i225, label %490

; <label>:490                                     ; preds = %488
  store i32 %482, i32* %485, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i225

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i225: ; preds = %490, %488
  %491 = getelementptr inbounds i32* %485, i64 1
  store i32* %491, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit227

; <label>:492                                     ; preds = %_Z13digest_memoryPvS_.exit221
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %485, i32* %r33)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit227 unwind label %472

_ZNSt6vectorIjSaIjEE9push_backERKj.exit227:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i225, %492
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer31)
          to label %493 unwind label %.nonloopexit

; <label>:493                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit227
  call void @llvm.lifetime.end(i64 48, i8* %465) #1
  call void @_Z9example11v()
  %494 = bitcast %class.Timer* %atimer34 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %494) #1
  %495 = getelementptr inbounds %class.Timer* %atimer34, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str12, i64 0, i64 0), i8** %495, align 8, !tbaa !44
  %496 = getelementptr inbounds %class.Timer* %atimer34, i64 0, i32 1
  store i8 %140, i8* %496, align 8, !tbaa !49
  %497 = getelementptr inbounds %class.Timer* %atimer34, i64 0, i32 2
  %498 = call i32 @gettimeofday(%struct.timeval* %497, %struct.timezone* null) #1
  br label %499

; <label>:499                                     ; preds = %499, %493
  %i35.0260 = phi i32 [ 0, %493 ], [ %500, %499 ]
  call void @_Z9example11v()
  %500 = add nsw i32 %i35.0260, 1
  %exitcond292 = icmp eq i32 %500, 524288
  br i1 %exitcond292, label %.lr.ph.i230, label %499

; <label>:501                                     ; preds = %521
  %502 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %503 = extractvalue { i8*, i32 } %502, 0
  %504 = extractvalue { i8*, i32 } %502, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer34)
          to label %689 unwind label %697

.lr.ph.i230:                                      ; preds = %499, %.lr.ph.i230
  %state.02.i228 = phi i32 [ %511, %.lr.ph.i230 ], [ 1, %499 ]
  %.01.i229 = phi i8* [ %512, %.lr.ph.i230 ], [ bitcast ([2048 x i32]* @d to i8*), %499 ]
  %505 = mul i32 %state.02.i228, 3
  %506 = load i8* %.01.i229, align 1, !tbaa !41
  %507 = zext i8 %506 to i32
  %508 = xor i32 %507, %505
  %509 = lshr i32 %505, 8
  %510 = shl i32 %508, 8
  %511 = xor i32 %510, %509
  %512 = getelementptr inbounds i8* %.01.i229, i64 1
  %513 = icmp eq i8* %512, bitcast (i32* getelementptr inbounds ([2048 x i32]* @d, i64 0, i64 1024) to i8*)
  br i1 %513, label %_Z13digest_memoryPvS_.exit231, label %.lr.ph.i230

_Z13digest_memoryPvS_.exit231:                    ; preds = %.lr.ph.i230
  store i32 %511, i32* %r36, align 4, !tbaa !5
  %514 = load i32** %161, align 8, !tbaa !50
  %515 = load i32** %163, align 8, !tbaa !53
  %516 = icmp eq i32* %514, %515
  br i1 %516, label %521, label %517

; <label>:517                                     ; preds = %_Z13digest_memoryPvS_.exit231
  %518 = icmp eq i32* %514, null
  br i1 %518, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i236, label %519

; <label>:519                                     ; preds = %517
  store i32 %511, i32* %514, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i236

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i236: ; preds = %519, %517
  %520 = getelementptr inbounds i32* %514, i64 1
  store i32* %520, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit238

; <label>:521                                     ; preds = %_Z13digest_memoryPvS_.exit231
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %514, i32* %r36)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit238 unwind label %501

_ZNSt6vectorIjSaIjEE9push_backERKj.exit238:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i236, %521
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer34)
          to label %522 unwind label %.nonloopexit

; <label>:522                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit238
  call void @llvm.lifetime.end(i64 48, i8* %494) #1
  call void @_Z9example12v()
  %523 = bitcast %class.Timer* %atimer37 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %523) #1
  %524 = getelementptr inbounds %class.Timer* %atimer37, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str13, i64 0, i64 0), i8** %524, align 8, !tbaa !44
  %525 = getelementptr inbounds %class.Timer* %atimer37, i64 0, i32 1
  store i8 %140, i8* %525, align 8, !tbaa !49
  %526 = getelementptr inbounds %class.Timer* %atimer37, i64 0, i32 2
  %527 = call i32 @gettimeofday(%struct.timeval* %526, %struct.timezone* null) #1
  br label %528

; <label>:528                                     ; preds = %528, %522
  %i38.0259 = phi i32 [ 0, %522 ], [ %529, %528 ]
  call void @_Z9example12v()
  %529 = add nsw i32 %i38.0259, 1
  %exitcond291 = icmp eq i32 %529, 1048576
  br i1 %exitcond291, label %.lr.ph.i234, label %528

; <label>:530                                     ; preds = %550
  %531 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %532 = extractvalue { i8*, i32 } %531, 0
  %533 = extractvalue { i8*, i32 } %531, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer37)
          to label %689 unwind label %697

.lr.ph.i234:                                      ; preds = %528, %.lr.ph.i234
  %state.02.i232 = phi i32 [ %540, %.lr.ph.i234 ], [ 1, %528 ]
  %.01.i233 = phi i8* [ %541, %.lr.ph.i234 ], [ bitcast ([2048 x i32]* @a to i8*), %528 ]
  %534 = mul i32 %state.02.i232, 3
  %535 = load i8* %.01.i233, align 1, !tbaa !41
  %536 = zext i8 %535 to i32
  %537 = xor i32 %536, %534
  %538 = lshr i32 %534, 8
  %539 = shl i32 %537, 8
  %540 = xor i32 %539, %538
  %541 = getelementptr inbounds i8* %.01.i233, i64 1
  %542 = icmp eq i8* %541, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 0, i64 1024) to i8*)
  br i1 %542, label %_Z13digest_memoryPvS_.exit235, label %.lr.ph.i234

_Z13digest_memoryPvS_.exit235:                    ; preds = %.lr.ph.i234
  store i32 %540, i32* %r39, align 4, !tbaa !5
  %543 = load i32** %161, align 8, !tbaa !50
  %544 = load i32** %163, align 8, !tbaa !53
  %545 = icmp eq i32* %543, %544
  br i1 %545, label %550, label %546

; <label>:546                                     ; preds = %_Z13digest_memoryPvS_.exit235
  %547 = icmp eq i32* %543, null
  br i1 %547, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i222, label %548

; <label>:548                                     ; preds = %546
  store i32 %540, i32* %543, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i222

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i222: ; preds = %548, %546
  %549 = getelementptr inbounds i32* %543, i64 1
  store i32* %549, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit224

; <label>:550                                     ; preds = %_Z13digest_memoryPvS_.exit235
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %543, i32* %r39)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit224 unwind label %530

_ZNSt6vectorIjSaIjEE9push_backERKj.exit224:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i222, %550
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer37)
          to label %551 unwind label %.nonloopexit

; <label>:551                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit224
  call void @llvm.lifetime.end(i64 48, i8* %523) #1
  call void @_Z9example23PtPj(i16* getelementptr inbounds ([1024 x i16]* @usa, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ua, i64 0, i64 0))
  %552 = bitcast %class.Timer* %atimer40 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %552) #1
  %553 = getelementptr inbounds %class.Timer* %atimer40, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str14, i64 0, i64 0), i8** %553, align 8, !tbaa !44
  %554 = getelementptr inbounds %class.Timer* %atimer40, i64 0, i32 1
  store i8 %140, i8* %554, align 8, !tbaa !49
  %555 = getelementptr inbounds %class.Timer* %atimer40, i64 0, i32 2
  %556 = call i32 @gettimeofday(%struct.timeval* %555, %struct.timezone* null) #1
  br label %557

; <label>:557                                     ; preds = %557, %551
  %i41.0258 = phi i32 [ 0, %551 ], [ %558, %557 ]
  call void @_Z9example23PtPj(i16* getelementptr inbounds ([1024 x i16]* @usa, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ua, i64 0, i64 0))
  %558 = add nsw i32 %i41.0258, 1
  %exitcond290 = icmp eq i32 %558, 2097152
  br i1 %exitcond290, label %.lr.ph.i185, label %557

; <label>:559                                     ; preds = %579
  %560 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %561 = extractvalue { i8*, i32 } %560, 0
  %562 = extractvalue { i8*, i32 } %560, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer40)
          to label %689 unwind label %697

.lr.ph.i185:                                      ; preds = %557, %.lr.ph.i185
  %state.02.i183 = phi i32 [ %569, %.lr.ph.i185 ], [ 1, %557 ]
  %.01.i184 = phi i8* [ %570, %.lr.ph.i185 ], [ bitcast ([1024 x i16]* @usa to i8*), %557 ]
  %563 = mul i32 %state.02.i183, 3
  %564 = load i8* %.01.i184, align 1, !tbaa !41
  %565 = zext i8 %564 to i32
  %566 = xor i32 %565, %563
  %567 = lshr i32 %563, 8
  %568 = shl i32 %566, 8
  %569 = xor i32 %568, %567
  %570 = getelementptr inbounds i8* %.01.i184, i64 1
  %571 = icmp eq i8* %570, bitcast (i16* getelementptr inbounds ([1024 x i16]* @usa, i64 0, i64 256) to i8*)
  br i1 %571, label %_Z13digest_memoryPvS_.exit186, label %.lr.ph.i185

_Z13digest_memoryPvS_.exit186:                    ; preds = %.lr.ph.i185
  store i32 %569, i32* %r42, align 4, !tbaa !5
  %572 = load i32** %161, align 8, !tbaa !50
  %573 = load i32** %163, align 8, !tbaa !53
  %574 = icmp eq i32* %572, %573
  br i1 %574, label %579, label %575

; <label>:575                                     ; preds = %_Z13digest_memoryPvS_.exit186
  %576 = icmp eq i32* %572, null
  br i1 %576, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i173, label %577

; <label>:577                                     ; preds = %575
  store i32 %569, i32* %572, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i173

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i173: ; preds = %577, %575
  %578 = getelementptr inbounds i32* %572, i64 1
  store i32* %578, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit175

; <label>:579                                     ; preds = %_Z13digest_memoryPvS_.exit186
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %572, i32* %r42)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit175 unwind label %559

_ZNSt6vectorIjSaIjEE9push_backERKj.exit175:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i173, %579
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer40)
          to label %580 unwind label %.nonloopexit

; <label>:580                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit175
  call void @llvm.lifetime.end(i64 48, i8* %552) #1
  call void @_Z9example24ss(i16 signext 2, i16 signext 4)
  %581 = bitcast %class.Timer* %atimer43 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %581) #1
  %582 = getelementptr inbounds %class.Timer* %atimer43, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str15, i64 0, i64 0), i8** %582, align 8, !tbaa !44
  %583 = getelementptr inbounds %class.Timer* %atimer43, i64 0, i32 1
  store i8 %140, i8* %583, align 8, !tbaa !49
  %584 = getelementptr inbounds %class.Timer* %atimer43, i64 0, i32 2
  %585 = call i32 @gettimeofday(%struct.timeval* %584, %struct.timezone* null) #1
  br label %586

; <label>:586                                     ; preds = %586, %580
  %i44.0257 = phi i32 [ 0, %580 ], [ %587, %586 ]
  call void @_Z9example24ss(i16 signext 2, i16 signext 4)
  %587 = add nsw i32 %i44.0257, 1
  %exitcond289 = icmp eq i32 %587, 524288
  br i1 %exitcond289, label %592, label %586

; <label>:588                                     ; preds = %600
  %589 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %590 = extractvalue { i8*, i32 } %589, 0
  %591 = extractvalue { i8*, i32 } %589, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer43)
          to label %689 unwind label %697

; <label>:592                                     ; preds = %586
  store i32 0, i32* %r45, align 4, !tbaa !5
  %593 = load i32** %161, align 8, !tbaa !50
  %594 = load i32** %163, align 8, !tbaa !53
  %595 = icmp eq i32* %593, %594
  br i1 %595, label %600, label %596

; <label>:596                                     ; preds = %592
  %597 = icmp eq i32* %593, null
  br i1 %597, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i131, label %598

; <label>:598                                     ; preds = %596
  store i32 0, i32* %593, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i131

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i131: ; preds = %598, %596
  %599 = getelementptr inbounds i32* %593, i64 1
  store i32* %599, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit133

; <label>:600                                     ; preds = %592
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %593, i32* %r45)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit133 unwind label %588

_ZNSt6vectorIjSaIjEE9push_backERKj.exit133:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i131, %600
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer43)
          to label %601 unwind label %.nonloopexit

; <label>:601                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit133
  call void @llvm.lifetime.end(i64 48, i8* %581) #1
  call void @_Z9example25v()
  %602 = bitcast %class.Timer* %atimer46 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %602) #1
  %603 = getelementptr inbounds %class.Timer* %atimer46, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str16, i64 0, i64 0), i8** %603, align 8, !tbaa !44
  %604 = getelementptr inbounds %class.Timer* %atimer46, i64 0, i32 1
  store i8 %140, i8* %604, align 8, !tbaa !49
  %605 = getelementptr inbounds %class.Timer* %atimer46, i64 0, i32 2
  %606 = call i32 @gettimeofday(%struct.timeval* %605, %struct.timezone* null) #1
  br label %607

; <label>:607                                     ; preds = %607, %601
  %i47.0256 = phi i32 [ 0, %601 ], [ %608, %607 ]
  call void @_Z9example25v()
  %608 = add nsw i32 %i47.0256, 1
  %exitcond = icmp eq i32 %608, 524288
  br i1 %exitcond, label %.lr.ph.i110, label %607

; <label>:609                                     ; preds = %629
  %610 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %611 = extractvalue { i8*, i32 } %610, 0
  %612 = extractvalue { i8*, i32 } %610, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer46)
          to label %689 unwind label %697

.lr.ph.i110:                                      ; preds = %607, %.lr.ph.i110
  %state.02.i108 = phi i32 [ %619, %.lr.ph.i110 ], [ 1, %607 ]
  %.01.i109 = phi i8* [ %620, %.lr.ph.i110 ], [ bitcast ([1024 x i32]* @dj to i8*), %607 ]
  %613 = mul i32 %state.02.i108, 3
  %614 = load i8* %.01.i109, align 1, !tbaa !41
  %615 = zext i8 %614 to i32
  %616 = xor i32 %615, %613
  %617 = lshr i32 %613, 8
  %618 = shl i32 %616, 8
  %619 = xor i32 %618, %617
  %620 = getelementptr inbounds i8* %.01.i109, i64 1
  %621 = icmp eq i8* %620, bitcast (i32* getelementptr inbounds ([1024 x i32]* @dj, i64 1, i64 0) to i8*)
  br i1 %621, label %_Z13digest_memoryPvS_.exit, label %.lr.ph.i110

_Z13digest_memoryPvS_.exit:                       ; preds = %.lr.ph.i110
  store i32 %619, i32* %r48, align 4, !tbaa !5
  %622 = load i32** %161, align 8, !tbaa !50
  %623 = load i32** %163, align 8, !tbaa !53
  %624 = icmp eq i32* %622, %623
  br i1 %624, label %629, label %625

; <label>:625                                     ; preds = %_Z13digest_memoryPvS_.exit
  %626 = icmp eq i32* %622, null
  br i1 %626, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i, label %627

; <label>:627                                     ; preds = %625
  store i32 %619, i32* %622, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i: ; preds = %627, %625
  %628 = getelementptr inbounds i32* %622, i64 1
  store i32* %628, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit

; <label>:629                                     ; preds = %_Z13digest_memoryPvS_.exit
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %622, i32* %r48)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit unwind label %609

_ZNSt6vectorIjSaIjEE9push_backERKj.exit:          ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i, %629
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer46)
          to label %630 unwind label %.nonloopexit

; <label>:630                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit
  call void @llvm.lifetime.end(i64 48, i8* %602) #1
  %631 = load i8** bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8**), align 8, !tbaa !54
  %632 = getelementptr i8* %631, i64 -24
  %633 = bitcast i8* %632 to i64*
  %634 = load i64* %633, align 8
  %.sum = add i64 %634, 24
  %635 = getelementptr inbounds i8* bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8*), i64 %.sum
  %636 = bitcast i8* %635 to i32*
  %637 = load i32* %636, align 4, !tbaa !56
  %638 = and i32 %637, -75
  %639 = or i32 %638, 8
  store i32 %639, i32* %636, align 4, !tbaa !56
  %640 = invoke %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([11 x i8]* @.str17, i64 0, i64 0), i64 10)
          to label %641 unwind label %.nonloopexit

; <label>:641                                     ; preds = %630
  %642 = getelementptr inbounds %"class.std::vector"* %results, i64 0, i32 0, i32 0, i32 0
  %643 = load i32** %642, align 8, !tbaa !27
  %644 = load i32** %161, align 8, !tbaa !27
  %645 = icmp eq i32* %643, %644
  br i1 %645, label %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit, label %.lr.ph.i91.preheader

.lr.ph.i91.preheader:                             ; preds = %641
  %646 = ptrtoint i32* %643 to i64
  %scevgep = getelementptr i32* %644, i64 -1
  %647 = ptrtoint i32* %scevgep to i64
  %648 = sub i64 %647, %646
  %649 = lshr i64 %648, 2
  %650 = add i64 %649, 1
  %end.idx = add i64 %649, 1
  %n.vec = and i64 %650, 9223372036854775800
  %cmp.zero = icmp eq i64 %n.vec, 0
  %ptr.ind.end = getelementptr i32* %643, i64 %n.vec
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.i91.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.i91.preheader ]
  %vec.phi = phi <4 x i32> [ %654, %vector.body ], [ zeroinitializer, %.lr.ph.i91.preheader ]
  %vec.phi323 = phi <4 x i32> [ %655, %vector.body ], [ zeroinitializer, %.lr.ph.i91.preheader ]
  %next.gep = getelementptr i32* %643, i64 %index
  %651 = bitcast i32* %next.gep to <4 x i32>*
  %wide.load = load <4 x i32>* %651, align 4
  %next.gep.sum357 = or i64 %index, 4
  %652 = getelementptr i32* %643, i64 %next.gep.sum357
  %653 = bitcast i32* %652 to <4 x i32>*
  %wide.load345 = load <4 x i32>* %653, align 4
  %654 = add <4 x i32> %wide.load, %vec.phi
  %655 = add <4 x i32> %wide.load345, %vec.phi323
  %index.next = add i64 %index, 8
  %656 = icmp eq i64 %index.next, %n.vec
  br i1 %656, label %middle.block, label %vector.body, !llvm.loop !58

middle.block:                                     ; preds = %vector.body, %.lr.ph.i91.preheader
  %resume.val = phi i32* [ %643, %.lr.ph.i91.preheader ], [ %ptr.ind.end, %vector.body ]
  %new.indc.resume.val = phi i64 [ 0, %.lr.ph.i91.preheader ], [ %n.vec, %vector.body ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %.lr.ph.i91.preheader ], [ %654, %vector.body ]
  %rdx.vec.exit.phi346 = phi <4 x i32> [ zeroinitializer, %.lr.ph.i91.preheader ], [ %655, %vector.body ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi346, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx347 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf348 = shufflevector <4 x i32> %bin.rdx347, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx349 = add <4 x i32> %bin.rdx347, %rdx.shuf348
  %657 = extractelement <4 x i32> %bin.rdx349, i32 0
  %cmp.n = icmp eq i64 %end.idx, %new.indc.resume.val
  br i1 %cmp.n, label %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit, label %.lr.ph.i91

.lr.ph.i91:                                       ; preds = %middle.block, %.lr.ph.i91
  %.03.i = phi i32 [ %659, %.lr.ph.i91 ], [ %657, %middle.block ]
  %__first.coerce12.i = phi i32* [ %660, %.lr.ph.i91 ], [ %resume.val, %middle.block ]
  %658 = load i32* %__first.coerce12.i, align 4, !tbaa !5
  %659 = add i32 %658, %.03.i
  %660 = getelementptr inbounds i32* %__first.coerce12.i, i64 1
  %661 = icmp eq i32* %660, %644
  br i1 %661, label %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit, label %.lr.ph.i91, !llvm.loop !59

_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit: ; preds = %.lr.ph.i91, %middle.block, %641
  %.0.lcssa.i = phi i32 [ 0, %641 ], [ %659, %.lr.ph.i91 ], [ %657, %middle.block ]
  %662 = invoke %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* @_ZSt4cout, i32 %.0.lcssa.i)
          to label %663 unwind label %.nonloopexit

; <label>:663                                     ; preds = %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit
  %664 = invoke %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* %662, i8* getelementptr inbounds ([3 x i8]* @.str18, i64 0, i64 0), i64 2)
          to label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader unwind label %.nonloopexit

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader: ; preds = %663
  %665 = load i32** %161, align 8, !tbaa !50
  %666 = load i32** %642, align 8, !tbaa !60
  %667 = icmp eq i32* %665, %666
  br i1 %667, label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader, %_ZNSolsEj.exit
  %668 = phi i64 [ %676, %_ZNSolsEj.exit ], [ 0, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader ]
  %i49.0255 = phi i32 [ %675, %_ZNSolsEj.exit ], [ 0, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader ]
  %669 = invoke %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([2 x i8]* @.str19, i64 0, i64 0), i64 1)
          to label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit73 unwind label %.loopexit

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit73: ; preds = %.lr.ph
  %670 = load i32** %642, align 8, !tbaa !60
  %671 = getelementptr inbounds i32* %670, i64 %668
  %672 = load i32* %671, align 4, !tbaa !5
  %673 = zext i32 %672 to i64
  %674 = invoke %"class.std::basic_ostream"* @_ZNSo9_M_insertImEERSoT_(%"class.std::basic_ostream"* @_ZSt4cout, i64 %673)
          to label %_ZNSolsEj.exit unwind label %.loopexit

_ZNSolsEj.exit:                                   ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit73
  %675 = add i32 %i49.0255, 1
  %676 = zext i32 %675 to i64
  %677 = load i32** %161, align 8, !tbaa !50
  %678 = load i32** %642, align 8, !tbaa !60
  %679 = ptrtoint i32* %677 to i64
  %680 = ptrtoint i32* %678 to i64
  %681 = sub i64 %679, %680
  %682 = ashr exact i64 %681, 2
  %683 = icmp ult i64 %676, %682
  br i1 %683, label %.lr.ph, label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge: ; preds = %_ZNSolsEj.exit, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader
  %684 = invoke %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([2 x i8]* @.str20, i64 0, i64 0), i64 1)
          to label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit unwind label %.nonloopexit

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit: ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge
  %685 = load i32** %642, align 8, !tbaa !60
  %686 = icmp eq i32* %685, null
  br i1 %686, label %_ZNSt6vectorIjSaIjEED2Ev.exit56, label %687

; <label>:687                                     ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit
  %688 = bitcast i32* %685 to i8*
  call void @_ZdlPv(i8* %688) #1
  br label %_ZNSt6vectorIjSaIjEED2Ev.exit56

_ZNSt6vectorIjSaIjEED2Ev.exit56:                  ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit, %687
  ret i32 0

; <label>:689                                     ; preds = %609, %588, %559, %530, %501, %472, %433, %411, %382, %353, %324, %295, %266, %237, %208, %179, %148, %145
  %.051 = phi i32 [ %147, %145 ], [ %612, %609 ], [ %591, %588 ], [ %562, %559 ], [ %533, %530 ], [ %504, %501 ], [ %475, %472 ], [ %436, %433 ], [ %414, %411 ], [ %385, %382 ], [ %356, %353 ], [ %327, %324 ], [ %298, %295 ], [ %269, %266 ], [ %240, %237 ], [ %211, %208 ], [ %182, %179 ], [ %151, %148 ]
  %.0 = phi i8* [ %146, %145 ], [ %611, %609 ], [ %590, %588 ], [ %561, %559 ], [ %532, %530 ], [ %503, %501 ], [ %474, %472 ], [ %435, %433 ], [ %413, %411 ], [ %384, %382 ], [ %355, %353 ], [ %326, %324 ], [ %297, %295 ], [ %268, %266 ], [ %239, %237 ], [ %210, %208 ], [ %181, %179 ], [ %150, %148 ]
  %690 = getelementptr inbounds %"class.std::vector"* %results, i64 0, i32 0, i32 0, i32 0
  %691 = load i32** %690, align 8, !tbaa !60
  %692 = icmp eq i32* %691, null
  br i1 %692, label %_ZNSt6vectorIjSaIjEED2Ev.exit, label %693

; <label>:693                                     ; preds = %689
  %694 = bitcast i32* %691 to i8*
  call void @_ZdlPv(i8* %694) #1
  br label %_ZNSt6vectorIjSaIjEED2Ev.exit

_ZNSt6vectorIjSaIjEED2Ev.exit:                    ; preds = %693, %689
  %695 = insertvalue { i8*, i32 } undef, i8* %.0, 0
  %696 = insertvalue { i8*, i32 } %695, i32 %.051, 1
  resume { i8*, i32 } %696

; <label>:697                                     ; preds = %609, %588, %559, %530, %501, %472, %433, %411, %382, %353, %324, %295, %266, %237, %208, %179, %148
  %698 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          catch i8* null
  %699 = extractvalue { i8*, i32 } %698, 0
  call void @__clang_call_terminate(i8* %699) #13
  unreachable
}

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #1

; Function Attrs: uwtable
define linkonce_odr void @_ZN5TimerD2Ev(%class.Timer* nocapture %this) unnamed_addr #5 align 2 {
  %1 = getelementptr inbounds %class.Timer* %this, i64 0, i32 3
  %2 = tail call i32 @gettimeofday(%struct.timeval* %1, %struct.timezone* null) #1
  %3 = getelementptr inbounds %class.Timer* %this, i64 0, i32 1
  %4 = load i8* %3, align 1, !tbaa !49, !range !61
  %5 = icmp eq i8 %4, 0
  br i1 %5, label %44, label %6

; <label>:6                                       ; preds = %0
  %7 = getelementptr inbounds %class.Timer* %this, i64 0, i32 2, i32 1
  %8 = getelementptr inbounds %class.Timer* %this, i64 0, i32 3, i32 1
  %9 = getelementptr inbounds %class.Timer* %this, i64 0, i32 2, i32 0
  %10 = getelementptr inbounds %struct.timeval* %1, i64 0, i32 0
  %11 = load i64* %7, align 8, !tbaa !62
  %12 = load i64* %8, align 8, !tbaa !63
  %13 = load i64* %9, align 8, !tbaa !64
  %14 = load i64* %10, align 8, !tbaa !65
  %15 = sub nsw i64 %12, %11
  %16 = sub nsw i64 %14, %13
  %17 = sitofp i64 %15 to double
  %18 = mul nsw i64 %16, 1000
  %19 = fdiv double %17, 1.000000e+03
  %20 = sitofp i64 %18 to double
  %21 = fadd double %19, %20
  %22 = fadd double %21, 5.000000e-01
  %23 = fptosi double %22 to i64
  %24 = getelementptr inbounds %class.Timer* %this, i64 0, i32 0
  %25 = load i8** %24, align 8, !tbaa !44
  %26 = icmp eq i8* %25, null
  br i1 %26, label %27, label %38

; <label>:27                                      ; preds = %6
  %28 = load i8** bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8**), align 8, !tbaa !54
  %29 = getelementptr i8* %28, i64 -24
  %30 = bitcast i8* %29 to i64*
  %31 = load i64* %30, align 8
  %32 = getelementptr inbounds i8* bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8*), i64 %31
  %33 = bitcast i8* %32 to %"class.std::basic_ios"*
  %.sum.i = add i64 %31, 32
  %34 = getelementptr inbounds i8* bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8*), i64 %.sum.i
  %35 = bitcast i8* %34 to i32*
  %36 = load i32* %35, align 4, !tbaa !66
  %37 = or i32 %36, 1
  tail call void @_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate(%"class.std::basic_ios"* %33, i32 %37)
  br label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit

; <label>:38                                      ; preds = %6
  %39 = tail call i64 @strlen(i8* %25) #1
  %40 = tail call %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* %25, i64 %39)
  br label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit: ; preds = %27, %38
  %41 = tail call %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([3 x i8]* @.str22, i64 0, i64 0), i64 2)
  %42 = tail call %"class.std::basic_ostream"* @_ZNSo9_M_insertIlEERSoT_(%"class.std::basic_ostream"* @_ZSt4cout, i64 %23)
  %43 = tail call %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* %42, i8* getelementptr inbounds ([8 x i8]* @.str23, i64 0, i64 0), i64 7)
  br label %44

; <label>:44                                      ; preds = %0, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit
  ret void
}

; Function Attrs: noinline noreturn nounwind
define linkonce_odr hidden void @__clang_call_terminate(i8*) #6 {
  %2 = tail call i8* @__cxa_begin_catch(i8* %0) #1
  tail call void @_ZSt9terminatev() #13
  unreachable
}

declare i8* @__cxa_begin_catch(i8*)

declare void @_ZSt9terminatev()

; Function Attrs: nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #1

declare %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"*, i32) #0

declare %"class.std::basic_ostream"* @_ZNSo9_M_insertImEERSoT_(%"class.std::basic_ostream"*, i64) #0

; Function Attrs: uwtable
define linkonce_odr void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* nocapture %this, i32* %__position.coerce, i32* nocapture readonly %__x) #5 align 2 {
  %1 = getelementptr inbounds %"class.std::vector"* %this, i64 0, i32 0, i32 0, i32 1
  %2 = load i32** %1, align 8, !tbaa !50
  %3 = getelementptr inbounds %"class.std::vector"* %this, i64 0, i32 0, i32 0, i32 2
  %4 = load i32** %3, align 8, !tbaa !53
  %5 = icmp eq i32* %2, %4
  br i1 %5, label %_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit, label %6

; <label>:6                                       ; preds = %0
  %7 = icmp eq i32* %2, null
  %.pre = getelementptr inbounds i32* %2, i64 -1
  br i1 %7, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit, label %8

; <label>:8                                       ; preds = %6
  %9 = load i32* %.pre, align 4, !tbaa !5
  store i32 %9, i32* %2, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit: ; preds = %6, %8
  %10 = getelementptr inbounds i32* %2, i64 1
  store i32* %10, i32** %1, align 8, !tbaa !50
  %11 = load i32* %__x, align 4, !tbaa !5
  %12 = ptrtoint i32* %.pre to i64
  %13 = ptrtoint i32* %__position.coerce to i64
  %14 = sub i64 %12, %13
  %15 = ashr exact i64 %14, 2
  %16 = icmp eq i64 %15, 0
  br i1 %16, label %_ZSt13copy_backwardIPjS0_ET0_T_S2_S1_.exit, label %17

; <label>:17                                      ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit
  %.pre.i.i.i.i = sub i64 0, %15
  %.pre1.i.i.i.i = getelementptr inbounds i32* %2, i64 %.pre.i.i.i.i
  %18 = bitcast i32* %.pre1.i.i.i.i to i8*
  %19 = bitcast i32* %__position.coerce to i8*
  tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %18, i8* %19, i64 %14, i32 4, i1 false) #1
  br label %_ZSt13copy_backwardIPjS0_ET0_T_S2_S1_.exit

_ZSt13copy_backwardIPjS0_ET0_T_S2_S1_.exit:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit, %17
  store i32 %11, i32* %__position.coerce, align 4, !tbaa !5
  br label %71

_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit:    ; preds = %0
  %20 = getelementptr inbounds %"class.std::vector"* %this, i64 0, i32 0, i32 0, i32 0
  %21 = load i32** %20, align 8, !tbaa !60
  %22 = ptrtoint i32* %2 to i64
  %23 = ptrtoint i32* %21 to i64
  %24 = sub i64 %22, %23
  %25 = ashr exact i64 %24, 2
  %26 = icmp eq i64 %25, 0
  %27 = select i1 %26, i64 1, i64 %25
  %uadd.i = tail call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %25, i64 %27)
  %28 = extractvalue { i64, i1 } %uadd.i, 0
  %29 = extractvalue { i64, i1 } %uadd.i, 1
  %30 = icmp ugt i64 %28, 4611686018427387903
  %or.cond.i = or i1 %29, %30
  %31 = select i1 %or.cond.i, i64 4611686018427387903, i64 %28
  %32 = ptrtoint i32* %__position.coerce to i64
  %33 = sub i64 %32, %23
  %34 = ashr exact i64 %33, 2
  %35 = icmp eq i64 %31, 0
  br i1 %35, label %_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit, label %36

; <label>:36                                      ; preds = %_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit
  %37 = icmp ugt i64 %31, 4611686018427387903
  br i1 %37, label %38, label %_ZN9__gnu_cxx13new_allocatorIjE8allocateEmPKv.exit.i

; <label>:38                                      ; preds = %36
  tail call void @_ZSt17__throw_bad_allocv() #14
  unreachable

_ZN9__gnu_cxx13new_allocatorIjE8allocateEmPKv.exit.i: ; preds = %36
  %39 = shl i64 %31, 2
  %40 = tail call noalias i8* @_Znwm(i64 %39)
  %41 = bitcast i8* %40 to i32*
  br label %_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit

_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit:  ; preds = %_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit, %_ZN9__gnu_cxx13new_allocatorIjE8allocateEmPKv.exit.i
  %42 = phi i32* [ %41, %_ZN9__gnu_cxx13new_allocatorIjE8allocateEmPKv.exit.i ], [ null, %_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit ]
  %43 = getelementptr inbounds i32* %42, i64 %34
  %44 = icmp eq i32* %43, null
  br i1 %44, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3, label %45

; <label>:45                                      ; preds = %_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit
  %46 = load i32* %__x, align 4, !tbaa !5
  store i32 %46, i32* %43, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3: ; preds = %45, %_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit
  %47 = load i32** %20, align 8, !tbaa !60
  %48 = ptrtoint i32* %47 to i64
  %49 = sub i64 %32, %48
  %50 = ashr exact i64 %49, 2
  %51 = icmp eq i64 %50, 0
  br i1 %51, label %55, label %52

; <label>:52                                      ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3
  %53 = bitcast i32* %42 to i8*
  %54 = bitcast i32* %47 to i8*
  tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %53, i8* %54, i64 %49, i32 4, i1 false) #1
  br label %55

; <label>:55                                      ; preds = %52, %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3
  %.sum = add i64 %50, 1
  %56 = load i32** %1, align 8, !tbaa !50
  %57 = ptrtoint i32* %56 to i64
  %58 = sub i64 %57, %32
  %59 = ashr exact i64 %58, 2
  %60 = icmp eq i64 %59, 0
  br i1 %60, label %65, label %61

; <label>:61                                      ; preds = %55
  %62 = getelementptr inbounds i32* %42, i64 %.sum
  %63 = bitcast i32* %62 to i8*
  %64 = bitcast i32* %__position.coerce to i8*
  tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %63, i8* %64, i64 %58, i32 4, i1 false) #1
  br label %65

; <label>:65                                      ; preds = %61, %55
  %.sum4 = add i64 %59, %.sum
  %66 = getelementptr inbounds i32* %42, i64 %.sum4
  %67 = icmp eq i32* %47, null
  br i1 %67, label %_ZNSt12_Vector_baseIjSaIjEE13_M_deallocateEPjm.exit1, label %68

; <label>:68                                      ; preds = %65
  %69 = bitcast i32* %47 to i8*
  tail call void @_ZdlPv(i8* %69) #1
  br label %_ZNSt12_Vector_baseIjSaIjEE13_M_deallocateEPjm.exit1

_ZNSt12_Vector_baseIjSaIjEE13_M_deallocateEPjm.exit1: ; preds = %65, %68
  store i32* %42, i32** %20, align 8, !tbaa !60
  store i32* %66, i32** %1, align 8, !tbaa !50
  %70 = getelementptr inbounds i32* %42, i64 %31
  store i32* %70, i32** %3, align 8, !tbaa !53
  br label %71

; <label>:71                                      ; preds = %_ZNSt12_Vector_baseIjSaIjEE13_M_deallocateEPjm.exit1, %_ZSt13copy_backwardIPjS0_ET0_T_S2_S1_.exit
  ret void
}

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPv(i8*) #7

; Function Attrs: nounwind
declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1

; Function Attrs: noreturn
declare void @_ZSt17__throw_bad_allocv() #8

; Function Attrs: nobuiltin
declare noalias i8* @_Znwm(i64) #9

declare %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"*, i8*, i64) #0

; Function Attrs: nounwind readonly
declare i64 @strlen(i8* nocapture) #10

declare void @_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate(%"class.std::basic_ios"*, i32) #0

; Function Attrs: nounwind
declare i32 @gettimeofday(%struct.timeval* nocapture, %struct.timezone* nocapture) #11

declare %"class.std::basic_ostream"* @_ZNSo9_M_insertIlEERSoT_(%"class.std::basic_ostream"*, i64) #0

define internal void @_GLOBAL__I_a() section ".text.startup" {
  tail call void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"* @_ZStL8__ioinit)
  %1 = tail call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.std::ios_base::Init"*)* @_ZNSt8ios_base4InitD1Ev to void (i8*)*), i8* getelementptr inbounds (%"class.std::ios_base::Init"* @_ZStL8__ioinit, i64 0, i32 0), i8* @__dso_handle) #1
  ret void
}

; Function Attrs: nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1

; Function Attrs: nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #1

; Function Attrs: nounwind readnone
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #12

attributes #0 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind }
attributes #2 = { noinline nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind readonly uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #6 = { noinline noreturn nounwind }
attributes #7 = { nobuiltin nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #8 = { noreturn "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #9 = { nobuiltin "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #10 = { nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #11 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #12 = { nounwind readnone }
attributes #13 = { noreturn nounwind }
attributes #14 = { noreturn }

!llvm.ident = !{!0}

!0 = metadata !{metadata !"clang version 3.5 "}
!1 = metadata !{metadata !1, metadata !2, metadata !3}
!2 = metadata !{metadata !"llvm.vectorizer.width", i32 1}
!3 = metadata !{metadata !"llvm.vectorizer.unroll", i32 1}
!4 = metadata !{metadata !4, metadata !2, metadata !3}
!5 = metadata !{metadata !6, metadata !6, i64 0}
!6 = metadata !{metadata !"int", metadata !7, i64 0}
!7 = metadata !{metadata !"omnipotent char", metadata !8, i64 0}
!8 = metadata !{metadata !"Simple C/C++ TBAA"}
!9 = metadata !{metadata !9, metadata !2, metadata !3}
!10 = metadata !{metadata !10, metadata !2, metadata !3}
!11 = metadata !{metadata !11, metadata !2, metadata !3}
!12 = metadata !{metadata !12, metadata !2, metadata !3}
!13 = metadata !{metadata !13, metadata !2, metadata !3}
!14 = metadata !{metadata !14, metadata !2, metadata !3}
!15 = metadata !{metadata !15, metadata !2, metadata !3}
!16 = metadata !{metadata !16, metadata !2, metadata !3}
!17 = metadata !{metadata !17, metadata !2, metadata !3}
!18 = metadata !{metadata !18, metadata !2, metadata !3}
!19 = metadata !{metadata !19, metadata !2, metadata !3}
!20 = metadata !{metadata !20, metadata !2, metadata !3}
!21 = metadata !{metadata !21, metadata !2, metadata !3}
!22 = metadata !{metadata !22, metadata !2, metadata !3}
!23 = metadata !{metadata !23, metadata !2, metadata !3}
!24 = metadata !{metadata !24, metadata !2, metadata !3}
!25 = metadata !{metadata !25, metadata !2, metadata !3}
!26 = metadata !{metadata !26, metadata !2, metadata !3}
!27 = metadata !{metadata !28, metadata !28, i64 0}
!28 = metadata !{metadata !"any pointer", metadata !7, i64 0}
!29 = metadata !{metadata !29, metadata !2, metadata !3}
!30 = metadata !{metadata !30, metadata !2, metadata !3}
!31 = metadata !{metadata !31, metadata !2, metadata !3}
!32 = metadata !{metadata !32, metadata !2, metadata !3}
!33 = metadata !{metadata !33, metadata !2, metadata !3}
!34 = metadata !{metadata !34, metadata !2, metadata !3}
!35 = metadata !{metadata !35, metadata !2, metadata !3}
!36 = metadata !{metadata !37, metadata !37, i64 0}
!37 = metadata !{metadata !"short", metadata !7, i64 0}
!38 = metadata !{metadata !38, metadata !2, metadata !3}
!39 = metadata !{metadata !39, metadata !2, metadata !3}
!40 = metadata !{metadata !40, metadata !2, metadata !3}
!41 = metadata !{metadata !7, metadata !7, i64 0}
!42 = metadata !{metadata !43, metadata !43, i64 0}
!43 = metadata !{metadata !"float", metadata !7, i64 0}
!44 = metadata !{metadata !45, metadata !28, i64 0}
!45 = metadata !{metadata !"_ZTS5Timer", metadata !28, i64 0, metadata !46, i64 8, metadata !47, i64 16, metadata !47, i64 32}
!46 = metadata !{metadata !"bool", metadata !7, i64 0}
!47 = metadata !{metadata !"_ZTS7timeval", metadata !48, i64 0, metadata !48, i64 8}
!48 = metadata !{metadata !"long", metadata !7, i64 0}
!49 = metadata !{metadata !45, metadata !46, i64 8}
!50 = metadata !{metadata !51, metadata !28, i64 8}
!51 = metadata !{metadata !"_ZTSSt12_Vector_baseIjSaIjEE", metadata !52, i64 0}
!52 = metadata !{metadata !"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", metadata !28, i64 0, metadata !28, i64 8, metadata !28, i64 16}
!53 = metadata !{metadata !51, metadata !28, i64 16}
!54 = metadata !{metadata !55, metadata !55, i64 0}
!55 = metadata !{metadata !"vtable pointer", metadata !8, i64 0}
!56 = metadata !{metadata !57, metadata !57, i64 0}
!57 = metadata !{metadata !"_ZTSSt13_Ios_Fmtflags", metadata !7, i64 0}
!58 = metadata !{metadata !58, metadata !2, metadata !3}
!59 = metadata !{metadata !59, metadata !2, metadata !3}
!60 = metadata !{metadata !51, metadata !28, i64 0}
!61 = metadata !{i8 0, i8 2}
!62 = metadata !{metadata !45, metadata !48, i64 24}
!63 = metadata !{metadata !45, metadata !48, i64 40}
!64 = metadata !{metadata !45, metadata !48, i64 16}
!65 = metadata !{metadata !45, metadata !48, i64 32}
!66 = metadata !{metadata !67, metadata !68, i64 32}
!67 = metadata !{metadata !"_ZTSSt8ios_base", metadata !48, i64 8, metadata !48, i64 16, metadata !57, i64 24, metadata !68, i64 28, metadata !68, i64 32, metadata !28, i64 40, metadata !69, i64 48, metadata !7, i64 64, metadata !6, i64 192, metadata !28, i64 200, metadata !70, i64 208}
!68 = metadata !{metadata !"_ZTSSt12_Ios_Iostate", metadata !7, i64 0}
!69 = metadata !{metadata !"_ZTSNSt8ios_base6_WordsE", metadata !28, i64 0, metadata !48, i64 8}
!70 = metadata !{metadata !"_ZTSSt6locale", metadata !28, i64 0}
-------------- next part --------------
; ModuleID = 'test-suite/SingleSource/UnitTests/Vectorizer/gcc-loops.cpp'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::ios_base::Init" = type { i8 }
%struct.A = type { [1024 x i32] }
%"class.std::basic_ostream" = type { i32 (...)**, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", %"class.std::basic_ostream"*, i8, i8, %"class.std::basic_streambuf"*, %"class.std::ctype"*, %"class.std::num_put"*, %"class.std::num_get"* }
%"class.std::ios_base" = type { i32 (...)**, i64, i64, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"class.std::locale" }
%"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"class.std::ios_base"*, i32)*, i32, i32 }
%"struct.std::ios_base::_Words" = type { i8*, i64 }
%"class.std::locale" = type { %"class.std::locale::_Impl"* }
%"class.std::locale::_Impl" = type { i32, %"class.std::locale::facet"**, i64, %"class.std::locale::facet"**, i8** }
%"class.std::locale::facet" = type { i32 (...)**, i32 }
%"class.std::basic_streambuf" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"class.std::locale" }
%"class.std::ctype" = type { [12 x i8], %struct.__locale_struct*, i8, i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8 }
%struct.__locale_struct = type { [13 x %struct.__locale_data*], i16*, i32*, i32*, [13 x i8*] }
%struct.__locale_data = type opaque
%"class.std::num_put" = type { [12 x i8], [4 x i8] }
%"class.std::num_get" = type { [12 x i8], [4 x i8] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int> >::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int> >::_Vector_impl" = type { i32*, i32*, i32* }
%class.Timer = type { i8*, i8, %struct.timeval, %struct.timeval }
%struct.timeval = type { i64, i64 }
%struct.timezone = type { i32, i32 }

@_ZStL8__ioinit = internal global %"class.std::ios_base::Init" zeroinitializer, align 1
@__dso_handle = external global i8
@usa = global [1024 x i16] zeroinitializer, align 16
@sa = global [1024 x i16] zeroinitializer, align 16
@sb = global [1024 x i16] zeroinitializer, align 16
@sc = global [1024 x i16] zeroinitializer, align 16
@ua = global [1024 x i32] zeroinitializer, align 16
@ia = global [1024 x i32] zeroinitializer, align 16
@ib = global [1024 x i32] zeroinitializer, align 16
@ic = global [1024 x i32] zeroinitializer, align 16
@ub = global [1024 x i32] zeroinitializer, align 16
@uc = global [1024 x i32] zeroinitializer, align 16
@fa = global [1024 x float] zeroinitializer, align 16
@fb = global [1024 x float] zeroinitializer, align 16
@da = global [1024 x float] zeroinitializer, align 16
@db = global [1024 x float] zeroinitializer, align 16
@dc = global [1024 x float] zeroinitializer, align 16
@dd = global [1024 x float] zeroinitializer, align 16
@dj = global [1024 x i32] zeroinitializer, align 16
@s = global %struct.A zeroinitializer, align 4
@a = global [2048 x i32] zeroinitializer, align 16
@b = global [2048 x i32] zeroinitializer, align 16
@c = global [2048 x i32] zeroinitializer, align 16
@d = global [2048 x i32] zeroinitializer, align 16
@G = global [32 x [1024 x i32]] zeroinitializer, align 16
@.str = private unnamed_addr constant [9 x i8] c"Example1\00", align 1
@.str1 = private unnamed_addr constant [10 x i8] c"Example2a\00", align 1
@.str2 = private unnamed_addr constant [10 x i8] c"Example2b\00", align 1
@.str3 = private unnamed_addr constant [9 x i8] c"Example3\00", align 1
@.str4 = private unnamed_addr constant [10 x i8] c"Example4a\00", align 1
@.str5 = private unnamed_addr constant [10 x i8] c"Example4b\00", align 1
@.str6 = private unnamed_addr constant [10 x i8] c"Example4c\00", align 1
@.str7 = private unnamed_addr constant [9 x i8] c"Example7\00", align 1
@.str8 = private unnamed_addr constant [9 x i8] c"Example8\00", align 1
@.str9 = private unnamed_addr constant [9 x i8] c"Example9\00", align 1
@.str10 = private unnamed_addr constant [11 x i8] c"Example10a\00", align 1
@.str11 = private unnamed_addr constant [11 x i8] c"Example10b\00", align 1
@.str12 = private unnamed_addr constant [10 x i8] c"Example11\00", align 1
@.str13 = private unnamed_addr constant [10 x i8] c"Example12\00", align 1
@.str14 = private unnamed_addr constant [10 x i8] c"Example23\00", align 1
@.str15 = private unnamed_addr constant [10 x i8] c"Example24\00", align 1
@.str16 = private unnamed_addr constant [10 x i8] c"Example25\00", align 1
@_ZSt4cout = external global %"class.std::basic_ostream"
@.str17 = private unnamed_addr constant [11 x i8] c"Results: (\00", align 1
@.str18 = private unnamed_addr constant [3 x i8] c"):\00", align 1
@.str19 = private unnamed_addr constant [2 x i8] c" \00", align 1
@.str20 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@.str22 = private unnamed_addr constant [3 x i8] c", \00", align 1
@.str23 = private unnamed_addr constant [8 x i8] c", msec\0A\00", align 1
@llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_a }]

declare void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"*) #0

declare void @_ZNSt8ios_base4InitD1Ev(%"class.std::ios_base::Init"*) #0

; Function Attrs: nounwind
declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*) #1

; Function Attrs: noinline nounwind uwtable
define void @_Z8example1v() #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %index
  %1 = bitcast i32* %0 to <4 x i32>*
  %wide.load = load <4 x i32>* %1, align 16
  %.sum6 = or i64 %index, 4
  %2 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum6
  %3 = bitcast i32* %2 to <4 x i32>*
  %wide.load3 = load <4 x i32>* %3, align 16
  %4 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %index
  %5 = bitcast i32* %4 to <4 x i32>*
  %wide.load4 = load <4 x i32>* %5, align 16
  %.sum7 = or i64 %index, 4
  %6 = getelementptr [2048 x i32]* @c, i64 0, i64 %.sum7
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load5 = load <4 x i32>* %7, align 16
  %8 = add nsw <4 x i32> %wide.load4, %wide.load
  %9 = add nsw <4 x i32> %wide.load5, %wide.load3
  %10 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %11 = bitcast i32* %10 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %11, align 16
  %.sum8 = or i64 %index, 4
  %12 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum8
  %13 = bitcast i32* %12 to <4 x i32>*
  store <4 x i32> %9, <4 x i32>* %13, align 16
  %index.next = add i64 %index, 8
  %14 = icmp eq i64 %index.next, 256
  br i1 %14, label %middle.block, label %vector.body, !llvm.loop !1

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example2aii(i32 %n, i32 %x) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  br i1 %cmp.zero, label %middle.block, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %broadcast.splatinsert3 = insertelement <4 x i32> undef, i32 %x, i32 0
  %broadcast.splat4 = shufflevector <4 x i32> %broadcast.splatinsert3, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %5 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %index
  %6 = bitcast i32* %5 to <4 x i32>*
  store <4 x i32> %broadcast.splat4, <4 x i32>* %6, align 16
  %.sum7 = or i64 %index, 4
  %7 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum7
  %8 = bitcast i32* %7 to <4 x i32>*
  store <4 x i32> %broadcast.splat4, <4 x i32>* %8, align 16
  %index.next = add i64 %index, 8
  %9 = icmp eq i64 %index.next, %n.vec
  br i1 %9, label %middle.block, label %vector.body, !llvm.loop !4

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %10 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %indvars.iv
  store i32 %x, i32* %10, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %n
  br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !9

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example2bii(i32 %n, i32 %x) #2 {
  %1 = icmp eq i32 %n, 0
  br i1 %1, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %cast.crd = trunc i64 %n.vec to i32
  %rev.ind.end = sub i32 %n, %cast.crd
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %5 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %index
  %6 = bitcast i32* %5 to <4 x i32>*
  %wide.load = load <4 x i32>* %6, align 16
  %.sum12 = or i64 %index, 4
  %7 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum12
  %8 = bitcast i32* %7 to <4 x i32>*
  %wide.load9 = load <4 x i32>* %8, align 16
  %9 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %index
  %10 = bitcast i32* %9 to <4 x i32>*
  %wide.load10 = load <4 x i32>* %10, align 16
  %.sum13 = or i64 %index, 4
  %11 = getelementptr [2048 x i32]* @c, i64 0, i64 %.sum13
  %12 = bitcast i32* %11 to <4 x i32>*
  %wide.load11 = load <4 x i32>* %12, align 16
  %13 = and <4 x i32> %wide.load10, %wide.load
  %14 = and <4 x i32> %wide.load11, %wide.load9
  %15 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %16 = bitcast i32* %15 to <4 x i32>*
  store <4 x i32> %13, <4 x i32>* %16, align 16
  %.sum14 = or i64 %index, 4
  %17 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum14
  %18 = bitcast i32* %17 to <4 x i32>*
  store <4 x i32> %14, <4 x i32>* %18, align 16
  %index.next = add i64 %index, 8
  %19 = icmp eq i64 %index.next, %n.vec
  br i1 %19, label %middle.block, label %vector.body, !llvm.loop !10

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %resume.val3 = phi i32 [ %n, %.lr.ph.preheader ], [ %rev.ind.end, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %.01 = phi i32 [ %20, %.lr.ph ], [ %resume.val3, %middle.block ]
  %20 = add nsw i32 %.01, -1
  %21 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %indvars.iv
  %22 = load i32* %21, align 4, !tbaa !5
  %23 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %indvars.iv
  %24 = load i32* %23, align 4, !tbaa !5
  %25 = and i32 %24, %22
  %26 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
  store i32 %25, i32* %26, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %27 = icmp eq i32 %20, 0
  br i1 %27, label %._crit_edge, label %.lr.ph, !llvm.loop !11

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example3iPiS_(i32 %n, i32* noalias nocapture %p, i32* noalias nocapture readonly %q) #2 {
  %1 = icmp eq i32 %n, 0
  br i1 %1, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %ptr.ind.end = getelementptr i32* %q, i64 %n.vec
  %ptr.ind.end8 = getelementptr i32* %p, i64 %n.vec
  %cast.crd = trunc i64 %n.vec to i32
  %rev.ind.end = sub i32 %n, %cast.crd
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %next.gep = getelementptr i32* %q, i64 %index
  %next.gep33 = getelementptr i32* %p, i64 %index
  %5 = bitcast i32* %next.gep to <4 x i32>*
  %wide.load = load <4 x i32>* %5, align 16
  %next.gep.sum77 = or i64 %index, 4
  %6 = getelementptr i32* %q, i64 %next.gep.sum77
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load58 = load <4 x i32>* %7, align 16
  %8 = bitcast i32* %next.gep33 to <4 x i32>*
  store <4 x i32> %wide.load, <4 x i32>* %8, align 16
  %next.gep33.sum82 = or i64 %index, 4
  %9 = getelementptr i32* %p, i64 %next.gep33.sum82
  %10 = bitcast i32* %9 to <4 x i32>*
  store <4 x i32> %wide.load58, <4 x i32>* %10, align 16
  %index.next = add i64 %index, 8
  %11 = icmp eq i64 %index.next, %n.vec
  br i1 %11, label %middle.block, label %vector.body, !llvm.loop !12

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i32* [ %q, %.lr.ph.preheader ], [ %ptr.ind.end, %vector.body ]
  %resume.val7 = phi i32* [ %p, %.lr.ph.preheader ], [ %ptr.ind.end8, %vector.body ]
  %resume.val9 = phi i32 [ %n, %.lr.ph.preheader ], [ %rev.ind.end, %vector.body ]
  %new.indc.resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %new.indc.resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %.05 = phi i32* [ %13, %.lr.ph ], [ %resume.val, %middle.block ]
  %.014 = phi i32* [ %15, %.lr.ph ], [ %resume.val7, %middle.block ]
  %.023 = phi i32 [ %12, %.lr.ph ], [ %resume.val9, %middle.block ]
  %12 = add nsw i32 %.023, -1
  %13 = getelementptr inbounds i32* %.05, i64 1
  %14 = load i32* %.05, align 16, !tbaa !5
  %15 = getelementptr inbounds i32* %.014, i64 1
  store i32 %14, i32* %.014, align 16, !tbaa !5
  %16 = icmp eq i32 %12, 0
  br i1 %16, label %._crit_edge, label %.lr.ph, !llvm.loop !13

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example4aiPiS_(i32 %n, i32* noalias nocapture %p, i32* noalias nocapture readonly %q) #2 {
  %1 = icmp eq i32 %n, 0
  br i1 %1, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %ptr.ind.end = getelementptr i32* %q, i64 %n.vec
  %ptr.ind.end7 = getelementptr i32* %p, i64 %n.vec
  %cast.crd = trunc i64 %n.vec to i32
  %rev.ind.end = sub i32 %n, %cast.crd
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %next.gep = getelementptr i32* %q, i64 %index
  %next.gep32 = getelementptr i32* %p, i64 %index
  %5 = bitcast i32* %next.gep to <4 x i32>*
  %wide.load = load <4 x i32>* %5, align 16
  %next.gep.sum76 = or i64 %index, 4
  %6 = getelementptr i32* %q, i64 %next.gep.sum76
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load57 = load <4 x i32>* %7, align 16
  %8 = add nsw <4 x i32> %wide.load, <i32 5, i32 5, i32 5, i32 5>
  %9 = add nsw <4 x i32> %wide.load57, <i32 5, i32 5, i32 5, i32 5>
  %10 = bitcast i32* %next.gep32 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %10, align 16
  %next.gep32.sum81 = or i64 %index, 4
  %11 = getelementptr i32* %p, i64 %next.gep32.sum81
  %12 = bitcast i32* %11 to <4 x i32>*
  store <4 x i32> %9, <4 x i32>* %12, align 16
  %index.next = add i64 %index, 8
  %13 = icmp eq i64 %index.next, %n.vec
  br i1 %13, label %middle.block, label %vector.body, !llvm.loop !14

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i32* [ %q, %.lr.ph.preheader ], [ %ptr.ind.end, %vector.body ]
  %resume.val6 = phi i32* [ %p, %.lr.ph.preheader ], [ %ptr.ind.end7, %vector.body ]
  %resume.val8 = phi i32 [ %n, %.lr.ph.preheader ], [ %rev.ind.end, %vector.body ]
  %new.indc.resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %new.indc.resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %.05 = phi i32* [ %15, %.lr.ph ], [ %resume.val, %middle.block ]
  %.014 = phi i32* [ %18, %.lr.ph ], [ %resume.val6, %middle.block ]
  %.023 = phi i32 [ %14, %.lr.ph ], [ %resume.val8, %middle.block ]
  %14 = add nsw i32 %.023, -1
  %15 = getelementptr inbounds i32* %.05, i64 1
  %16 = load i32* %.05, align 16, !tbaa !5
  %17 = add nsw i32 %16, 5
  %18 = getelementptr inbounds i32* %.014, i64 1
  store i32 %17, i32* %.014, align 16, !tbaa !5
  %19 = icmp eq i32 %14, 0
  br i1 %19, label %._crit_edge, label %.lr.ph, !llvm.loop !15

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example4biPiS_(i32 %n, i32* noalias nocapture readnone %p, i32* noalias nocapture readnone %q) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %5 = or i64 %index, 1
  %6 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %5
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load = load <4 x i32>* %7, align 4
  %.sum11 = or i64 %index, 5
  %8 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum11
  %9 = bitcast i32* %8 to <4 x i32>*
  %wide.load3 = load <4 x i32>* %9, align 4
  %10 = or i64 %index, 3
  %11 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %10
  %12 = bitcast i32* %11 to <4 x i32>*
  %wide.load4 = load <4 x i32>* %12, align 4
  %.sum812 = or i64 %index, 7
  %13 = getelementptr [2048 x i32]* @c, i64 0, i64 %.sum812
  %14 = bitcast i32* %13 to <4 x i32>*
  %wide.load5 = load <4 x i32>* %14, align 4
  %15 = add nsw <4 x i32> %wide.load4, %wide.load
  %16 = add nsw <4 x i32> %wide.load5, %wide.load3
  %17 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %18 = bitcast i32* %17 to <4 x i32>*
  store <4 x i32> %15, <4 x i32>* %18, align 16
  %.sum910 = or i64 %index, 4
  %19 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum910
  %20 = bitcast i32* %19 to <4 x i32>*
  store <4 x i32> %16, <4 x i32>* %20, align 16
  %index.next = add i64 %index, 8
  %21 = icmp eq i64 %index.next, %n.vec
  br i1 %21, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %22 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %indvars.iv.next
  %23 = load i32* %22, align 4, !tbaa !5
  %24 = add nsw i64 %indvars.iv, 3
  %25 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %24
  %26 = load i32* %25, align 4, !tbaa !5
  %27 = add nsw i32 %26, %23
  %28 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
  store i32 %27, i32* %28, align 4, !tbaa !5
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %n
  br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !17

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example4ciPiS_(i32 %n, i32* noalias nocapture readnone %p, i32* noalias nocapture readnone %q) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %5 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %6 = bitcast i32* %5 to <4 x i32>*
  %wide.load = load <4 x i32>* %6, align 16
  %.sum6 = or i64 %index, 4
  %7 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum6
  %8 = bitcast i32* %7 to <4 x i32>*
  %wide.load3 = load <4 x i32>* %8, align 16
  %9 = icmp sgt <4 x i32> %wide.load, <i32 4, i32 4, i32 4, i32 4>
  %10 = icmp sgt <4 x i32> %wide.load3, <i32 4, i32 4, i32 4, i32 4>
  %11 = select <4 x i1> %9, <4 x i32> <i32 4, i32 4, i32 4, i32 4>, <4 x i32> zeroinitializer
  %12 = select <4 x i1> %10, <4 x i32> <i32 4, i32 4, i32 4, i32 4>, <4 x i32> zeroinitializer
  %13 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %index
  %14 = bitcast i32* %13 to <4 x i32>*
  store <4 x i32> %11, <4 x i32>* %14, align 16
  %.sum7 = or i64 %index, 4
  %15 = getelementptr [2048 x i32]* @b, i64 0, i64 %.sum7
  %16 = bitcast i32* %15 to <4 x i32>*
  store <4 x i32> %12, <4 x i32>* %16, align 16
  %index.next = add i64 %index, 8
  %17 = icmp eq i64 %index.next, %n.vec
  br i1 %17, label %middle.block, label %vector.body, !llvm.loop !18

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %18 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
  %19 = load i32* %18, align 4, !tbaa !5
  %20 = icmp sgt i32 %19, 4
  %21 = select i1 %20, i32 4, i32 0
  %22 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %indvars.iv
  store i32 %21, i32* %22, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %n
  br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !19

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example5iP1A(i32 %n, %struct.A* nocapture %s) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %2 = add i32 %n, -1
  %3 = zext i32 %2 to i64
  %4 = add i64 %3, 1
  %end.idx = add i64 %3, 1
  %n.vec = and i64 %4, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.preheader ]
  %5 = getelementptr inbounds %struct.A* %s, i64 0, i32 0, i64 %index
  %6 = bitcast i32* %5 to <4 x i32>*
  store <4 x i32> <i32 5, i32 5, i32 5, i32 5>, <4 x i32>* %6, align 4
  %.sum5 = or i64 %index, 4
  %7 = getelementptr %struct.A* %s, i64 0, i32 0, i64 %.sum5
  %8 = bitcast i32* %7 to <4 x i32>*
  store <4 x i32> <i32 5, i32 5, i32 5, i32 5>, <4 x i32>* %8, align 4
  %index.next = add i64 %index, 8
  %9 = icmp eq i64 %index.next, %n.vec
  br i1 %9, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %vector.body, %.lr.ph.preheader
  %resume.val = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %vector.body ]
  %cmp.n = icmp eq i64 %end.idx, %resume.val
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %resume.val, %middle.block ]
  %10 = getelementptr inbounds %struct.A* %s, i64 0, i32 0, i64 %indvars.iv
  store i32 5, i32* %10, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond = icmp eq i32 %lftr.wideiv, %n
  br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !21

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example7i(i32 %x) #2 {
  %1 = sext i32 %x to i64
  %scevgep = getelementptr [2048 x i32]* @b, i64 0, i64 %1
  %scevgep2 = bitcast i32* %scevgep to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* bitcast ([2048 x i32]* @a to i8*), i8* %scevgep2, i64 4096, i32 4, i1 false)
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example8i(i32 %x) #2 {
  br label %vector.ph

vector.ph:                                        ; preds = %0, %middle.block
  %indvars.iv3 = phi i64 [ 0, %0 ], [ %indvars.iv.next4, %middle.block ]
  %broadcast.splatinsert7 = insertelement <4 x i32> undef, i32 %x, i32 0
  %broadcast.splat8 = shufflevector <4 x i32> %broadcast.splatinsert7, <4 x i32> undef, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %1 = getelementptr inbounds [32 x [1024 x i32]]* @G, i64 0, i64 %indvars.iv3, i64 %index
  %2 = bitcast i32* %1 to <4 x i32>*
  store <4 x i32> %broadcast.splat8, <4 x i32>* %2, align 16
  %.sum9 = or i64 %index, 4
  %3 = getelementptr [32 x [1024 x i32]]* @G, i64 0, i64 %indvars.iv3, i64 %.sum9
  %4 = bitcast i32* %3 to <4 x i32>*
  store <4 x i32> %broadcast.splat8, <4 x i32>* %4, align 16
  %index.next = add i64 %index, 8
  %5 = icmp eq i64 %index.next, 1024
  br i1 %5, label %middle.block, label %vector.body, !llvm.loop !22

middle.block:                                     ; preds = %vector.body
  %indvars.iv.next4 = add nuw nsw i64 %indvars.iv3, 1
  %exitcond5 = icmp eq i64 %indvars.iv.next4, 32
  br i1 %exitcond5, label %6, label %vector.ph

; <label>:6                                       ; preds = %middle.block
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z8example9Pj(i32* nocapture %ret) #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %10, %vector.body ]
  %vec.phi4 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %11, %vector.body ]
  %0 = getelementptr inbounds [1024 x i32]* @ub, i64 0, i64 %index
  %1 = bitcast i32* %0 to <4 x i32>*
  %wide.load = load <4 x i32>* %1, align 16
  %.sum12 = or i64 %index, 4
  %2 = getelementptr [1024 x i32]* @ub, i64 0, i64 %.sum12
  %3 = bitcast i32* %2 to <4 x i32>*
  %wide.load5 = load <4 x i32>* %3, align 16
  %4 = getelementptr inbounds [1024 x i32]* @uc, i64 0, i64 %index
  %5 = bitcast i32* %4 to <4 x i32>*
  %wide.load6 = load <4 x i32>* %5, align 16
  %.sum13 = or i64 %index, 4
  %6 = getelementptr [1024 x i32]* @uc, i64 0, i64 %.sum13
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load7 = load <4 x i32>* %7, align 16
  %8 = add <4 x i32> %wide.load, %vec.phi
  %9 = add <4 x i32> %wide.load5, %vec.phi4
  %10 = sub <4 x i32> %8, %wide.load6
  %11 = sub <4 x i32> %9, %wide.load7
  %index.next = add i64 %index, 8
  %12 = icmp eq i64 %index.next, 1024
  br i1 %12, label %middle.block, label %vector.body, !llvm.loop !23

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %11, %10
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx9 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf10 = shufflevector <4 x i32> %bin.rdx9, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx11 = add <4 x i32> %bin.rdx9, %rdx.shuf10
  %13 = extractelement <4 x i32> %bin.rdx11, i32 0
  store i32 %13, i32* %ret, align 4, !tbaa !5
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z10example10aPsS_S_PiS0_S0_(i16* noalias nocapture %sa, i16* noalias nocapture readonly %sb, i16* noalias nocapture readonly %sc, i32* noalias nocapture %ia, i32* noalias nocapture readonly %ib, i32* noalias nocapture readonly %ic) #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds i32* %ib, i64 %index
  %1 = bitcast i32* %0 to <4 x i32>*
  %wide.load = load <4 x i32>* %1, align 4
  %.sum10 = or i64 %index, 4
  %2 = getelementptr i32* %ib, i64 %.sum10
  %3 = bitcast i32* %2 to <4 x i32>*
  %wide.load3 = load <4 x i32>* %3, align 4
  %4 = getelementptr inbounds i32* %ic, i64 %index
  %5 = bitcast i32* %4 to <4 x i32>*
  %wide.load4 = load <4 x i32>* %5, align 4
  %.sum11 = or i64 %index, 4
  %6 = getelementptr i32* %ic, i64 %.sum11
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load5 = load <4 x i32>* %7, align 4
  %8 = add nsw <4 x i32> %wide.load4, %wide.load
  %9 = add nsw <4 x i32> %wide.load5, %wide.load3
  %10 = getelementptr inbounds i32* %ia, i64 %index
  %11 = bitcast i32* %10 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %11, align 4
  %.sum12 = or i64 %index, 4
  %12 = getelementptr i32* %ia, i64 %.sum12
  %13 = bitcast i32* %12 to <4 x i32>*
  store <4 x i32> %9, <4 x i32>* %13, align 4
  %14 = getelementptr inbounds i16* %sb, i64 %index
  %15 = bitcast i16* %14 to <4 x i16>*
  %wide.load6 = load <4 x i16>* %15, align 2
  %.sum13 = or i64 %index, 4
  %16 = getelementptr i16* %sb, i64 %.sum13
  %17 = bitcast i16* %16 to <4 x i16>*
  %wide.load7 = load <4 x i16>* %17, align 2
  %18 = getelementptr inbounds i16* %sc, i64 %index
  %19 = bitcast i16* %18 to <4 x i16>*
  %wide.load8 = load <4 x i16>* %19, align 2
  %.sum14 = or i64 %index, 4
  %20 = getelementptr i16* %sc, i64 %.sum14
  %21 = bitcast i16* %20 to <4 x i16>*
  %wide.load9 = load <4 x i16>* %21, align 2
  %22 = add <4 x i16> %wide.load8, %wide.load6
  %23 = add <4 x i16> %wide.load9, %wide.load7
  %24 = getelementptr inbounds i16* %sa, i64 %index
  %25 = bitcast i16* %24 to <4 x i16>*
  store <4 x i16> %22, <4 x i16>* %25, align 2
  %.sum15 = or i64 %index, 4
  %26 = getelementptr i16* %sa, i64 %.sum15
  %27 = bitcast i16* %26 to <4 x i16>*
  store <4 x i16> %23, <4 x i16>* %27, align 2
  %index.next = add i64 %index, 8
  %28 = icmp eq i64 %index.next, 1024
  br i1 %28, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z10example10bPsS_S_PiS0_S0_(i16* noalias nocapture readnone %sa, i16* noalias nocapture readonly %sb, i16* noalias nocapture readnone %sc, i32* noalias nocapture %ia, i32* noalias nocapture readnone %ib, i32* noalias nocapture readnone %ic) #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds i16* %sb, i64 %index
  %1 = bitcast i16* %0 to <4 x i16>*
  %wide.load = load <4 x i16>* %1, align 2
  %.sum4 = or i64 %index, 4
  %2 = getelementptr i16* %sb, i64 %.sum4
  %3 = bitcast i16* %2 to <4 x i16>*
  %wide.load3 = load <4 x i16>* %3, align 2
  %4 = sext <4 x i16> %wide.load to <4 x i32>
  %5 = sext <4 x i16> %wide.load3 to <4 x i32>
  %6 = getelementptr inbounds i32* %ia, i64 %index
  %7 = bitcast i32* %6 to <4 x i32>*
  store <4 x i32> %4, <4 x i32>* %7, align 4
  %.sum5 = or i64 %index, 4
  %8 = getelementptr i32* %ia, i64 %.sum5
  %9 = bitcast i32* %8 to <4 x i32>*
  store <4 x i32> %5, <4 x i32>* %9, align 4
  %index.next = add i64 %index, 8
  %10 = icmp eq i64 %index.next, 1024
  br i1 %10, label %middle.block, label %vector.body, !llvm.loop !25

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example11v() #2 {
  br label %1

; <label>:1                                       ; preds = %1, %0
  %indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %1 ]
  %2 = shl nsw i64 %indvars.iv, 1
  %3 = or i64 %2, 1
  %4 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %3
  %5 = load i32* %4, align 4, !tbaa !5
  %6 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %3
  %7 = load i32* %6, align 4, !tbaa !5
  %8 = mul nsw i32 %7, %5
  %9 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64 %2
  %10 = load i32* %9, align 8, !tbaa !5
  %11 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64 %2
  %12 = load i32* %11, align 8, !tbaa !5
  %13 = mul nsw i32 %12, %10
  %14 = sub nsw i32 %8, %13
  %15 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
  store i32 %14, i32* %15, align 4, !tbaa !5
  %16 = mul nsw i32 %7, %10
  %17 = mul nsw i32 %12, %5
  %18 = add nsw i32 %17, %16
  %19 = getelementptr inbounds [2048 x i32]* @d, i64 0, i64 %indvars.iv
  store i32 %18, i32* %19, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond = icmp eq i64 %indvars.iv.next, 512
  br i1 %exitcond, label %20, label %1

; <label>:20                                      ; preds = %1
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example12v() #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %index
  %1 = trunc i64 %index to i32
  %broadcast.splatinsert3 = insertelement <4 x i32> undef, i32 %1, i32 0
  %broadcast.splat4 = shufflevector <4 x i32> %broadcast.splatinsert3, <4 x i32> undef, <4 x i32> zeroinitializer
  %induction5 = add <4 x i32> %broadcast.splat4, <i32 0, i32 1, i32 2, i32 3>
  %induction6 = add <4 x i32> %broadcast.splat4, <i32 4, i32 5, i32 6, i32 7>
  %2 = bitcast i32* %0 to <4 x i32>*
  store <4 x i32> %induction5, <4 x i32>* %2, align 16
  %.sum7 = or i64 %index, 4
  %3 = getelementptr [2048 x i32]* @a, i64 0, i64 %.sum7
  %4 = bitcast i32* %3 to <4 x i32>*
  store <4 x i32> %induction6, <4 x i32>* %4, align 16
  %index.next = add i64 %index, 8
  %5 = icmp eq i64 %index.next, 1024
  br i1 %5, label %middle.block, label %vector.body, !llvm.loop !26

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example13PPiS0_S_(i32** nocapture readonly %A, i32** nocapture readonly %B, i32* nocapture %out) #2 {
  br label %.preheader

.preheader:                                       ; preds = %14, %0
  %indvars.iv4 = phi i64 [ 0, %0 ], [ %indvars.iv.next5, %14 ]
  %1 = getelementptr inbounds i32** %A, i64 %indvars.iv4
  %2 = load i32** %1, align 8, !tbaa !27
  %3 = getelementptr inbounds i32** %B, i64 %indvars.iv4
  %4 = load i32** %3, align 8, !tbaa !27
  br label %5

; <label>:5                                       ; preds = %.preheader, %5
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %5 ]
  %diff.02 = phi i32 [ 0, %.preheader ], [ %11, %5 ]
  %6 = getelementptr inbounds i32* %2, i64 %indvars.iv
  %7 = load i32* %6, align 4, !tbaa !5
  %8 = getelementptr inbounds i32* %4, i64 %indvars.iv
  %9 = load i32* %8, align 4, !tbaa !5
  %10 = add i32 %7, %diff.02
  %11 = sub i32 %10, %9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 8
  %12 = trunc i64 %indvars.iv.next to i32
  %13 = icmp slt i32 %12, 1024
  br i1 %13, label %5, label %14

; <label>:14                                      ; preds = %5
  %15 = getelementptr inbounds i32* %out, i64 %indvars.iv4
  store i32 %11, i32* %15, align 4, !tbaa !5
  %indvars.iv.next5 = add nuw nsw i64 %indvars.iv4, 1
  %exitcond = icmp eq i64 %indvars.iv.next5, 32
  br i1 %exitcond, label %16, label %.preheader

; <label>:16                                      ; preds = %14
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example14PPiS0_S_(i32** nocapture readonly %in, i32** nocapture readonly %coeff, i32* nocapture %out) #2 {
.preheader1:
  br label %vector.ph

vector.ph:                                        ; preds = %.preheader1, %middle.block
  %indvars.iv7 = phi i64 [ 0, %.preheader1 ], [ %indvars.iv.next8, %middle.block ]
  %sum.05 = phi i32 [ 0, %.preheader1 ], [ %bin.rdx, %middle.block ]
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi i32 [ %sum.05, %vector.ph ], [ %18, %vector.body ]
  %vec.phi20 = phi i32 [ 0, %vector.ph ], [ %19, %vector.body ]
  %induction1970 = or i64 %index, 1
  %0 = getelementptr inbounds i32** %in, i64 %index
  %1 = getelementptr inbounds i32** %in, i64 %induction1970
  %2 = load i32** %0, align 8, !tbaa !27
  %3 = load i32** %1, align 8, !tbaa !27
  %4 = getelementptr inbounds i32* %2, i64 %indvars.iv7
  %5 = getelementptr inbounds i32* %3, i64 %indvars.iv7
  %6 = load i32* %4, align 4, !tbaa !5
  %7 = load i32* %5, align 4, !tbaa !5
  %8 = getelementptr inbounds i32** %coeff, i64 %index
  %9 = getelementptr inbounds i32** %coeff, i64 %induction1970
  %10 = load i32** %8, align 8, !tbaa !27
  %11 = load i32** %9, align 8, !tbaa !27
  %12 = getelementptr inbounds i32* %10, i64 %indvars.iv7
  %13 = getelementptr inbounds i32* %11, i64 %indvars.iv7
  %14 = load i32* %12, align 4, !tbaa !5
  %15 = load i32* %13, align 4, !tbaa !5
  %16 = mul nsw i32 %14, %6
  %17 = mul nsw i32 %15, %7
  %18 = add nsw i32 %16, %vec.phi
  %19 = add nsw i32 %17, %vec.phi20
  %index.next = add i64 %index, 2
  %20 = icmp eq i64 %index.next, 1024
  br i1 %20, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add i32 %19, %18
  %indvars.iv.next8 = add nuw nsw i64 %indvars.iv7, 1
  %exitcond9 = icmp eq i64 %indvars.iv.next8, 32
  br i1 %exitcond9, label %.preheader1.113, label %vector.ph

.preheader1.113:                                  ; preds = %middle.block
  store i32 %bin.rdx, i32* %out, align 4, !tbaa !5
  br label %vector.ph22

vector.ph22:                                      ; preds = %.preheader1.113, %middle.block24
  %indvars.iv7.1 = phi i64 [ 0, %.preheader1.113 ], [ %indvars.iv.next8.1, %middle.block24 ]
  %sum.05.1 = phi i32 [ 0, %.preheader1.113 ], [ %bin.rdx37, %middle.block24 ]
  br label %vector.body23

vector.body23:                                    ; preds = %vector.body23, %vector.ph22
  %index26 = phi i64 [ 0, %vector.ph22 ], [ %index.next30, %vector.body23 ]
  %vec.phi33 = phi i32 [ %sum.05.1, %vector.ph22 ], [ %41, %vector.body23 ]
  %vec.phi34 = phi i32 [ 0, %vector.ph22 ], [ %42, %vector.body23 ]
  %induction3271 = or i64 %index26, 1
  %21 = or i64 %index26, 1
  %22 = add nsw i64 %induction3271, 1
  %23 = getelementptr inbounds i32** %in, i64 %21
  %24 = getelementptr inbounds i32** %in, i64 %22
  %25 = load i32** %23, align 8, !tbaa !27
  %26 = load i32** %24, align 8, !tbaa !27
  %27 = getelementptr inbounds i32* %25, i64 %indvars.iv7.1
  %28 = getelementptr inbounds i32* %26, i64 %indvars.iv7.1
  %29 = load i32* %27, align 4, !tbaa !5
  %30 = load i32* %28, align 4, !tbaa !5
  %31 = getelementptr inbounds i32** %coeff, i64 %index26
  %32 = getelementptr inbounds i32** %coeff, i64 %induction3271
  %33 = load i32** %31, align 8, !tbaa !27
  %34 = load i32** %32, align 8, !tbaa !27
  %35 = getelementptr inbounds i32* %33, i64 %indvars.iv7.1
  %36 = getelementptr inbounds i32* %34, i64 %indvars.iv7.1
  %37 = load i32* %35, align 4, !tbaa !5
  %38 = load i32* %36, align 4, !tbaa !5
  %39 = mul nsw i32 %37, %29
  %40 = mul nsw i32 %38, %30
  %41 = add nsw i32 %39, %vec.phi33
  %42 = add nsw i32 %40, %vec.phi34
  %index.next30 = add i64 %index26, 2
  %43 = icmp eq i64 %index.next30, 1024
  br i1 %43, label %middle.block24, label %vector.body23, !llvm.loop !30

middle.block24:                                   ; preds = %vector.body23
  %bin.rdx37 = add i32 %42, %41
  %indvars.iv.next8.1 = add nuw nsw i64 %indvars.iv7.1, 1
  %exitcond9.1 = icmp eq i64 %indvars.iv.next8.1, 32
  br i1 %exitcond9.1, label %.preheader1.214, label %vector.ph22

.preheader1.214:                                  ; preds = %middle.block24
  %44 = getelementptr inbounds i32* %out, i64 1
  store i32 %bin.rdx37, i32* %44, align 4, !tbaa !5
  br label %vector.ph38

vector.ph38:                                      ; preds = %.preheader1.214, %middle.block40
  %indvars.iv7.2 = phi i64 [ 0, %.preheader1.214 ], [ %indvars.iv.next8.2, %middle.block40 ]
  %sum.05.2 = phi i32 [ 0, %.preheader1.214 ], [ %bin.rdx53, %middle.block40 ]
  br label %vector.body39

vector.body39:                                    ; preds = %vector.body39, %vector.ph38
  %index42 = phi i64 [ 0, %vector.ph38 ], [ %index.next46, %vector.body39 ]
  %vec.phi49 = phi i32 [ %sum.05.2, %vector.ph38 ], [ %65, %vector.body39 ]
  %vec.phi50 = phi i32 [ 0, %vector.ph38 ], [ %66, %vector.body39 ]
  %induction4872 = or i64 %index42, 1
  %45 = add nsw i64 %index42, 2
  %46 = add nsw i64 %induction4872, 2
  %47 = getelementptr inbounds i32** %in, i64 %45
  %48 = getelementptr inbounds i32** %in, i64 %46
  %49 = load i32** %47, align 8, !tbaa !27
  %50 = load i32** %48, align 8, !tbaa !27
  %51 = getelementptr inbounds i32* %49, i64 %indvars.iv7.2
  %52 = getelementptr inbounds i32* %50, i64 %indvars.iv7.2
  %53 = load i32* %51, align 4, !tbaa !5
  %54 = load i32* %52, align 4, !tbaa !5
  %55 = getelementptr inbounds i32** %coeff, i64 %index42
  %56 = getelementptr inbounds i32** %coeff, i64 %induction4872
  %57 = load i32** %55, align 8, !tbaa !27
  %58 = load i32** %56, align 8, !tbaa !27
  %59 = getelementptr inbounds i32* %57, i64 %indvars.iv7.2
  %60 = getelementptr inbounds i32* %58, i64 %indvars.iv7.2
  %61 = load i32* %59, align 4, !tbaa !5
  %62 = load i32* %60, align 4, !tbaa !5
  %63 = mul nsw i32 %61, %53
  %64 = mul nsw i32 %62, %54
  %65 = add nsw i32 %63, %vec.phi49
  %66 = add nsw i32 %64, %vec.phi50
  %index.next46 = add i64 %index42, 2
  %67 = icmp eq i64 %index.next46, 1024
  br i1 %67, label %middle.block40, label %vector.body39, !llvm.loop !31

middle.block40:                                   ; preds = %vector.body39
  %bin.rdx53 = add i32 %66, %65
  %indvars.iv.next8.2 = add nuw nsw i64 %indvars.iv7.2, 1
  %exitcond9.2 = icmp eq i64 %indvars.iv.next8.2, 32
  br i1 %exitcond9.2, label %.preheader1.315, label %vector.ph38

.preheader1.315:                                  ; preds = %middle.block40
  %68 = getelementptr inbounds i32* %out, i64 2
  store i32 %bin.rdx53, i32* %68, align 4, !tbaa !5
  br label %vector.ph54

vector.ph54:                                      ; preds = %.preheader1.315, %middle.block56
  %indvars.iv7.3 = phi i64 [ 0, %.preheader1.315 ], [ %indvars.iv.next8.3, %middle.block56 ]
  %sum.05.3 = phi i32 [ 0, %.preheader1.315 ], [ %bin.rdx69, %middle.block56 ]
  br label %vector.body55

vector.body55:                                    ; preds = %vector.body55, %vector.ph54
  %index58 = phi i64 [ 0, %vector.ph54 ], [ %index.next62, %vector.body55 ]
  %vec.phi65 = phi i32 [ %sum.05.3, %vector.ph54 ], [ %89, %vector.body55 ]
  %vec.phi66 = phi i32 [ 0, %vector.ph54 ], [ %90, %vector.body55 ]
  %induction6473 = or i64 %index58, 1
  %69 = add nsw i64 %index58, 3
  %70 = add nsw i64 %induction6473, 3
  %71 = getelementptr inbounds i32** %in, i64 %69
  %72 = getelementptr inbounds i32** %in, i64 %70
  %73 = load i32** %71, align 8, !tbaa !27
  %74 = load i32** %72, align 8, !tbaa !27
  %75 = getelementptr inbounds i32* %73, i64 %indvars.iv7.3
  %76 = getelementptr inbounds i32* %74, i64 %indvars.iv7.3
  %77 = load i32* %75, align 4, !tbaa !5
  %78 = load i32* %76, align 4, !tbaa !5
  %79 = getelementptr inbounds i32** %coeff, i64 %index58
  %80 = getelementptr inbounds i32** %coeff, i64 %induction6473
  %81 = load i32** %79, align 8, !tbaa !27
  %82 = load i32** %80, align 8, !tbaa !27
  %83 = getelementptr inbounds i32* %81, i64 %indvars.iv7.3
  %84 = getelementptr inbounds i32* %82, i64 %indvars.iv7.3
  %85 = load i32* %83, align 4, !tbaa !5
  %86 = load i32* %84, align 4, !tbaa !5
  %87 = mul nsw i32 %85, %77
  %88 = mul nsw i32 %86, %78
  %89 = add nsw i32 %87, %vec.phi65
  %90 = add nsw i32 %88, %vec.phi66
  %index.next62 = add i64 %index58, 2
  %91 = icmp eq i64 %index.next62, 1024
  br i1 %91, label %middle.block56, label %vector.body55, !llvm.loop !32

middle.block56:                                   ; preds = %vector.body55
  %bin.rdx69 = add i32 %90, %89
  %indvars.iv.next8.3 = add nuw nsw i64 %indvars.iv7.3, 1
  %exitcond9.3 = icmp eq i64 %indvars.iv.next8.3, 32
  br i1 %exitcond9.3, label %92, label %vector.ph54

; <label>:92                                      ; preds = %middle.block56
  %93 = getelementptr inbounds i32* %out, i64 3
  store i32 %bin.rdx69, i32* %93, align 4, !tbaa !5
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example21Pii(i32* nocapture %b, i32 %n) #2 {
  %1 = icmp sgt i32 %n, 0
  br i1 %1, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %0
  %2 = sext i32 %n to i64
  %3 = add i32 %n, -1
  %4 = zext i32 %3 to i64
  %5 = add i64 %4, 1
  %end.idx = add i64 %4, 1
  %n.vec = and i64 %5, 8589934584
  %cmp.zero = icmp eq i64 %n.vec, 0
  %rev.ind.end = sub i64 %2, %n.vec
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph ]
  %vec.phi = phi <4 x i32> [ %10, %vector.body ], [ zeroinitializer, %.lr.ph ]
  %vec.phi5 = phi <4 x i32> [ %11, %vector.body ], [ zeroinitializer, %.lr.ph ]
  %reverse.idx = sub i64 %2, %index
  %.sum = add i64 %reverse.idx, -4
  %6 = getelementptr i32* %b, i64 %.sum
  %7 = bitcast i32* %6 to <4 x i32>*
  %wide.load = load <4 x i32>* %7, align 4
  %reverse = shufflevector <4 x i32> %wide.load, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %.sum13 = add i64 %reverse.idx, -8
  %8 = getelementptr i32* %b, i64 %.sum13
  %9 = bitcast i32* %8 to <4 x i32>*
  %wide.load6 = load <4 x i32>* %9, align 4
  %reverse7 = shufflevector <4 x i32> %wide.load6, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %10 = add nsw <4 x i32> %reverse, %vec.phi
  %11 = add nsw <4 x i32> %reverse7, %vec.phi5
  %index.next = add i64 %index, 8
  %12 = icmp eq i64 %index.next, %n.vec
  br i1 %12, label %middle.block, label %vector.body, !llvm.loop !33

middle.block:                                     ; preds = %vector.body, %.lr.ph
  %resume.val = phi i64 [ %2, %.lr.ph ], [ %rev.ind.end, %vector.body ]
  %new.indc.resume.val = phi i64 [ 0, %.lr.ph ], [ %n.vec, %vector.body ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %.lr.ph ], [ %10, %vector.body ]
  %rdx.vec.exit.phi8 = phi <4 x i32> [ zeroinitializer, %.lr.ph ], [ %11, %vector.body ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi8, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx9 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf10 = shufflevector <4 x i32> %bin.rdx9, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx11 = add <4 x i32> %bin.rdx9, %rdx.shuf10
  %13 = extractelement <4 x i32> %bin.rdx11, i32 0
  %cmp.n = icmp eq i64 %end.idx, %new.indc.resume.val
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph

scalar.ph:                                        ; preds = %middle.block, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %resume.val, %middle.block ]
  %a.02 = phi i32 [ %16, %scalar.ph ], [ %13, %middle.block ]
  %indvars.iv.next = add nsw i64 %indvars.iv, -1
  %14 = getelementptr inbounds i32* %b, i64 %indvars.iv.next
  %15 = load i32* %14, align 4, !tbaa !5
  %16 = add nsw i32 %15, %a.02
  %17 = trunc i64 %indvars.iv.next to i32
  %18 = icmp sgt i32 %17, 0
  br i1 %18, label %scalar.ph, label %._crit_edge, !llvm.loop !34

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %0
  %a.0.lcssa = phi i32 [ 0, %0 ], [ %16, %scalar.ph ], [ %13, %middle.block ]
  store i32 %a.0.lcssa, i32* %b, align 4, !tbaa !5
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example23PtPj(i16* nocapture readonly %src, i32* nocapture %dst) #2 {
vector.memcheck:
  %scevgep8 = getelementptr i16* %src, i64 255
  %scevgep = getelementptr i32* %dst, i64 255
  %0 = bitcast i32* %scevgep to i16*
  %1 = bitcast i16* %scevgep8 to i32*
  %bound1 = icmp uge i16* %0, %src
  %bound0 = icmp uge i32* %1, %dst
  %memcheck.conflict = and i1 %bound0, %bound1
  %ptr.ind.end = getelementptr i32* %dst, i64 256
  %ptr.ind.end12 = getelementptr i16* %src, i64 256
  br i1 %memcheck.conflict, label %middle.block, label %vector.body

vector.body:                                      ; preds = %vector.memcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.memcheck ]
  %next.gep = getelementptr i32* %dst, i64 %index
  %next.gep37 = getelementptr i16* %src, i64 %index
  %2 = bitcast i16* %next.gep37 to <4 x i16>*
  %wide.load = load <4 x i16>* %2, align 2
  %next.gep37.sum79 = or i64 %index, 4
  %3 = getelementptr i16* %src, i64 %next.gep37.sum79
  %4 = bitcast i16* %3 to <4 x i16>*
  %wide.load60 = load <4 x i16>* %4, align 2
  %5 = zext <4 x i16> %wide.load to <4 x i32>
  %6 = zext <4 x i16> %wide.load60 to <4 x i32>
  %7 = shl nuw nsw <4 x i32> %5, <i32 7, i32 7, i32 7, i32 7>
  %8 = shl nuw nsw <4 x i32> %6, <i32 7, i32 7, i32 7, i32 7>
  %9 = bitcast i32* %next.gep to <4 x i32>*
  store <4 x i32> %7, <4 x i32>* %9, align 4
  %next.gep.sum84 = or i64 %index, 4
  %10 = getelementptr i32* %dst, i64 %next.gep.sum84
  %11 = bitcast i32* %10 to <4 x i32>*
  store <4 x i32> %8, <4 x i32>* %11, align 4
  %index.next = add i64 %index, 8
  %12 = icmp eq i64 %index.next, 256
  br i1 %12, label %middle.block, label %vector.body, !llvm.loop !35

middle.block:                                     ; preds = %vector.body, %vector.memcheck
  %resume.val = phi i1 [ false, %vector.memcheck ], [ true, %vector.body ]
  %trunc.resume.val = phi i32 [ 0, %vector.memcheck ], [ 256, %vector.body ]
  %resume.val10 = phi i32* [ %dst, %vector.memcheck ], [ %ptr.ind.end, %vector.body ]
  %resume.val11 = phi i16* [ %src, %vector.memcheck ], [ %ptr.ind.end12, %vector.body ]
  br i1 %resume.val, label %19, label %scalar.ph

scalar.ph:                                        ; preds = %middle.block, %scalar.ph
  %i.04 = phi i32 [ %18, %scalar.ph ], [ %trunc.resume.val, %middle.block ]
  %.03 = phi i32* [ %17, %scalar.ph ], [ %resume.val10, %middle.block ]
  %.012 = phi i16* [ %13, %scalar.ph ], [ %resume.val11, %middle.block ]
  %13 = getelementptr inbounds i16* %.012, i64 1
  %14 = load i16* %.012, align 2, !tbaa !36
  %15 = zext i16 %14 to i32
  %16 = shl nuw nsw i32 %15, 7
  %17 = getelementptr inbounds i32* %.03, i64 1
  store i32 %16, i32* %.03, align 4, !tbaa !5
  %18 = add nsw i32 %i.04, 1
  %exitcond = icmp eq i32 %18, 256
  br i1 %exitcond, label %19, label %scalar.ph, !llvm.loop !38

; <label>:19                                      ; preds = %middle.block, %scalar.ph
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example24ss(i16 signext %x, i16 signext %y) #2 {
vector.ph:
  %broadcast.splatinsert3 = insertelement <4 x i16> undef, i16 %x, i32 0
  %broadcast.splat4 = shufflevector <4 x i16> %broadcast.splatinsert3, <4 x i16> undef, <4 x i32> zeroinitializer
  %broadcast.splatinsert5 = insertelement <4 x i16> undef, i16 %y, i32 0
  %broadcast.splat6 = shufflevector <4 x i16> %broadcast.splatinsert5, <4 x i16> undef, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds [1024 x float]* @fa, i64 0, i64 %index
  %1 = bitcast float* %0 to <4 x float>*
  %wide.load = load <4 x float>* %1, align 16
  %2 = getelementptr inbounds [1024 x float]* @fb, i64 0, i64 %index
  %3 = bitcast float* %2 to <4 x float>*
  %wide.load2 = load <4 x float>* %3, align 16
  %4 = fcmp olt <4 x float> %wide.load, %wide.load2
  %5 = select <4 x i1> %4, <4 x i16> %broadcast.splat4, <4 x i16> %broadcast.splat6
  %6 = sext <4 x i16> %5 to <4 x i32>
  %7 = getelementptr inbounds [1024 x i32]* @ic, i64 0, i64 %index
  %8 = bitcast i32* %7 to <4 x i32>*
  store <4 x i32> %6, <4 x i32>* %8, align 16
  %index.next = add i64 %index, 4
  %9 = icmp eq i64 %index.next, 1024
  br i1 %9, label %middle.block, label %vector.body, !llvm.loop !39

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: noinline nounwind uwtable
define void @_Z9example25v() #2 {
vector.ph:
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %0 = getelementptr inbounds [1024 x float]* @da, i64 0, i64 %index
  %1 = bitcast float* %0 to <4 x float>*
  %wide.load = load <4 x float>* %1, align 16
  %2 = getelementptr inbounds [1024 x float]* @db, i64 0, i64 %index
  %3 = bitcast float* %2 to <4 x float>*
  %wide.load2 = load <4 x float>* %3, align 16
  %4 = fcmp olt <4 x float> %wide.load, %wide.load2
  %5 = getelementptr inbounds [1024 x float]* @dc, i64 0, i64 %index
  %6 = bitcast float* %5 to <4 x float>*
  %wide.load3 = load <4 x float>* %6, align 16
  %7 = getelementptr inbounds [1024 x float]* @dd, i64 0, i64 %index
  %8 = bitcast float* %7 to <4 x float>*
  %wide.load4 = load <4 x float>* %8, align 16
  %9 = fcmp olt <4 x float> %wide.load3, %wide.load4
  %10 = and <4 x i1> %4, %9
  %11 = zext <4 x i1> %10 to <4 x i32>
  %12 = getelementptr inbounds [1024 x i32]* @dj, i64 0, i64 %index
  %13 = bitcast i32* %12 to <4 x i32>*
  store <4 x i32> %11, <4 x i32>* %13, align 16
  %index.next = add i64 %index, 4
  %14 = icmp eq i64 %index.next, 1024
  br i1 %14, label %middle.block, label %vector.body, !llvm.loop !40

middle.block:                                     ; preds = %vector.body
  ret void
}

; Function Attrs: nounwind uwtable
define void @_Z11init_memoryPvS_(i8* %start, i8* readnone %end) #3 {
  %1 = icmp eq i8* %start, %end
  br i1 %1, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %0, %.lr.ph
  %state.02 = phi i32 [ %6, %.lr.ph ], [ 1, %0 ]
  %.01 = phi i8* [ %8, %.lr.ph ], [ %start, %0 ]
  %2 = and i32 %state.02, 255
  %3 = mul nsw i32 %2, 7
  %4 = and i32 %3, 255
  %5 = xor i32 %4, 39
  %6 = add nsw i32 %5, 1
  %7 = trunc i32 %6 to i8
  store i8 %7, i8* %.01, align 1, !tbaa !41
  %8 = getelementptr inbounds i8* %.01, i64 1
  %9 = icmp eq i8* %8, %end
  br i1 %9, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %0
  ret void
}

; Function Attrs: nounwind uwtable
define void @_Z17init_memory_floatPfS_(float* %start, float* readnone %end) #3 {
  %1 = icmp eq float* %start, %end
  br i1 %1, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %0, %.lr.ph
  %state.02 = phi float [ %4, %.lr.ph ], [ 1.000000e+00, %0 ]
  %.01 = phi float* [ %5, %.lr.ph ], [ %start, %0 ]
  %2 = fpext float %state.02 to double
  %3 = fmul double %2, 1.100000e+00
  %4 = fptrunc double %3 to float
  store float %4, float* %.01, align 4, !tbaa !42
  %5 = getelementptr inbounds float* %.01, i64 1
  %6 = icmp eq float* %5, %end
  br i1 %6, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %0
  ret void
}

; Function Attrs: nounwind readonly uwtable
define i32 @_Z13digest_memoryPvS_(i8* readonly %start, i8* readnone %end) #4 {
  %1 = icmp eq i8* %start, %end
  br i1 %1, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %0, %.lr.ph
  %state.02 = phi i32 [ %8, %.lr.ph ], [ 1, %0 ]
  %.01 = phi i8* [ %9, %.lr.ph ], [ %start, %0 ]
  %2 = mul i32 %state.02, 3
  %3 = load i8* %.01, align 1, !tbaa !41
  %4 = zext i8 %3 to i32
  %5 = xor i32 %4, %2
  %6 = lshr i32 %2, 8
  %7 = shl i32 %5, 8
  %8 = xor i32 %7, %6
  %9 = getelementptr inbounds i8* %.01, i64 1
  %10 = icmp eq i8* %9, %end
  br i1 %10, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %0
  %state.0.lcssa = phi i32 [ 1, %0 ], [ %8, %.lr.ph ]
  ret i32 %state.0.lcssa
}

; Function Attrs: uwtable
define i32 @main(i32 %argc, i8** nocapture readnone %argv) #5 {
  %results = alloca %"class.std::vector", align 8
  %dummy = alloca i32, align 4
  %atimer = alloca %class.Timer, align 8
  %r = alloca i32, align 4
  %atimer1 = alloca %class.Timer, align 8
  %r3 = alloca i32, align 4
  %atimer4 = alloca %class.Timer, align 8
  %r6 = alloca i32, align 4
  %atimer7 = alloca %class.Timer, align 8
  %r9 = alloca i32, align 4
  %atimer10 = alloca %class.Timer, align 8
  %r12 = alloca i32, align 4
  %atimer13 = alloca %class.Timer, align 8
  %r15 = alloca i32, align 4
  %atimer16 = alloca %class.Timer, align 8
  %r18 = alloca i32, align 4
  %atimer19 = alloca %class.Timer, align 8
  %r21 = alloca i32, align 4
  %atimer22 = alloca %class.Timer, align 8
  %r24 = alloca i32, align 4
  %atimer25 = alloca %class.Timer, align 8
  %r27 = alloca i32, align 4
  %atimer28 = alloca %class.Timer, align 8
  %r30 = alloca i32, align 4
  %atimer31 = alloca %class.Timer, align 8
  %r33 = alloca i32, align 4
  %atimer34 = alloca %class.Timer, align 8
  %r36 = alloca i32, align 4
  %atimer37 = alloca %class.Timer, align 8
  %r39 = alloca i32, align 4
  %atimer40 = alloca %class.Timer, align 8
  %r42 = alloca i32, align 4
  %atimer43 = alloca %class.Timer, align 8
  %r45 = alloca i32, align 4
  %atimer46 = alloca %class.Timer, align 8
  %r48 = alloca i32, align 4
  %1 = bitcast %"class.std::vector"* %results to i8*
  call void @llvm.memset.p0i8.i64(i8* %1, i8 0, i64 24, i32 8, i1 false) #1
  store i32 0, i32* %dummy, align 4, !tbaa !5
  br label %.lr.ph.i

.lr.ph.i:                                         ; preds = %.lr.ph.i, %0
  %state.02.i = phi i32 [ %6, %.lr.ph.i ], [ 1, %0 ]
  %.01.i = phi i8* [ %8, %.lr.ph.i ], [ bitcast ([1024 x i32]* @ia to i8*), %0 ]
  %2 = and i32 %state.02.i, 255
  %3 = mul nsw i32 %2, 7
  %4 = and i32 %3, 255
  %5 = xor i32 %4, 39
  %6 = add nsw i32 %5, 1
  %7 = trunc i32 %6 to i8
  store i8 %7, i8* %.01.i, align 1, !tbaa !41
  %8 = getelementptr inbounds i8* %.01.i, i64 1
  %9 = icmp eq i8* %8, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %9, label %.lr.ph.i54.preheader, label %.lr.ph.i

.lr.ph.i54.preheader:                             ; preds = %.lr.ph.i
  %10 = icmp sgt i32 %argc, 1
  br label %.lr.ph.i54

.lr.ph.i54:                                       ; preds = %.lr.ph.i54.preheader, %.lr.ph.i54
  %state.02.i52 = phi i32 [ %15, %.lr.ph.i54 ], [ 1, %.lr.ph.i54.preheader ]
  %.01.i53 = phi i8* [ %17, %.lr.ph.i54 ], [ bitcast ([1024 x i32]* @ib to i8*), %.lr.ph.i54.preheader ]
  %11 = and i32 %state.02.i52, 255
  %12 = mul nsw i32 %11, 7
  %13 = and i32 %12, 255
  %14 = xor i32 %13, 39
  %15 = add nsw i32 %14, 1
  %16 = trunc i32 %15 to i8
  store i8 %16, i8* %.01.i53, align 1, !tbaa !41
  %17 = getelementptr inbounds i8* %.01.i53, i64 1
  %18 = icmp eq i8* %17, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ib, i64 1, i64 0) to i8*)
  br i1 %18, label %.lr.ph.i59, label %.lr.ph.i54

.lr.ph.i59:                                       ; preds = %.lr.ph.i54, %.lr.ph.i59
  %state.02.i57 = phi i32 [ %23, %.lr.ph.i59 ], [ 1, %.lr.ph.i54 ]
  %.01.i58 = phi i8* [ %25, %.lr.ph.i59 ], [ bitcast ([1024 x i32]* @ic to i8*), %.lr.ph.i54 ]
  %19 = and i32 %state.02.i57, 255
  %20 = mul nsw i32 %19, 7
  %21 = and i32 %20, 255
  %22 = xor i32 %21, 39
  %23 = add nsw i32 %22, 1
  %24 = trunc i32 %23 to i8
  store i8 %24, i8* %.01.i58, align 1, !tbaa !41
  %25 = getelementptr inbounds i8* %.01.i58, i64 1
  %26 = icmp eq i8* %25, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ic, i64 1, i64 0) to i8*)
  br i1 %26, label %.lr.ph.i63, label %.lr.ph.i59

.lr.ph.i63:                                       ; preds = %.lr.ph.i59, %.lr.ph.i63
  %state.02.i61 = phi i32 [ %31, %.lr.ph.i63 ], [ 1, %.lr.ph.i59 ]
  %.01.i62 = phi i8* [ %33, %.lr.ph.i63 ], [ bitcast ([1024 x i16]* @sa to i8*), %.lr.ph.i59 ]
  %27 = and i32 %state.02.i61, 255
  %28 = mul nsw i32 %27, 7
  %29 = and i32 %28, 255
  %30 = xor i32 %29, 39
  %31 = add nsw i32 %30, 1
  %32 = trunc i32 %31 to i8
  store i8 %32, i8* %.01.i62, align 1, !tbaa !41
  %33 = getelementptr inbounds i8* %.01.i62, i64 1
  %34 = icmp eq i8* %33, bitcast (i16* getelementptr inbounds ([1024 x i16]* @sa, i64 1, i64 0) to i8*)
  br i1 %34, label %.lr.ph.i67, label %.lr.ph.i63

.lr.ph.i67:                                       ; preds = %.lr.ph.i63, %.lr.ph.i67
  %state.02.i65 = phi i32 [ %39, %.lr.ph.i67 ], [ 1, %.lr.ph.i63 ]
  %.01.i66 = phi i8* [ %41, %.lr.ph.i67 ], [ bitcast ([1024 x i16]* @sb to i8*), %.lr.ph.i63 ]
  %35 = and i32 %state.02.i65, 255
  %36 = mul nsw i32 %35, 7
  %37 = and i32 %36, 255
  %38 = xor i32 %37, 39
  %39 = add nsw i32 %38, 1
  %40 = trunc i32 %39 to i8
  store i8 %40, i8* %.01.i66, align 1, !tbaa !41
  %41 = getelementptr inbounds i8* %.01.i66, i64 1
  %42 = icmp eq i8* %41, bitcast (i16* getelementptr inbounds ([1024 x i16]* @sb, i64 1, i64 0) to i8*)
  br i1 %42, label %.lr.ph.i71, label %.lr.ph.i67

.lr.ph.i71:                                       ; preds = %.lr.ph.i67, %.lr.ph.i71
  %state.02.i69 = phi i32 [ %47, %.lr.ph.i71 ], [ 1, %.lr.ph.i67 ]
  %.01.i70 = phi i8* [ %49, %.lr.ph.i71 ], [ bitcast ([1024 x i16]* @sc to i8*), %.lr.ph.i67 ]
  %43 = and i32 %state.02.i69, 255
  %44 = mul nsw i32 %43, 7
  %45 = and i32 %44, 255
  %46 = xor i32 %45, 39
  %47 = add nsw i32 %46, 1
  %48 = trunc i32 %47 to i8
  store i8 %48, i8* %.01.i70, align 1, !tbaa !41
  %49 = getelementptr inbounds i8* %.01.i70, i64 1
  %50 = icmp eq i8* %49, bitcast (i16* getelementptr inbounds ([1024 x i16]* @sc, i64 1, i64 0) to i8*)
  br i1 %50, label %.lr.ph.i76, label %.lr.ph.i71

.lr.ph.i76:                                       ; preds = %.lr.ph.i71, %.lr.ph.i76
  %state.02.i74 = phi i32 [ %55, %.lr.ph.i76 ], [ 1, %.lr.ph.i71 ]
  %.01.i75 = phi i8* [ %57, %.lr.ph.i76 ], [ bitcast ([2048 x i32]* @a to i8*), %.lr.ph.i71 ]
  %51 = and i32 %state.02.i74, 255
  %52 = mul nsw i32 %51, 7
  %53 = and i32 %52, 255
  %54 = xor i32 %53, 39
  %55 = add nsw i32 %54, 1
  %56 = trunc i32 %55 to i8
  store i8 %56, i8* %.01.i75, align 1, !tbaa !41
  %57 = getelementptr inbounds i8* %.01.i75, i64 1
  %58 = icmp eq i8* %57, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 1, i64 0) to i8*)
  br i1 %58, label %.lr.ph.i80, label %.lr.ph.i76

.lr.ph.i80:                                       ; preds = %.lr.ph.i76, %.lr.ph.i80
  %state.02.i78 = phi i32 [ %63, %.lr.ph.i80 ], [ 1, %.lr.ph.i76 ]
  %.01.i79 = phi i8* [ %65, %.lr.ph.i80 ], [ bitcast ([2048 x i32]* @b to i8*), %.lr.ph.i76 ]
  %59 = and i32 %state.02.i78, 255
  %60 = mul nsw i32 %59, 7
  %61 = and i32 %60, 255
  %62 = xor i32 %61, 39
  %63 = add nsw i32 %62, 1
  %64 = trunc i32 %63 to i8
  store i8 %64, i8* %.01.i79, align 1, !tbaa !41
  %65 = getelementptr inbounds i8* %.01.i79, i64 1
  %66 = icmp eq i8* %65, bitcast (i32* getelementptr inbounds ([2048 x i32]* @b, i64 1, i64 0) to i8*)
  br i1 %66, label %.lr.ph.i85, label %.lr.ph.i80

.lr.ph.i85:                                       ; preds = %.lr.ph.i80, %.lr.ph.i85
  %state.02.i83 = phi i32 [ %71, %.lr.ph.i85 ], [ 1, %.lr.ph.i80 ]
  %.01.i84 = phi i8* [ %73, %.lr.ph.i85 ], [ bitcast ([2048 x i32]* @c to i8*), %.lr.ph.i80 ]
  %67 = and i32 %state.02.i83, 255
  %68 = mul nsw i32 %67, 7
  %69 = and i32 %68, 255
  %70 = xor i32 %69, 39
  %71 = add nsw i32 %70, 1
  %72 = trunc i32 %71 to i8
  store i8 %72, i8* %.01.i84, align 1, !tbaa !41
  %73 = getelementptr inbounds i8* %.01.i84, i64 1
  %74 = icmp eq i8* %73, bitcast (i32* getelementptr inbounds ([2048 x i32]* @c, i64 1, i64 0) to i8*)
  br i1 %74, label %.lr.ph.i89, label %.lr.ph.i85

.lr.ph.i89:                                       ; preds = %.lr.ph.i85, %.lr.ph.i89
  %state.02.i87 = phi i32 [ %79, %.lr.ph.i89 ], [ 1, %.lr.ph.i85 ]
  %.01.i88 = phi i8* [ %81, %.lr.ph.i89 ], [ bitcast ([1024 x i32]* @ua to i8*), %.lr.ph.i85 ]
  %75 = and i32 %state.02.i87, 255
  %76 = mul nsw i32 %75, 7
  %77 = and i32 %76, 255
  %78 = xor i32 %77, 39
  %79 = add nsw i32 %78, 1
  %80 = trunc i32 %79 to i8
  store i8 %80, i8* %.01.i88, align 1, !tbaa !41
  %81 = getelementptr inbounds i8* %.01.i88, i64 1
  %82 = icmp eq i8* %81, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ua, i64 1, i64 0) to i8*)
  br i1 %82, label %.lr.ph.i95, label %.lr.ph.i89

.lr.ph.i95:                                       ; preds = %.lr.ph.i89, %.lr.ph.i95
  %state.02.i93 = phi i32 [ %87, %.lr.ph.i95 ], [ 1, %.lr.ph.i89 ]
  %.01.i94 = phi i8* [ %89, %.lr.ph.i95 ], [ bitcast ([1024 x i32]* @ub to i8*), %.lr.ph.i89 ]
  %83 = and i32 %state.02.i93, 255
  %84 = mul nsw i32 %83, 7
  %85 = and i32 %84, 255
  %86 = xor i32 %85, 39
  %87 = add nsw i32 %86, 1
  %88 = trunc i32 %87 to i8
  store i8 %88, i8* %.01.i94, align 1, !tbaa !41
  %89 = getelementptr inbounds i8* %.01.i94, i64 1
  %90 = icmp eq i8* %89, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ub, i64 1, i64 0) to i8*)
  br i1 %90, label %.lr.ph.i99, label %.lr.ph.i95

.lr.ph.i99:                                       ; preds = %.lr.ph.i95, %.lr.ph.i99
  %state.02.i97 = phi i32 [ %95, %.lr.ph.i99 ], [ 1, %.lr.ph.i95 ]
  %.01.i98 = phi i8* [ %97, %.lr.ph.i99 ], [ bitcast ([1024 x i32]* @uc to i8*), %.lr.ph.i95 ]
  %91 = and i32 %state.02.i97, 255
  %92 = mul nsw i32 %91, 7
  %93 = and i32 %92, 255
  %94 = xor i32 %93, 39
  %95 = add nsw i32 %94, 1
  %96 = trunc i32 %95 to i8
  store i8 %96, i8* %.01.i98, align 1, !tbaa !41
  %97 = getelementptr inbounds i8* %.01.i98, i64 1
  %98 = icmp eq i8* %97, bitcast (i32* getelementptr inbounds ([1024 x i32]* @uc, i64 1, i64 0) to i8*)
  br i1 %98, label %.lr.ph.i103, label %.lr.ph.i99

.lr.ph.i103:                                      ; preds = %.lr.ph.i99, %.lr.ph.i103
  %state.02.i101 = phi i32 [ %103, %.lr.ph.i103 ], [ 1, %.lr.ph.i99 ]
  %.01.i102 = phi i8* [ %105, %.lr.ph.i103 ], [ bitcast ([32 x [1024 x i32]]* @G to i8*), %.lr.ph.i99 ]
  %99 = and i32 %state.02.i101, 255
  %100 = mul nsw i32 %99, 7
  %101 = and i32 %100, 255
  %102 = xor i32 %101, 39
  %103 = add nsw i32 %102, 1
  %104 = trunc i32 %103 to i8
  store i8 %104, i8* %.01.i102, align 1, !tbaa !41
  %105 = getelementptr inbounds i8* %.01.i102, i64 1
  %106 = icmp eq i8* %105, bitcast (i32* getelementptr inbounds ([32 x [1024 x i32]]* @G, i64 0, i64 1, i64 0) to i8*)
  br i1 %106, label %.lr.ph.i107, label %.lr.ph.i103

.lr.ph.i107:                                      ; preds = %.lr.ph.i103, %.lr.ph.i107
  %state.02.i105 = phi float [ %109, %.lr.ph.i107 ], [ 1.000000e+00, %.lr.ph.i103 ]
  %.01.i106 = phi float* [ %110, %.lr.ph.i107 ], [ getelementptr inbounds ([1024 x float]* @fa, i64 0, i64 0), %.lr.ph.i103 ]
  %107 = fpext float %state.02.i105 to double
  %108 = fmul double %107, 1.100000e+00
  %109 = fptrunc double %108 to float
  store float %109, float* %.01.i106, align 4, !tbaa !42
  %110 = getelementptr inbounds float* %.01.i106, i64 1
  %111 = icmp eq float* %110, getelementptr inbounds ([1024 x float]* @fa, i64 1, i64 0)
  br i1 %111, label %.lr.ph.i113, label %.lr.ph.i107

.lr.ph.i113:                                      ; preds = %.lr.ph.i107, %.lr.ph.i113
  %state.02.i111 = phi float [ %114, %.lr.ph.i113 ], [ 1.000000e+00, %.lr.ph.i107 ]
  %.01.i112 = phi float* [ %115, %.lr.ph.i113 ], [ getelementptr inbounds ([1024 x float]* @fb, i64 0, i64 0), %.lr.ph.i107 ]
  %112 = fpext float %state.02.i111 to double
  %113 = fmul double %112, 1.100000e+00
  %114 = fptrunc double %113 to float
  store float %114, float* %.01.i112, align 4, !tbaa !42
  %115 = getelementptr inbounds float* %.01.i112, i64 1
  %116 = icmp eq float* %115, getelementptr inbounds ([1024 x float]* @fb, i64 1, i64 0)
  br i1 %116, label %.lr.ph.i117, label %.lr.ph.i113

.lr.ph.i117:                                      ; preds = %.lr.ph.i113, %.lr.ph.i117
  %state.02.i115 = phi float [ %119, %.lr.ph.i117 ], [ 1.000000e+00, %.lr.ph.i113 ]
  %.01.i116 = phi float* [ %120, %.lr.ph.i117 ], [ getelementptr inbounds ([1024 x float]* @da, i64 0, i64 0), %.lr.ph.i113 ]
  %117 = fpext float %state.02.i115 to double
  %118 = fmul double %117, 1.100000e+00
  %119 = fptrunc double %118 to float
  store float %119, float* %.01.i116, align 4, !tbaa !42
  %120 = getelementptr inbounds float* %.01.i116, i64 1
  %121 = icmp eq float* %120, getelementptr inbounds ([1024 x float]* @da, i64 1, i64 0)
  br i1 %121, label %.lr.ph.i121, label %.lr.ph.i117

.lr.ph.i121:                                      ; preds = %.lr.ph.i117, %.lr.ph.i121
  %state.02.i119 = phi float [ %124, %.lr.ph.i121 ], [ 1.000000e+00, %.lr.ph.i117 ]
  %.01.i120 = phi float* [ %125, %.lr.ph.i121 ], [ getelementptr inbounds ([1024 x float]* @db, i64 0, i64 0), %.lr.ph.i117 ]
  %122 = fpext float %state.02.i119 to double
  %123 = fmul double %122, 1.100000e+00
  %124 = fptrunc double %123 to float
  store float %124, float* %.01.i120, align 4, !tbaa !42
  %125 = getelementptr inbounds float* %.01.i120, i64 1
  %126 = icmp eq float* %125, getelementptr inbounds ([1024 x float]* @db, i64 1, i64 0)
  br i1 %126, label %.lr.ph.i125, label %.lr.ph.i121

.lr.ph.i125:                                      ; preds = %.lr.ph.i121, %.lr.ph.i125
  %state.02.i123 = phi float [ %129, %.lr.ph.i125 ], [ 1.000000e+00, %.lr.ph.i121 ]
  %.01.i124 = phi float* [ %130, %.lr.ph.i125 ], [ getelementptr inbounds ([1024 x float]* @dc, i64 0, i64 0), %.lr.ph.i121 ]
  %127 = fpext float %state.02.i123 to double
  %128 = fmul double %127, 1.100000e+00
  %129 = fptrunc double %128 to float
  store float %129, float* %.01.i124, align 4, !tbaa !42
  %130 = getelementptr inbounds float* %.01.i124, i64 1
  %131 = icmp eq float* %130, getelementptr inbounds ([1024 x float]* @dc, i64 1, i64 0)
  br i1 %131, label %.lr.ph.i129, label %.lr.ph.i125

.lr.ph.i129:                                      ; preds = %.lr.ph.i125, %.lr.ph.i129
  %state.02.i127 = phi float [ %134, %.lr.ph.i129 ], [ 1.000000e+00, %.lr.ph.i125 ]
  %.01.i128 = phi float* [ %135, %.lr.ph.i129 ], [ getelementptr inbounds ([1024 x float]* @dd, i64 0, i64 0), %.lr.ph.i125 ]
  %132 = fpext float %state.02.i127 to double
  %133 = fmul double %132, 1.100000e+00
  %134 = fptrunc double %133 to float
  store float %134, float* %.01.i128, align 4, !tbaa !42
  %135 = getelementptr inbounds float* %.01.i128, i64 1
  %136 = icmp eq float* %135, getelementptr inbounds ([1024 x float]* @dd, i64 1, i64 0)
  br i1 %136, label %_Z17init_memory_floatPfS_.exit130, label %.lr.ph.i129

_Z17init_memory_floatPfS_.exit130:                ; preds = %.lr.ph.i129
  call void @_Z8example1v()
  %137 = bitcast %class.Timer* %atimer to i8*
  call void @llvm.lifetime.start(i64 48, i8* %137) #1
  %138 = getelementptr inbounds %class.Timer* %atimer, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str, i64 0, i64 0), i8** %138, align 8, !tbaa !44
  %139 = getelementptr inbounds %class.Timer* %atimer, i64 0, i32 1
  %140 = zext i1 %10 to i8
  store i8 %140, i8* %139, align 8, !tbaa !49
  %141 = getelementptr inbounds %class.Timer* %atimer, i64 0, i32 2
  %142 = call i32 @gettimeofday(%struct.timeval* %141, %struct.timezone* null) #1
  br label %143

; <label>:143                                     ; preds = %143, %_Z17init_memory_floatPfS_.exit130
  %i.0272 = phi i32 [ 0, %_Z17init_memory_floatPfS_.exit130 ], [ %144, %143 ]
  call void @_Z8example1v()
  %144 = add nsw i32 %i.0272, 1
  %exitcond304 = icmp eq i32 %144, 2621440
  br i1 %exitcond304, label %.lr.ph.i136, label %143

.loopexit:                                        ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit73, %.lr.ph
  %lpad.loopexit = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  br label %145

.nonloopexit:                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit140, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit147, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit154, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit161, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit168, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit178, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit189, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit196, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit203, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit206, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit217, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit227, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit238, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit224, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit175, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit133, %_ZNSt6vectorIjSaIjEE9push_backERKj.exit, %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge, %663, %630
  %lpad.nonloopexit = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  br label %145

; <label>:145                                     ; preds = %.nonloopexit, %.loopexit
  %lpad.phi = phi { i8*, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.nonloopexit, %.nonloopexit ]
  %146 = extractvalue { i8*, i32 } %lpad.phi, 0
  %147 = extractvalue { i8*, i32 } %lpad.phi, 1
  br label %689

; <label>:148                                     ; preds = %170
  %149 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %150 = extractvalue { i8*, i32 } %149, 0
  %151 = extractvalue { i8*, i32 } %149, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer)
          to label %689 unwind label %697

.lr.ph.i136:                                      ; preds = %143, %.lr.ph.i136
  %state.02.i134 = phi i32 [ %158, %.lr.ph.i136 ], [ 1, %143 ]
  %.01.i135 = phi i8* [ %159, %.lr.ph.i136 ], [ bitcast ([2048 x i32]* @a to i8*), %143 ]
  %152 = mul i32 %state.02.i134, 3
  %153 = load i8* %.01.i135, align 1, !tbaa !41
  %154 = zext i8 %153 to i32
  %155 = xor i32 %154, %152
  %156 = lshr i32 %152, 8
  %157 = shl i32 %155, 8
  %158 = xor i32 %157, %156
  %159 = getelementptr inbounds i8* %.01.i135, i64 1
  %160 = icmp eq i8* %159, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 0, i64 256) to i8*)
  br i1 %160, label %_Z13digest_memoryPvS_.exit137, label %.lr.ph.i136

_Z13digest_memoryPvS_.exit137:                    ; preds = %.lr.ph.i136
  store i32 %158, i32* %r, align 4, !tbaa !5
  %161 = getelementptr inbounds %"class.std::vector"* %results, i64 0, i32 0, i32 0, i32 1
  %162 = load i32** %161, align 8, !tbaa !50
  %163 = getelementptr inbounds %"class.std::vector"* %results, i64 0, i32 0, i32 0, i32 2
  %164 = load i32** %163, align 8, !tbaa !53
  %165 = icmp eq i32* %162, %164
  br i1 %165, label %170, label %166

; <label>:166                                     ; preds = %_Z13digest_memoryPvS_.exit137
  %167 = icmp eq i32* %162, null
  br i1 %167, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i138, label %168

; <label>:168                                     ; preds = %166
  store i32 %158, i32* %162, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i138

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i138: ; preds = %168, %166
  %169 = getelementptr inbounds i32* %162, i64 1
  store i32* %169, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit140

; <label>:170                                     ; preds = %_Z13digest_memoryPvS_.exit137
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %162, i32* %r)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit140 unwind label %148

_ZNSt6vectorIjSaIjEE9push_backERKj.exit140:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i138, %170
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer)
          to label %171 unwind label %.nonloopexit

; <label>:171                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit140
  call void @llvm.lifetime.end(i64 48, i8* %137) #1
  call void @_Z9example2aii(i32 1024, i32 2)
  %172 = bitcast %class.Timer* %atimer1 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %172) #1
  %173 = getelementptr inbounds %class.Timer* %atimer1, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str1, i64 0, i64 0), i8** %173, align 8, !tbaa !44
  %174 = getelementptr inbounds %class.Timer* %atimer1, i64 0, i32 1
  store i8 %140, i8* %174, align 8, !tbaa !49
  %175 = getelementptr inbounds %class.Timer* %atimer1, i64 0, i32 2
  %176 = call i32 @gettimeofday(%struct.timeval* %175, %struct.timezone* null) #1
  br label %177

; <label>:177                                     ; preds = %177, %171
  %i2.0271 = phi i32 [ 0, %171 ], [ %178, %177 ]
  call void @_Z9example2aii(i32 1024, i32 2)
  %178 = add nsw i32 %i2.0271, 1
  %exitcond303 = icmp eq i32 %178, 1048576
  br i1 %exitcond303, label %.lr.ph.i143, label %177

; <label>:179                                     ; preds = %199
  %180 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %181 = extractvalue { i8*, i32 } %180, 0
  %182 = extractvalue { i8*, i32 } %180, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer1)
          to label %689 unwind label %697

.lr.ph.i143:                                      ; preds = %177, %.lr.ph.i143
  %state.02.i141 = phi i32 [ %189, %.lr.ph.i143 ], [ 1, %177 ]
  %.01.i142 = phi i8* [ %190, %.lr.ph.i143 ], [ bitcast ([2048 x i32]* @b to i8*), %177 ]
  %183 = mul i32 %state.02.i141, 3
  %184 = load i8* %.01.i142, align 1, !tbaa !41
  %185 = zext i8 %184 to i32
  %186 = xor i32 %185, %183
  %187 = lshr i32 %183, 8
  %188 = shl i32 %186, 8
  %189 = xor i32 %188, %187
  %190 = getelementptr inbounds i8* %.01.i142, i64 1
  %191 = icmp eq i8* %190, bitcast (i32* getelementptr inbounds ([2048 x i32]* @b, i64 0, i64 1024) to i8*)
  br i1 %191, label %_Z13digest_memoryPvS_.exit144, label %.lr.ph.i143

_Z13digest_memoryPvS_.exit144:                    ; preds = %.lr.ph.i143
  store i32 %189, i32* %r3, align 4, !tbaa !5
  %192 = load i32** %161, align 8, !tbaa !50
  %193 = load i32** %163, align 8, !tbaa !53
  %194 = icmp eq i32* %192, %193
  br i1 %194, label %199, label %195

; <label>:195                                     ; preds = %_Z13digest_memoryPvS_.exit144
  %196 = icmp eq i32* %192, null
  br i1 %196, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i145, label %197

; <label>:197                                     ; preds = %195
  store i32 %189, i32* %192, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i145

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i145: ; preds = %197, %195
  %198 = getelementptr inbounds i32* %192, i64 1
  store i32* %198, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit147

; <label>:199                                     ; preds = %_Z13digest_memoryPvS_.exit144
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %192, i32* %r3)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit147 unwind label %179

_ZNSt6vectorIjSaIjEE9push_backERKj.exit147:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i145, %199
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer1)
          to label %200 unwind label %.nonloopexit

; <label>:200                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit147
  call void @llvm.lifetime.end(i64 48, i8* %172) #1
  call void @_Z9example2bii(i32 1024, i32 undef)
  %201 = bitcast %class.Timer* %atimer4 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %201) #1
  %202 = getelementptr inbounds %class.Timer* %atimer4, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str2, i64 0, i64 0), i8** %202, align 8, !tbaa !44
  %203 = getelementptr inbounds %class.Timer* %atimer4, i64 0, i32 1
  store i8 %140, i8* %203, align 8, !tbaa !49
  %204 = getelementptr inbounds %class.Timer* %atimer4, i64 0, i32 2
  %205 = call i32 @gettimeofday(%struct.timeval* %204, %struct.timezone* null) #1
  br label %206

; <label>:206                                     ; preds = %206, %200
  %i5.0270 = phi i32 [ 0, %200 ], [ %207, %206 ]
  call void @_Z9example2bii(i32 1024, i32 undef)
  %207 = add nsw i32 %i5.0270, 1
  %exitcond302 = icmp eq i32 %207, 524288
  br i1 %exitcond302, label %.lr.ph.i150, label %206

; <label>:208                                     ; preds = %228
  %209 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %210 = extractvalue { i8*, i32 } %209, 0
  %211 = extractvalue { i8*, i32 } %209, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer4)
          to label %689 unwind label %697

.lr.ph.i150:                                      ; preds = %206, %.lr.ph.i150
  %state.02.i148 = phi i32 [ %218, %.lr.ph.i150 ], [ 1, %206 ]
  %.01.i149 = phi i8* [ %219, %.lr.ph.i150 ], [ bitcast ([2048 x i32]* @a to i8*), %206 ]
  %212 = mul i32 %state.02.i148, 3
  %213 = load i8* %.01.i149, align 1, !tbaa !41
  %214 = zext i8 %213 to i32
  %215 = xor i32 %214, %212
  %216 = lshr i32 %212, 8
  %217 = shl i32 %215, 8
  %218 = xor i32 %217, %216
  %219 = getelementptr inbounds i8* %.01.i149, i64 1
  %220 = icmp eq i8* %219, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 0, i64 1024) to i8*)
  br i1 %220, label %_Z13digest_memoryPvS_.exit151, label %.lr.ph.i150

_Z13digest_memoryPvS_.exit151:                    ; preds = %.lr.ph.i150
  store i32 %218, i32* %r6, align 4, !tbaa !5
  %221 = load i32** %161, align 8, !tbaa !50
  %222 = load i32** %163, align 8, !tbaa !53
  %223 = icmp eq i32* %221, %222
  br i1 %223, label %228, label %224

; <label>:224                                     ; preds = %_Z13digest_memoryPvS_.exit151
  %225 = icmp eq i32* %221, null
  br i1 %225, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i152, label %226

; <label>:226                                     ; preds = %224
  store i32 %218, i32* %221, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i152

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i152: ; preds = %226, %224
  %227 = getelementptr inbounds i32* %221, i64 1
  store i32* %227, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit154

; <label>:228                                     ; preds = %_Z13digest_memoryPvS_.exit151
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %221, i32* %r6)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit154 unwind label %208

_ZNSt6vectorIjSaIjEE9push_backERKj.exit154:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i152, %228
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer4)
          to label %229 unwind label %.nonloopexit

; <label>:229                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit154
  call void @llvm.lifetime.end(i64 48, i8* %201) #1
  call void @_Z8example3iPiS_(i32 1024, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0))
  %230 = bitcast %class.Timer* %atimer7 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %230) #1
  %231 = getelementptr inbounds %class.Timer* %atimer7, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str3, i64 0, i64 0), i8** %231, align 8, !tbaa !44
  %232 = getelementptr inbounds %class.Timer* %atimer7, i64 0, i32 1
  store i8 %140, i8* %232, align 8, !tbaa !49
  %233 = getelementptr inbounds %class.Timer* %atimer7, i64 0, i32 2
  %234 = call i32 @gettimeofday(%struct.timeval* %233, %struct.timezone* null) #1
  br label %235

; <label>:235                                     ; preds = %235, %229
  %i8.0269 = phi i32 [ 0, %229 ], [ %236, %235 ]
  call void @_Z8example3iPiS_(i32 1024, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0))
  %236 = add nsw i32 %i8.0269, 1
  %exitcond301 = icmp eq i32 %236, 524288
  br i1 %exitcond301, label %.lr.ph.i157, label %235

; <label>:237                                     ; preds = %257
  %238 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %239 = extractvalue { i8*, i32 } %238, 0
  %240 = extractvalue { i8*, i32 } %238, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer7)
          to label %689 unwind label %697

.lr.ph.i157:                                      ; preds = %235, %.lr.ph.i157
  %state.02.i155 = phi i32 [ %247, %.lr.ph.i157 ], [ 1, %235 ]
  %.01.i156 = phi i8* [ %248, %.lr.ph.i157 ], [ bitcast ([1024 x i32]* @ia to i8*), %235 ]
  %241 = mul i32 %state.02.i155, 3
  %242 = load i8* %.01.i156, align 1, !tbaa !41
  %243 = zext i8 %242 to i32
  %244 = xor i32 %243, %241
  %245 = lshr i32 %241, 8
  %246 = shl i32 %244, 8
  %247 = xor i32 %246, %245
  %248 = getelementptr inbounds i8* %.01.i156, i64 1
  %249 = icmp eq i8* %248, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %249, label %_Z13digest_memoryPvS_.exit158, label %.lr.ph.i157

_Z13digest_memoryPvS_.exit158:                    ; preds = %.lr.ph.i157
  store i32 %247, i32* %r9, align 4, !tbaa !5
  %250 = load i32** %161, align 8, !tbaa !50
  %251 = load i32** %163, align 8, !tbaa !53
  %252 = icmp eq i32* %250, %251
  br i1 %252, label %257, label %253

; <label>:253                                     ; preds = %_Z13digest_memoryPvS_.exit158
  %254 = icmp eq i32* %250, null
  br i1 %254, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i159, label %255

; <label>:255                                     ; preds = %253
  store i32 %247, i32* %250, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i159

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i159: ; preds = %255, %253
  %256 = getelementptr inbounds i32* %250, i64 1
  store i32* %256, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit161

; <label>:257                                     ; preds = %_Z13digest_memoryPvS_.exit158
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %250, i32* %r9)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit161 unwind label %237

_ZNSt6vectorIjSaIjEE9push_backERKj.exit161:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i159, %257
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer7)
          to label %258 unwind label %.nonloopexit

; <label>:258                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit161
  call void @llvm.lifetime.end(i64 48, i8* %230) #1
  call void @_Z9example4aiPiS_(i32 1024, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0))
  %259 = bitcast %class.Timer* %atimer10 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %259) #1
  %260 = getelementptr inbounds %class.Timer* %atimer10, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str4, i64 0, i64 0), i8** %260, align 8, !tbaa !44
  %261 = getelementptr inbounds %class.Timer* %atimer10, i64 0, i32 1
  store i8 %140, i8* %261, align 8, !tbaa !49
  %262 = getelementptr inbounds %class.Timer* %atimer10, i64 0, i32 2
  %263 = call i32 @gettimeofday(%struct.timeval* %262, %struct.timezone* null) #1
  br label %264

; <label>:264                                     ; preds = %264, %258
  %i11.0268 = phi i32 [ 0, %258 ], [ %265, %264 ]
  call void @_Z9example4aiPiS_(i32 1024, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0))
  %265 = add nsw i32 %i11.0268, 1
  %exitcond300 = icmp eq i32 %265, 524288
  br i1 %exitcond300, label %.lr.ph.i164, label %264

; <label>:266                                     ; preds = %286
  %267 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %268 = extractvalue { i8*, i32 } %267, 0
  %269 = extractvalue { i8*, i32 } %267, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer10)
          to label %689 unwind label %697

.lr.ph.i164:                                      ; preds = %264, %.lr.ph.i164
  %state.02.i162 = phi i32 [ %276, %.lr.ph.i164 ], [ 1, %264 ]
  %.01.i163 = phi i8* [ %277, %.lr.ph.i164 ], [ bitcast ([1024 x i32]* @ia to i8*), %264 ]
  %270 = mul i32 %state.02.i162, 3
  %271 = load i8* %.01.i163, align 1, !tbaa !41
  %272 = zext i8 %271 to i32
  %273 = xor i32 %272, %270
  %274 = lshr i32 %270, 8
  %275 = shl i32 %273, 8
  %276 = xor i32 %275, %274
  %277 = getelementptr inbounds i8* %.01.i163, i64 1
  %278 = icmp eq i8* %277, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %278, label %_Z13digest_memoryPvS_.exit165, label %.lr.ph.i164

_Z13digest_memoryPvS_.exit165:                    ; preds = %.lr.ph.i164
  store i32 %276, i32* %r12, align 4, !tbaa !5
  %279 = load i32** %161, align 8, !tbaa !50
  %280 = load i32** %163, align 8, !tbaa !53
  %281 = icmp eq i32* %279, %280
  br i1 %281, label %286, label %282

; <label>:282                                     ; preds = %_Z13digest_memoryPvS_.exit165
  %283 = icmp eq i32* %279, null
  br i1 %283, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i166, label %284

; <label>:284                                     ; preds = %282
  store i32 %276, i32* %279, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i166

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i166: ; preds = %284, %282
  %285 = getelementptr inbounds i32* %279, i64 1
  store i32* %285, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit168

; <label>:286                                     ; preds = %_Z13digest_memoryPvS_.exit165
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %279, i32* %r12)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit168 unwind label %266

_ZNSt6vectorIjSaIjEE9push_backERKj.exit168:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i166, %286
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer10)
          to label %287 unwind label %.nonloopexit

; <label>:287                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit168
  call void @llvm.lifetime.end(i64 48, i8* %259) #1
  call void @_Z9example4biPiS_(i32 1014, i32* undef, i32* undef)
  %288 = bitcast %class.Timer* %atimer13 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %288) #1
  %289 = getelementptr inbounds %class.Timer* %atimer13, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str5, i64 0, i64 0), i8** %289, align 8, !tbaa !44
  %290 = getelementptr inbounds %class.Timer* %atimer13, i64 0, i32 1
  store i8 %140, i8* %290, align 8, !tbaa !49
  %291 = getelementptr inbounds %class.Timer* %atimer13, i64 0, i32 2
  %292 = call i32 @gettimeofday(%struct.timeval* %291, %struct.timezone* null) #1
  br label %293

; <label>:293                                     ; preds = %293, %287
  %i14.0267 = phi i32 [ 0, %287 ], [ %294, %293 ]
  call void @_Z9example4biPiS_(i32 1014, i32* undef, i32* undef)
  %294 = add nsw i32 %i14.0267, 1
  %exitcond299 = icmp eq i32 %294, 524288
  br i1 %exitcond299, label %.lr.ph.i171, label %293

; <label>:295                                     ; preds = %315
  %296 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %297 = extractvalue { i8*, i32 } %296, 0
  %298 = extractvalue { i8*, i32 } %296, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer13)
          to label %689 unwind label %697

.lr.ph.i171:                                      ; preds = %293, %.lr.ph.i171
  %state.02.i169 = phi i32 [ %305, %.lr.ph.i171 ], [ 1, %293 ]
  %.01.i170 = phi i8* [ %306, %.lr.ph.i171 ], [ bitcast ([1024 x i32]* @ia to i8*), %293 ]
  %299 = mul i32 %state.02.i169, 3
  %300 = load i8* %.01.i170, align 1, !tbaa !41
  %301 = zext i8 %300 to i32
  %302 = xor i32 %301, %299
  %303 = lshr i32 %299, 8
  %304 = shl i32 %302, 8
  %305 = xor i32 %304, %303
  %306 = getelementptr inbounds i8* %.01.i170, i64 1
  %307 = icmp eq i8* %306, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %307, label %_Z13digest_memoryPvS_.exit172, label %.lr.ph.i171

_Z13digest_memoryPvS_.exit172:                    ; preds = %.lr.ph.i171
  store i32 %305, i32* %r15, align 4, !tbaa !5
  %308 = load i32** %161, align 8, !tbaa !50
  %309 = load i32** %163, align 8, !tbaa !53
  %310 = icmp eq i32* %308, %309
  br i1 %310, label %315, label %311

; <label>:311                                     ; preds = %_Z13digest_memoryPvS_.exit172
  %312 = icmp eq i32* %308, null
  br i1 %312, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i176, label %313

; <label>:313                                     ; preds = %311
  store i32 %305, i32* %308, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i176

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i176: ; preds = %313, %311
  %314 = getelementptr inbounds i32* %308, i64 1
  store i32* %314, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit178

; <label>:315                                     ; preds = %_Z13digest_memoryPvS_.exit172
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %308, i32* %r15)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit178 unwind label %295

_ZNSt6vectorIjSaIjEE9push_backERKj.exit178:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i176, %315
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer13)
          to label %316 unwind label %.nonloopexit

; <label>:316                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit178
  call void @llvm.lifetime.end(i64 48, i8* %288) #1
  call void @_Z9example4ciPiS_(i32 1024, i32* undef, i32* undef)
  %317 = bitcast %class.Timer* %atimer16 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %317) #1
  %318 = getelementptr inbounds %class.Timer* %atimer16, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str6, i64 0, i64 0), i8** %318, align 8, !tbaa !44
  %319 = getelementptr inbounds %class.Timer* %atimer16, i64 0, i32 1
  store i8 %140, i8* %319, align 8, !tbaa !49
  %320 = getelementptr inbounds %class.Timer* %atimer16, i64 0, i32 2
  %321 = call i32 @gettimeofday(%struct.timeval* %320, %struct.timezone* null) #1
  br label %322

; <label>:322                                     ; preds = %322, %316
  %i17.0266 = phi i32 [ 0, %316 ], [ %323, %322 ]
  call void @_Z9example4ciPiS_(i32 1024, i32* undef, i32* undef)
  %323 = add nsw i32 %i17.0266, 1
  %exitcond298 = icmp eq i32 %323, 524288
  br i1 %exitcond298, label %.lr.ph.i181, label %322

; <label>:324                                     ; preds = %344
  %325 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %326 = extractvalue { i8*, i32 } %325, 0
  %327 = extractvalue { i8*, i32 } %325, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer16)
          to label %689 unwind label %697

.lr.ph.i181:                                      ; preds = %322, %.lr.ph.i181
  %state.02.i179 = phi i32 [ %334, %.lr.ph.i181 ], [ 1, %322 ]
  %.01.i180 = phi i8* [ %335, %.lr.ph.i181 ], [ bitcast ([1024 x i32]* @ib to i8*), %322 ]
  %328 = mul i32 %state.02.i179, 3
  %329 = load i8* %.01.i180, align 1, !tbaa !41
  %330 = zext i8 %329 to i32
  %331 = xor i32 %330, %328
  %332 = lshr i32 %328, 8
  %333 = shl i32 %331, 8
  %334 = xor i32 %333, %332
  %335 = getelementptr inbounds i8* %.01.i180, i64 1
  %336 = icmp eq i8* %335, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ib, i64 1, i64 0) to i8*)
  br i1 %336, label %_Z13digest_memoryPvS_.exit182, label %.lr.ph.i181

_Z13digest_memoryPvS_.exit182:                    ; preds = %.lr.ph.i181
  store i32 %334, i32* %r18, align 4, !tbaa !5
  %337 = load i32** %161, align 8, !tbaa !50
  %338 = load i32** %163, align 8, !tbaa !53
  %339 = icmp eq i32* %337, %338
  br i1 %339, label %344, label %340

; <label>:340                                     ; preds = %_Z13digest_memoryPvS_.exit182
  %341 = icmp eq i32* %337, null
  br i1 %341, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i187, label %342

; <label>:342                                     ; preds = %340
  store i32 %334, i32* %337, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i187

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i187: ; preds = %342, %340
  %343 = getelementptr inbounds i32* %337, i64 1
  store i32* %343, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit189

; <label>:344                                     ; preds = %_Z13digest_memoryPvS_.exit182
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %337, i32* %r18)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit189 unwind label %324

_ZNSt6vectorIjSaIjEE9push_backERKj.exit189:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i187, %344
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer16)
          to label %345 unwind label %.nonloopexit

; <label>:345                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit189
  call void @llvm.lifetime.end(i64 48, i8* %317) #1
  call void @_Z8example7i(i32 4)
  %346 = bitcast %class.Timer* %atimer19 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %346) #1
  %347 = getelementptr inbounds %class.Timer* %atimer19, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str7, i64 0, i64 0), i8** %347, align 8, !tbaa !44
  %348 = getelementptr inbounds %class.Timer* %atimer19, i64 0, i32 1
  store i8 %140, i8* %348, align 8, !tbaa !49
  %349 = getelementptr inbounds %class.Timer* %atimer19, i64 0, i32 2
  %350 = call i32 @gettimeofday(%struct.timeval* %349, %struct.timezone* null) #1
  br label %351

; <label>:351                                     ; preds = %351, %345
  %i20.0265 = phi i32 [ 0, %345 ], [ %352, %351 ]
  call void @_Z8example7i(i32 4)
  %352 = add nsw i32 %i20.0265, 1
  %exitcond297 = icmp eq i32 %352, 1048576
  br i1 %exitcond297, label %.lr.ph.i192, label %351

; <label>:353                                     ; preds = %373
  %354 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %355 = extractvalue { i8*, i32 } %354, 0
  %356 = extractvalue { i8*, i32 } %354, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer19)
          to label %689 unwind label %697

.lr.ph.i192:                                      ; preds = %351, %.lr.ph.i192
  %state.02.i190 = phi i32 [ %363, %.lr.ph.i192 ], [ 1, %351 ]
  %.01.i191 = phi i8* [ %364, %.lr.ph.i192 ], [ bitcast ([2048 x i32]* @a to i8*), %351 ]
  %357 = mul i32 %state.02.i190, 3
  %358 = load i8* %.01.i191, align 1, !tbaa !41
  %359 = zext i8 %358 to i32
  %360 = xor i32 %359, %357
  %361 = lshr i32 %357, 8
  %362 = shl i32 %360, 8
  %363 = xor i32 %362, %361
  %364 = getelementptr inbounds i8* %.01.i191, i64 1
  %365 = icmp eq i8* %364, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 0, i64 1024) to i8*)
  br i1 %365, label %_Z13digest_memoryPvS_.exit193, label %.lr.ph.i192

_Z13digest_memoryPvS_.exit193:                    ; preds = %.lr.ph.i192
  store i32 %363, i32* %r21, align 4, !tbaa !5
  %366 = load i32** %161, align 8, !tbaa !50
  %367 = load i32** %163, align 8, !tbaa !53
  %368 = icmp eq i32* %366, %367
  br i1 %368, label %373, label %369

; <label>:369                                     ; preds = %_Z13digest_memoryPvS_.exit193
  %370 = icmp eq i32* %366, null
  br i1 %370, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i194, label %371

; <label>:371                                     ; preds = %369
  store i32 %363, i32* %366, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i194

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i194: ; preds = %371, %369
  %372 = getelementptr inbounds i32* %366, i64 1
  store i32* %372, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit196

; <label>:373                                     ; preds = %_Z13digest_memoryPvS_.exit193
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %366, i32* %r21)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit196 unwind label %353

_ZNSt6vectorIjSaIjEE9push_backERKj.exit196:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i194, %373
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer19)
          to label %374 unwind label %.nonloopexit

; <label>:374                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit196
  call void @llvm.lifetime.end(i64 48, i8* %346) #1
  call void @_Z8example8i(i32 8)
  %375 = bitcast %class.Timer* %atimer22 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %375) #1
  %376 = getelementptr inbounds %class.Timer* %atimer22, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str8, i64 0, i64 0), i8** %376, align 8, !tbaa !44
  %377 = getelementptr inbounds %class.Timer* %atimer22, i64 0, i32 1
  store i8 %140, i8* %377, align 8, !tbaa !49
  %378 = getelementptr inbounds %class.Timer* %atimer22, i64 0, i32 2
  %379 = call i32 @gettimeofday(%struct.timeval* %378, %struct.timezone* null) #1
  br label %380

; <label>:380                                     ; preds = %380, %374
  %i23.0264 = phi i32 [ 0, %374 ], [ %381, %380 ]
  call void @_Z8example8i(i32 8)
  %381 = add nsw i32 %i23.0264, 1
  %exitcond296 = icmp eq i32 %381, 65536
  br i1 %exitcond296, label %.lr.ph.i199, label %380

; <label>:382                                     ; preds = %402
  %383 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %384 = extractvalue { i8*, i32 } %383, 0
  %385 = extractvalue { i8*, i32 } %383, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer22)
          to label %689 unwind label %697

.lr.ph.i199:                                      ; preds = %380, %.lr.ph.i199
  %state.02.i197 = phi i32 [ %392, %.lr.ph.i199 ], [ 1, %380 ]
  %.01.i198 = phi i8* [ %393, %.lr.ph.i199 ], [ bitcast ([32 x [1024 x i32]]* @G to i8*), %380 ]
  %386 = mul i32 %state.02.i197, 3
  %387 = load i8* %.01.i198, align 1, !tbaa !41
  %388 = zext i8 %387 to i32
  %389 = xor i32 %388, %386
  %390 = lshr i32 %386, 8
  %391 = shl i32 %389, 8
  %392 = xor i32 %391, %390
  %393 = getelementptr inbounds i8* %.01.i198, i64 1
  %394 = icmp eq i8* %393, bitcast (i32* getelementptr inbounds ([32 x [1024 x i32]]* @G, i64 0, i64 1, i64 0) to i8*)
  br i1 %394, label %_Z13digest_memoryPvS_.exit200, label %.lr.ph.i199

_Z13digest_memoryPvS_.exit200:                    ; preds = %.lr.ph.i199
  store i32 %392, i32* %r24, align 4, !tbaa !5
  %395 = load i32** %161, align 8, !tbaa !50
  %396 = load i32** %163, align 8, !tbaa !53
  %397 = icmp eq i32* %395, %396
  br i1 %397, label %402, label %398

; <label>:398                                     ; preds = %_Z13digest_memoryPvS_.exit200
  %399 = icmp eq i32* %395, null
  br i1 %399, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i201, label %400

; <label>:400                                     ; preds = %398
  store i32 %392, i32* %395, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i201

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i201: ; preds = %400, %398
  %401 = getelementptr inbounds i32* %395, i64 1
  store i32* %401, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit203

; <label>:402                                     ; preds = %_Z13digest_memoryPvS_.exit200
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %395, i32* %r24)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit203 unwind label %382

_ZNSt6vectorIjSaIjEE9push_backERKj.exit203:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i201, %402
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer22)
          to label %403 unwind label %.nonloopexit

; <label>:403                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit203
  call void @llvm.lifetime.end(i64 48, i8* %375) #1
  call void @_Z8example9Pj(i32* %dummy)
  %404 = bitcast %class.Timer* %atimer25 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %404) #1
  %405 = getelementptr inbounds %class.Timer* %atimer25, i64 0, i32 0
  store i8* getelementptr inbounds ([9 x i8]* @.str9, i64 0, i64 0), i8** %405, align 8, !tbaa !44
  %406 = getelementptr inbounds %class.Timer* %atimer25, i64 0, i32 1
  store i8 %140, i8* %406, align 8, !tbaa !49
  %407 = getelementptr inbounds %class.Timer* %atimer25, i64 0, i32 2
  %408 = call i32 @gettimeofday(%struct.timeval* %407, %struct.timezone* null) #1
  br label %409

; <label>:409                                     ; preds = %409, %403
  %i26.0263 = phi i32 [ 0, %403 ], [ %410, %409 ]
  call void @_Z8example9Pj(i32* %dummy)
  %410 = add nsw i32 %i26.0263, 1
  %exitcond295 = icmp eq i32 %410, 524288
  br i1 %exitcond295, label %415, label %409

; <label>:411                                     ; preds = %424
  %412 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %413 = extractvalue { i8*, i32 } %412, 0
  %414 = extractvalue { i8*, i32 } %412, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer25)
          to label %689 unwind label %697

; <label>:415                                     ; preds = %409
  %416 = load i32* %dummy, align 4, !tbaa !5
  store i32 %416, i32* %r27, align 4, !tbaa !5
  %417 = load i32** %161, align 8, !tbaa !50
  %418 = load i32** %163, align 8, !tbaa !53
  %419 = icmp eq i32* %417, %418
  br i1 %419, label %424, label %420

; <label>:420                                     ; preds = %415
  %421 = icmp eq i32* %417, null
  br i1 %421, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i204, label %422

; <label>:422                                     ; preds = %420
  store i32 %416, i32* %417, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i204

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i204: ; preds = %422, %420
  %423 = getelementptr inbounds i32* %417, i64 1
  store i32* %423, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit206

; <label>:424                                     ; preds = %415
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %417, i32* %r27)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit206 unwind label %411

_ZNSt6vectorIjSaIjEE9push_backERKj.exit206:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i204, %424
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer25)
          to label %425 unwind label %.nonloopexit

; <label>:425                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit206
  call void @llvm.lifetime.end(i64 48, i8* %404) #1
  call void @_Z10example10aPsS_S_PiS0_S0_(i16* getelementptr inbounds ([1024 x i16]* @sa, i64 0, i64 0), i16* getelementptr inbounds ([1024 x i16]* @sb, i64 0, i64 0), i16* getelementptr inbounds ([1024 x i16]* @sc, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ic, i64 0, i64 0))
  %426 = bitcast %class.Timer* %atimer28 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %426) #1
  %427 = getelementptr inbounds %class.Timer* %atimer28, i64 0, i32 0
  store i8* getelementptr inbounds ([11 x i8]* @.str10, i64 0, i64 0), i8** %427, align 8, !tbaa !44
  %428 = getelementptr inbounds %class.Timer* %atimer28, i64 0, i32 1
  store i8 %140, i8* %428, align 8, !tbaa !49
  %429 = getelementptr inbounds %class.Timer* %atimer28, i64 0, i32 2
  %430 = call i32 @gettimeofday(%struct.timeval* %429, %struct.timezone* null) #1
  br label %431

; <label>:431                                     ; preds = %431, %425
  %i29.0262 = phi i32 [ 0, %425 ], [ %432, %431 ]
  call void @_Z10example10aPsS_S_PiS0_S0_(i16* getelementptr inbounds ([1024 x i16]* @sa, i64 0, i64 0), i16* getelementptr inbounds ([1024 x i16]* @sb, i64 0, i64 0), i16* getelementptr inbounds ([1024 x i16]* @sc, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ib, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ic, i64 0, i64 0))
  %432 = add nsw i32 %i29.0262, 1
  %exitcond294 = icmp eq i32 %432, 524288
  br i1 %exitcond294, label %.lr.ph.i209, label %431

; <label>:433                                     ; preds = %463
  %434 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %435 = extractvalue { i8*, i32 } %434, 0
  %436 = extractvalue { i8*, i32 } %434, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer28)
          to label %689 unwind label %697

.lr.ph.i209:                                      ; preds = %431, %.lr.ph.i209
  %state.02.i207 = phi i32 [ %443, %.lr.ph.i209 ], [ 1, %431 ]
  %.01.i208 = phi i8* [ %444, %.lr.ph.i209 ], [ bitcast ([1024 x i32]* @ia to i8*), %431 ]
  %437 = mul i32 %state.02.i207, 3
  %438 = load i8* %.01.i208, align 1, !tbaa !41
  %439 = zext i8 %438 to i32
  %440 = xor i32 %439, %437
  %441 = lshr i32 %437, 8
  %442 = shl i32 %440, 8
  %443 = xor i32 %442, %441
  %444 = getelementptr inbounds i8* %.01.i208, i64 1
  %445 = icmp eq i8* %444, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %445, label %.lr.ph.i213, label %.lr.ph.i209

.lr.ph.i213:                                      ; preds = %.lr.ph.i209, %.lr.ph.i213
  %state.02.i211 = phi i32 [ %452, %.lr.ph.i213 ], [ 1, %.lr.ph.i209 ]
  %.01.i212 = phi i8* [ %453, %.lr.ph.i213 ], [ bitcast ([1024 x i16]* @sa to i8*), %.lr.ph.i209 ]
  %446 = mul i32 %state.02.i211, 3
  %447 = load i8* %.01.i212, align 1, !tbaa !41
  %448 = zext i8 %447 to i32
  %449 = xor i32 %448, %446
  %450 = lshr i32 %446, 8
  %451 = shl i32 %449, 8
  %452 = xor i32 %451, %450
  %453 = getelementptr inbounds i8* %.01.i212, i64 1
  %454 = icmp eq i8* %453, bitcast (i16* getelementptr inbounds ([1024 x i16]* @sa, i64 1, i64 0) to i8*)
  br i1 %454, label %_Z13digest_memoryPvS_.exit214, label %.lr.ph.i213

_Z13digest_memoryPvS_.exit214:                    ; preds = %.lr.ph.i213
  %455 = add i32 %452, %443
  store i32 %455, i32* %r30, align 4, !tbaa !5
  %456 = load i32** %161, align 8, !tbaa !50
  %457 = load i32** %163, align 8, !tbaa !53
  %458 = icmp eq i32* %456, %457
  br i1 %458, label %463, label %459

; <label>:459                                     ; preds = %_Z13digest_memoryPvS_.exit214
  %460 = icmp eq i32* %456, null
  br i1 %460, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i215, label %461

; <label>:461                                     ; preds = %459
  store i32 %455, i32* %456, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i215

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i215: ; preds = %461, %459
  %462 = getelementptr inbounds i32* %456, i64 1
  store i32* %462, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit217

; <label>:463                                     ; preds = %_Z13digest_memoryPvS_.exit214
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %456, i32* %r30)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit217 unwind label %433

_ZNSt6vectorIjSaIjEE9push_backERKj.exit217:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i215, %463
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer28)
          to label %464 unwind label %.nonloopexit

; <label>:464                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit217
  call void @llvm.lifetime.end(i64 48, i8* %426) #1
  call void @_Z10example10bPsS_S_PiS0_S0_(i16* undef, i16* getelementptr inbounds ([1024 x i16]* @sb, i64 0, i64 0), i16* undef, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* undef, i32* undef)
  %465 = bitcast %class.Timer* %atimer31 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %465) #1
  %466 = getelementptr inbounds %class.Timer* %atimer31, i64 0, i32 0
  store i8* getelementptr inbounds ([11 x i8]* @.str11, i64 0, i64 0), i8** %466, align 8, !tbaa !44
  %467 = getelementptr inbounds %class.Timer* %atimer31, i64 0, i32 1
  store i8 %140, i8* %467, align 8, !tbaa !49
  %468 = getelementptr inbounds %class.Timer* %atimer31, i64 0, i32 2
  %469 = call i32 @gettimeofday(%struct.timeval* %468, %struct.timezone* null) #1
  br label %470

; <label>:470                                     ; preds = %470, %464
  %i32.0261 = phi i32 [ 0, %464 ], [ %471, %470 ]
  call void @_Z10example10bPsS_S_PiS0_S0_(i16* undef, i16* getelementptr inbounds ([1024 x i16]* @sb, i64 0, i64 0), i16* undef, i32* getelementptr inbounds ([1024 x i32]* @ia, i64 0, i64 0), i32* undef, i32* undef)
  %471 = add nsw i32 %i32.0261, 1
  %exitcond293 = icmp eq i32 %471, 1048576
  br i1 %exitcond293, label %.lr.ph.i220, label %470

; <label>:472                                     ; preds = %492
  %473 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %474 = extractvalue { i8*, i32 } %473, 0
  %475 = extractvalue { i8*, i32 } %473, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer31)
          to label %689 unwind label %697

.lr.ph.i220:                                      ; preds = %470, %.lr.ph.i220
  %state.02.i218 = phi i32 [ %482, %.lr.ph.i220 ], [ 1, %470 ]
  %.01.i219 = phi i8* [ %483, %.lr.ph.i220 ], [ bitcast ([1024 x i32]* @ia to i8*), %470 ]
  %476 = mul i32 %state.02.i218, 3
  %477 = load i8* %.01.i219, align 1, !tbaa !41
  %478 = zext i8 %477 to i32
  %479 = xor i32 %478, %476
  %480 = lshr i32 %476, 8
  %481 = shl i32 %479, 8
  %482 = xor i32 %481, %480
  %483 = getelementptr inbounds i8* %.01.i219, i64 1
  %484 = icmp eq i8* %483, bitcast (i32* getelementptr inbounds ([1024 x i32]* @ia, i64 1, i64 0) to i8*)
  br i1 %484, label %_Z13digest_memoryPvS_.exit221, label %.lr.ph.i220

_Z13digest_memoryPvS_.exit221:                    ; preds = %.lr.ph.i220
  store i32 %482, i32* %r33, align 4, !tbaa !5
  %485 = load i32** %161, align 8, !tbaa !50
  %486 = load i32** %163, align 8, !tbaa !53
  %487 = icmp eq i32* %485, %486
  br i1 %487, label %492, label %488

; <label>:488                                     ; preds = %_Z13digest_memoryPvS_.exit221
  %489 = icmp eq i32* %485, null
  br i1 %489, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i225, label %490

; <label>:490                                     ; preds = %488
  store i32 %482, i32* %485, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i225

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i225: ; preds = %490, %488
  %491 = getelementptr inbounds i32* %485, i64 1
  store i32* %491, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit227

; <label>:492                                     ; preds = %_Z13digest_memoryPvS_.exit221
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %485, i32* %r33)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit227 unwind label %472

_ZNSt6vectorIjSaIjEE9push_backERKj.exit227:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i225, %492
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer31)
          to label %493 unwind label %.nonloopexit

; <label>:493                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit227
  call void @llvm.lifetime.end(i64 48, i8* %465) #1
  call void @_Z9example11v()
  %494 = bitcast %class.Timer* %atimer34 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %494) #1
  %495 = getelementptr inbounds %class.Timer* %atimer34, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str12, i64 0, i64 0), i8** %495, align 8, !tbaa !44
  %496 = getelementptr inbounds %class.Timer* %atimer34, i64 0, i32 1
  store i8 %140, i8* %496, align 8, !tbaa !49
  %497 = getelementptr inbounds %class.Timer* %atimer34, i64 0, i32 2
  %498 = call i32 @gettimeofday(%struct.timeval* %497, %struct.timezone* null) #1
  br label %499

; <label>:499                                     ; preds = %499, %493
  %i35.0260 = phi i32 [ 0, %493 ], [ %500, %499 ]
  call void @_Z9example11v()
  %500 = add nsw i32 %i35.0260, 1
  %exitcond292 = icmp eq i32 %500, 524288
  br i1 %exitcond292, label %.lr.ph.i230, label %499

; <label>:501                                     ; preds = %521
  %502 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %503 = extractvalue { i8*, i32 } %502, 0
  %504 = extractvalue { i8*, i32 } %502, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer34)
          to label %689 unwind label %697

.lr.ph.i230:                                      ; preds = %499, %.lr.ph.i230
  %state.02.i228 = phi i32 [ %511, %.lr.ph.i230 ], [ 1, %499 ]
  %.01.i229 = phi i8* [ %512, %.lr.ph.i230 ], [ bitcast ([2048 x i32]* @d to i8*), %499 ]
  %505 = mul i32 %state.02.i228, 3
  %506 = load i8* %.01.i229, align 1, !tbaa !41
  %507 = zext i8 %506 to i32
  %508 = xor i32 %507, %505
  %509 = lshr i32 %505, 8
  %510 = shl i32 %508, 8
  %511 = xor i32 %510, %509
  %512 = getelementptr inbounds i8* %.01.i229, i64 1
  %513 = icmp eq i8* %512, bitcast (i32* getelementptr inbounds ([2048 x i32]* @d, i64 0, i64 1024) to i8*)
  br i1 %513, label %_Z13digest_memoryPvS_.exit231, label %.lr.ph.i230

_Z13digest_memoryPvS_.exit231:                    ; preds = %.lr.ph.i230
  store i32 %511, i32* %r36, align 4, !tbaa !5
  %514 = load i32** %161, align 8, !tbaa !50
  %515 = load i32** %163, align 8, !tbaa !53
  %516 = icmp eq i32* %514, %515
  br i1 %516, label %521, label %517

; <label>:517                                     ; preds = %_Z13digest_memoryPvS_.exit231
  %518 = icmp eq i32* %514, null
  br i1 %518, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i236, label %519

; <label>:519                                     ; preds = %517
  store i32 %511, i32* %514, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i236

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i236: ; preds = %519, %517
  %520 = getelementptr inbounds i32* %514, i64 1
  store i32* %520, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit238

; <label>:521                                     ; preds = %_Z13digest_memoryPvS_.exit231
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %514, i32* %r36)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit238 unwind label %501

_ZNSt6vectorIjSaIjEE9push_backERKj.exit238:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i236, %521
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer34)
          to label %522 unwind label %.nonloopexit

; <label>:522                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit238
  call void @llvm.lifetime.end(i64 48, i8* %494) #1
  call void @_Z9example12v()
  %523 = bitcast %class.Timer* %atimer37 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %523) #1
  %524 = getelementptr inbounds %class.Timer* %atimer37, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str13, i64 0, i64 0), i8** %524, align 8, !tbaa !44
  %525 = getelementptr inbounds %class.Timer* %atimer37, i64 0, i32 1
  store i8 %140, i8* %525, align 8, !tbaa !49
  %526 = getelementptr inbounds %class.Timer* %atimer37, i64 0, i32 2
  %527 = call i32 @gettimeofday(%struct.timeval* %526, %struct.timezone* null) #1
  br label %528

; <label>:528                                     ; preds = %528, %522
  %i38.0259 = phi i32 [ 0, %522 ], [ %529, %528 ]
  call void @_Z9example12v()
  %529 = add nsw i32 %i38.0259, 1
  %exitcond291 = icmp eq i32 %529, 1048576
  br i1 %exitcond291, label %.lr.ph.i234, label %528

; <label>:530                                     ; preds = %550
  %531 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %532 = extractvalue { i8*, i32 } %531, 0
  %533 = extractvalue { i8*, i32 } %531, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer37)
          to label %689 unwind label %697

.lr.ph.i234:                                      ; preds = %528, %.lr.ph.i234
  %state.02.i232 = phi i32 [ %540, %.lr.ph.i234 ], [ 1, %528 ]
  %.01.i233 = phi i8* [ %541, %.lr.ph.i234 ], [ bitcast ([2048 x i32]* @a to i8*), %528 ]
  %534 = mul i32 %state.02.i232, 3
  %535 = load i8* %.01.i233, align 1, !tbaa !41
  %536 = zext i8 %535 to i32
  %537 = xor i32 %536, %534
  %538 = lshr i32 %534, 8
  %539 = shl i32 %537, 8
  %540 = xor i32 %539, %538
  %541 = getelementptr inbounds i8* %.01.i233, i64 1
  %542 = icmp eq i8* %541, bitcast (i32* getelementptr inbounds ([2048 x i32]* @a, i64 0, i64 1024) to i8*)
  br i1 %542, label %_Z13digest_memoryPvS_.exit235, label %.lr.ph.i234

_Z13digest_memoryPvS_.exit235:                    ; preds = %.lr.ph.i234
  store i32 %540, i32* %r39, align 4, !tbaa !5
  %543 = load i32** %161, align 8, !tbaa !50
  %544 = load i32** %163, align 8, !tbaa !53
  %545 = icmp eq i32* %543, %544
  br i1 %545, label %550, label %546

; <label>:546                                     ; preds = %_Z13digest_memoryPvS_.exit235
  %547 = icmp eq i32* %543, null
  br i1 %547, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i222, label %548

; <label>:548                                     ; preds = %546
  store i32 %540, i32* %543, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i222

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i222: ; preds = %548, %546
  %549 = getelementptr inbounds i32* %543, i64 1
  store i32* %549, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit224

; <label>:550                                     ; preds = %_Z13digest_memoryPvS_.exit235
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %543, i32* %r39)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit224 unwind label %530

_ZNSt6vectorIjSaIjEE9push_backERKj.exit224:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i222, %550
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer37)
          to label %551 unwind label %.nonloopexit

; <label>:551                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit224
  call void @llvm.lifetime.end(i64 48, i8* %523) #1
  call void @_Z9example23PtPj(i16* getelementptr inbounds ([1024 x i16]* @usa, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ua, i64 0, i64 0))
  %552 = bitcast %class.Timer* %atimer40 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %552) #1
  %553 = getelementptr inbounds %class.Timer* %atimer40, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str14, i64 0, i64 0), i8** %553, align 8, !tbaa !44
  %554 = getelementptr inbounds %class.Timer* %atimer40, i64 0, i32 1
  store i8 %140, i8* %554, align 8, !tbaa !49
  %555 = getelementptr inbounds %class.Timer* %atimer40, i64 0, i32 2
  %556 = call i32 @gettimeofday(%struct.timeval* %555, %struct.timezone* null) #1
  br label %557

; <label>:557                                     ; preds = %557, %551
  %i41.0258 = phi i32 [ 0, %551 ], [ %558, %557 ]
  call void @_Z9example23PtPj(i16* getelementptr inbounds ([1024 x i16]* @usa, i64 0, i64 0), i32* getelementptr inbounds ([1024 x i32]* @ua, i64 0, i64 0))
  %558 = add nsw i32 %i41.0258, 1
  %exitcond290 = icmp eq i32 %558, 2097152
  br i1 %exitcond290, label %.lr.ph.i185, label %557

; <label>:559                                     ; preds = %579
  %560 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %561 = extractvalue { i8*, i32 } %560, 0
  %562 = extractvalue { i8*, i32 } %560, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer40)
          to label %689 unwind label %697

.lr.ph.i185:                                      ; preds = %557, %.lr.ph.i185
  %state.02.i183 = phi i32 [ %569, %.lr.ph.i185 ], [ 1, %557 ]
  %.01.i184 = phi i8* [ %570, %.lr.ph.i185 ], [ bitcast ([1024 x i16]* @usa to i8*), %557 ]
  %563 = mul i32 %state.02.i183, 3
  %564 = load i8* %.01.i184, align 1, !tbaa !41
  %565 = zext i8 %564 to i32
  %566 = xor i32 %565, %563
  %567 = lshr i32 %563, 8
  %568 = shl i32 %566, 8
  %569 = xor i32 %568, %567
  %570 = getelementptr inbounds i8* %.01.i184, i64 1
  %571 = icmp eq i8* %570, bitcast (i16* getelementptr inbounds ([1024 x i16]* @usa, i64 0, i64 256) to i8*)
  br i1 %571, label %_Z13digest_memoryPvS_.exit186, label %.lr.ph.i185

_Z13digest_memoryPvS_.exit186:                    ; preds = %.lr.ph.i185
  store i32 %569, i32* %r42, align 4, !tbaa !5
  %572 = load i32** %161, align 8, !tbaa !50
  %573 = load i32** %163, align 8, !tbaa !53
  %574 = icmp eq i32* %572, %573
  br i1 %574, label %579, label %575

; <label>:575                                     ; preds = %_Z13digest_memoryPvS_.exit186
  %576 = icmp eq i32* %572, null
  br i1 %576, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i173, label %577

; <label>:577                                     ; preds = %575
  store i32 %569, i32* %572, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i173

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i173: ; preds = %577, %575
  %578 = getelementptr inbounds i32* %572, i64 1
  store i32* %578, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit175

; <label>:579                                     ; preds = %_Z13digest_memoryPvS_.exit186
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %572, i32* %r42)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit175 unwind label %559

_ZNSt6vectorIjSaIjEE9push_backERKj.exit175:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i173, %579
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer40)
          to label %580 unwind label %.nonloopexit

; <label>:580                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit175
  call void @llvm.lifetime.end(i64 48, i8* %552) #1
  call void @_Z9example24ss(i16 signext 2, i16 signext 4)
  %581 = bitcast %class.Timer* %atimer43 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %581) #1
  %582 = getelementptr inbounds %class.Timer* %atimer43, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str15, i64 0, i64 0), i8** %582, align 8, !tbaa !44
  %583 = getelementptr inbounds %class.Timer* %atimer43, i64 0, i32 1
  store i8 %140, i8* %583, align 8, !tbaa !49
  %584 = getelementptr inbounds %class.Timer* %atimer43, i64 0, i32 2
  %585 = call i32 @gettimeofday(%struct.timeval* %584, %struct.timezone* null) #1
  br label %586

; <label>:586                                     ; preds = %586, %580
  %i44.0257 = phi i32 [ 0, %580 ], [ %587, %586 ]
  call void @_Z9example24ss(i16 signext 2, i16 signext 4)
  %587 = add nsw i32 %i44.0257, 1
  %exitcond289 = icmp eq i32 %587, 524288
  br i1 %exitcond289, label %592, label %586

; <label>:588                                     ; preds = %600
  %589 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %590 = extractvalue { i8*, i32 } %589, 0
  %591 = extractvalue { i8*, i32 } %589, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer43)
          to label %689 unwind label %697

; <label>:592                                     ; preds = %586
  store i32 0, i32* %r45, align 4, !tbaa !5
  %593 = load i32** %161, align 8, !tbaa !50
  %594 = load i32** %163, align 8, !tbaa !53
  %595 = icmp eq i32* %593, %594
  br i1 %595, label %600, label %596

; <label>:596                                     ; preds = %592
  %597 = icmp eq i32* %593, null
  br i1 %597, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i131, label %598

; <label>:598                                     ; preds = %596
  store i32 0, i32* %593, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i131

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i131: ; preds = %598, %596
  %599 = getelementptr inbounds i32* %593, i64 1
  store i32* %599, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit133

; <label>:600                                     ; preds = %592
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %593, i32* %r45)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit133 unwind label %588

_ZNSt6vectorIjSaIjEE9push_backERKj.exit133:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i131, %600
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer43)
          to label %601 unwind label %.nonloopexit

; <label>:601                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit133
  call void @llvm.lifetime.end(i64 48, i8* %581) #1
  call void @_Z9example25v()
  %602 = bitcast %class.Timer* %atimer46 to i8*
  call void @llvm.lifetime.start(i64 48, i8* %602) #1
  %603 = getelementptr inbounds %class.Timer* %atimer46, i64 0, i32 0
  store i8* getelementptr inbounds ([10 x i8]* @.str16, i64 0, i64 0), i8** %603, align 8, !tbaa !44
  %604 = getelementptr inbounds %class.Timer* %atimer46, i64 0, i32 1
  store i8 %140, i8* %604, align 8, !tbaa !49
  %605 = getelementptr inbounds %class.Timer* %atimer46, i64 0, i32 2
  %606 = call i32 @gettimeofday(%struct.timeval* %605, %struct.timezone* null) #1
  br label %607

; <label>:607                                     ; preds = %607, %601
  %i47.0256 = phi i32 [ 0, %601 ], [ %608, %607 ]
  call void @_Z9example25v()
  %608 = add nsw i32 %i47.0256, 1
  %exitcond = icmp eq i32 %608, 524288
  br i1 %exitcond, label %.lr.ph.i110, label %607

; <label>:609                                     ; preds = %629
  %610 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %611 = extractvalue { i8*, i32 } %610, 0
  %612 = extractvalue { i8*, i32 } %610, 1
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer46)
          to label %689 unwind label %697

.lr.ph.i110:                                      ; preds = %607, %.lr.ph.i110
  %state.02.i108 = phi i32 [ %619, %.lr.ph.i110 ], [ 1, %607 ]
  %.01.i109 = phi i8* [ %620, %.lr.ph.i110 ], [ bitcast ([1024 x i32]* @dj to i8*), %607 ]
  %613 = mul i32 %state.02.i108, 3
  %614 = load i8* %.01.i109, align 1, !tbaa !41
  %615 = zext i8 %614 to i32
  %616 = xor i32 %615, %613
  %617 = lshr i32 %613, 8
  %618 = shl i32 %616, 8
  %619 = xor i32 %618, %617
  %620 = getelementptr inbounds i8* %.01.i109, i64 1
  %621 = icmp eq i8* %620, bitcast (i32* getelementptr inbounds ([1024 x i32]* @dj, i64 1, i64 0) to i8*)
  br i1 %621, label %_Z13digest_memoryPvS_.exit, label %.lr.ph.i110

_Z13digest_memoryPvS_.exit:                       ; preds = %.lr.ph.i110
  store i32 %619, i32* %r48, align 4, !tbaa !5
  %622 = load i32** %161, align 8, !tbaa !50
  %623 = load i32** %163, align 8, !tbaa !53
  %624 = icmp eq i32* %622, %623
  br i1 %624, label %629, label %625

; <label>:625                                     ; preds = %_Z13digest_memoryPvS_.exit
  %626 = icmp eq i32* %622, null
  br i1 %626, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i, label %627

; <label>:627                                     ; preds = %625
  store i32 %619, i32* %622, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i: ; preds = %627, %625
  %628 = getelementptr inbounds i32* %622, i64 1
  store i32* %628, i32** %161, align 8, !tbaa !50
  br label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit

; <label>:629                                     ; preds = %_Z13digest_memoryPvS_.exit
  invoke void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* %results, i32* %622, i32* %r48)
          to label %_ZNSt6vectorIjSaIjEE9push_backERKj.exit unwind label %609

_ZNSt6vectorIjSaIjEE9push_backERKj.exit:          ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit.i, %629
  invoke void @_ZN5TimerD2Ev(%class.Timer* %atimer46)
          to label %630 unwind label %.nonloopexit

; <label>:630                                     ; preds = %_ZNSt6vectorIjSaIjEE9push_backERKj.exit
  call void @llvm.lifetime.end(i64 48, i8* %602) #1
  %631 = load i8** bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8**), align 8, !tbaa !54
  %632 = getelementptr i8* %631, i64 -24
  %633 = bitcast i8* %632 to i64*
  %634 = load i64* %633, align 8
  %.sum = add i64 %634, 24
  %635 = getelementptr inbounds i8* bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8*), i64 %.sum
  %636 = bitcast i8* %635 to i32*
  %637 = load i32* %636, align 4, !tbaa !56
  %638 = and i32 %637, -75
  %639 = or i32 %638, 8
  store i32 %639, i32* %636, align 4, !tbaa !56
  %640 = invoke %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([11 x i8]* @.str17, i64 0, i64 0), i64 10)
          to label %641 unwind label %.nonloopexit

; <label>:641                                     ; preds = %630
  %642 = getelementptr inbounds %"class.std::vector"* %results, i64 0, i32 0, i32 0, i32 0
  %643 = load i32** %642, align 8, !tbaa !27
  %644 = load i32** %161, align 8, !tbaa !27
  %645 = icmp eq i32* %643, %644
  br i1 %645, label %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit, label %.lr.ph.i91.preheader

.lr.ph.i91.preheader:                             ; preds = %641
  %646 = ptrtoint i32* %643 to i64
  %scevgep = getelementptr i32* %644, i64 -1
  %647 = ptrtoint i32* %scevgep to i64
  %648 = sub i64 %647, %646
  %649 = lshr i64 %648, 2
  %650 = add i64 %649, 1
  %end.idx = add i64 %649, 1
  %n.vec = and i64 %650, 9223372036854775800
  %cmp.zero = icmp eq i64 %n.vec, 0
  %ptr.ind.end = getelementptr i32* %643, i64 %n.vec
  br i1 %cmp.zero, label %middle.block, label %vector.body

vector.body:                                      ; preds = %.lr.ph.i91.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.i91.preheader ]
  %vec.phi = phi <4 x i32> [ %654, %vector.body ], [ zeroinitializer, %.lr.ph.i91.preheader ]
  %vec.phi323 = phi <4 x i32> [ %655, %vector.body ], [ zeroinitializer, %.lr.ph.i91.preheader ]
  %next.gep = getelementptr i32* %643, i64 %index
  %651 = bitcast i32* %next.gep to <4 x i32>*
  %wide.load = load <4 x i32>* %651, align 4
  %next.gep.sum357 = or i64 %index, 4
  %652 = getelementptr i32* %643, i64 %next.gep.sum357
  %653 = bitcast i32* %652 to <4 x i32>*
  %wide.load345 = load <4 x i32>* %653, align 4
  %654 = add <4 x i32> %wide.load, %vec.phi
  %655 = add <4 x i32> %wide.load345, %vec.phi323
  %index.next = add i64 %index, 8
  %656 = icmp eq i64 %index.next, %n.vec
  br i1 %656, label %middle.block, label %vector.body, !llvm.loop !58

middle.block:                                     ; preds = %vector.body, %.lr.ph.i91.preheader
  %resume.val = phi i32* [ %643, %.lr.ph.i91.preheader ], [ %ptr.ind.end, %vector.body ]
  %new.indc.resume.val = phi i64 [ 0, %.lr.ph.i91.preheader ], [ %n.vec, %vector.body ]
  %rdx.vec.exit.phi = phi <4 x i32> [ zeroinitializer, %.lr.ph.i91.preheader ], [ %654, %vector.body ]
  %rdx.vec.exit.phi346 = phi <4 x i32> [ zeroinitializer, %.lr.ph.i91.preheader ], [ %655, %vector.body ]
  %bin.rdx = add <4 x i32> %rdx.vec.exit.phi346, %rdx.vec.exit.phi
  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
  %bin.rdx347 = add <4 x i32> %bin.rdx, %rdx.shuf
  %rdx.shuf348 = shufflevector <4 x i32> %bin.rdx347, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx349 = add <4 x i32> %bin.rdx347, %rdx.shuf348
  %657 = extractelement <4 x i32> %bin.rdx349, i32 0
  %cmp.n = icmp eq i64 %end.idx, %new.indc.resume.val
  br i1 %cmp.n, label %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit, label %.lr.ph.i91

.lr.ph.i91:                                       ; preds = %middle.block, %.lr.ph.i91
  %.03.i = phi i32 [ %659, %.lr.ph.i91 ], [ %657, %middle.block ]
  %__first.coerce12.i = phi i32* [ %660, %.lr.ph.i91 ], [ %resume.val, %middle.block ]
  %658 = load i32* %__first.coerce12.i, align 4, !tbaa !5
  %659 = add i32 %658, %.03.i
  %660 = getelementptr inbounds i32* %__first.coerce12.i, i64 1
  %661 = icmp eq i32* %660, %644
  br i1 %661, label %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit, label %.lr.ph.i91, !llvm.loop !59

_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit: ; preds = %.lr.ph.i91, %middle.block, %641
  %.0.lcssa.i = phi i32 [ 0, %641 ], [ %659, %.lr.ph.i91 ], [ %657, %middle.block ]
  %662 = invoke %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* @_ZSt4cout, i32 %.0.lcssa.i)
          to label %663 unwind label %.nonloopexit

; <label>:663                                     ; preds = %_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEiET0_T_S8_S7_.exit
  %664 = invoke %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* %662, i8* getelementptr inbounds ([3 x i8]* @.str18, i64 0, i64 0), i64 2)
          to label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader unwind label %.nonloopexit

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader: ; preds = %663
  %665 = load i32** %161, align 8, !tbaa !50
  %666 = load i32** %642, align 8, !tbaa !60
  %667 = icmp eq i32* %665, %666
  br i1 %667, label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader, %_ZNSolsEj.exit
  %668 = phi i64 [ %676, %_ZNSolsEj.exit ], [ 0, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader ]
  %i49.0255 = phi i32 [ %675, %_ZNSolsEj.exit ], [ 0, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader ]
  %669 = invoke %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([2 x i8]* @.str19, i64 0, i64 0), i64 1)
          to label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit73 unwind label %.loopexit

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit73: ; preds = %.lr.ph
  %670 = load i32** %642, align 8, !tbaa !60
  %671 = getelementptr inbounds i32* %670, i64 %668
  %672 = load i32* %671, align 4, !tbaa !5
  %673 = zext i32 %672 to i64
  %674 = invoke %"class.std::basic_ostream"* @_ZNSo9_M_insertImEERSoT_(%"class.std::basic_ostream"* @_ZSt4cout, i64 %673)
          to label %_ZNSolsEj.exit unwind label %.loopexit

_ZNSolsEj.exit:                                   ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit73
  %675 = add i32 %i49.0255, 1
  %676 = zext i32 %675 to i64
  %677 = load i32** %161, align 8, !tbaa !50
  %678 = load i32** %642, align 8, !tbaa !60
  %679 = ptrtoint i32* %677 to i64
  %680 = ptrtoint i32* %678 to i64
  %681 = sub i64 %679, %680
  %682 = ashr exact i64 %681, 2
  %683 = icmp ult i64 %676, %682
  br i1 %683, label %.lr.ph, label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge: ; preds = %_ZNSolsEj.exit, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82.preheader
  %684 = invoke %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([2 x i8]* @.str20, i64 0, i64 0), i64 1)
          to label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit unwind label %.nonloopexit

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit: ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit82._crit_edge
  %685 = load i32** %642, align 8, !tbaa !60
  %686 = icmp eq i32* %685, null
  br i1 %686, label %_ZNSt6vectorIjSaIjEED2Ev.exit56, label %687

; <label>:687                                     ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit
  %688 = bitcast i32* %685 to i8*
  call void @_ZdlPv(i8* %688) #1
  br label %_ZNSt6vectorIjSaIjEED2Ev.exit56

_ZNSt6vectorIjSaIjEED2Ev.exit56:                  ; preds = %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit, %687
  ret i32 0

; <label>:689                                     ; preds = %609, %588, %559, %530, %501, %472, %433, %411, %382, %353, %324, %295, %266, %237, %208, %179, %148, %145
  %.051 = phi i32 [ %147, %145 ], [ %612, %609 ], [ %591, %588 ], [ %562, %559 ], [ %533, %530 ], [ %504, %501 ], [ %475, %472 ], [ %436, %433 ], [ %414, %411 ], [ %385, %382 ], [ %356, %353 ], [ %327, %324 ], [ %298, %295 ], [ %269, %266 ], [ %240, %237 ], [ %211, %208 ], [ %182, %179 ], [ %151, %148 ]
  %.0 = phi i8* [ %146, %145 ], [ %611, %609 ], [ %590, %588 ], [ %561, %559 ], [ %532, %530 ], [ %503, %501 ], [ %474, %472 ], [ %435, %433 ], [ %413, %411 ], [ %384, %382 ], [ %355, %353 ], [ %326, %324 ], [ %297, %295 ], [ %268, %266 ], [ %239, %237 ], [ %210, %208 ], [ %181, %179 ], [ %150, %148 ]
  %690 = getelementptr inbounds %"class.std::vector"* %results, i64 0, i32 0, i32 0, i32 0
  %691 = load i32** %690, align 8, !tbaa !60
  %692 = icmp eq i32* %691, null
  br i1 %692, label %_ZNSt6vectorIjSaIjEED2Ev.exit, label %693

; <label>:693                                     ; preds = %689
  %694 = bitcast i32* %691 to i8*
  call void @_ZdlPv(i8* %694) #1
  br label %_ZNSt6vectorIjSaIjEED2Ev.exit

_ZNSt6vectorIjSaIjEED2Ev.exit:                    ; preds = %693, %689
  %695 = insertvalue { i8*, i32 } undef, i8* %.0, 0
  %696 = insertvalue { i8*, i32 } %695, i32 %.051, 1
  resume { i8*, i32 } %696

; <label>:697                                     ; preds = %609, %588, %559, %530, %501, %472, %433, %411, %382, %353, %324, %295, %266, %237, %208, %179, %148
  %698 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          catch i8* null
  %699 = extractvalue { i8*, i32 } %698, 0
  call void @__clang_call_terminate(i8* %699) #13
  unreachable
}

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #1

; Function Attrs: uwtable
define linkonce_odr void @_ZN5TimerD2Ev(%class.Timer* nocapture %this) unnamed_addr #5 align 2 {
  %1 = getelementptr inbounds %class.Timer* %this, i64 0, i32 3
  %2 = tail call i32 @gettimeofday(%struct.timeval* %1, %struct.timezone* null) #1
  %3 = getelementptr inbounds %class.Timer* %this, i64 0, i32 1
  %4 = load i8* %3, align 1, !tbaa !49, !range !61
  %5 = icmp eq i8 %4, 0
  br i1 %5, label %44, label %6

; <label>:6                                       ; preds = %0
  %7 = getelementptr inbounds %class.Timer* %this, i64 0, i32 2, i32 1
  %8 = getelementptr inbounds %class.Timer* %this, i64 0, i32 3, i32 1
  %9 = getelementptr inbounds %class.Timer* %this, i64 0, i32 2, i32 0
  %10 = getelementptr inbounds %struct.timeval* %1, i64 0, i32 0
  %11 = load i64* %7, align 8, !tbaa !62
  %12 = load i64* %8, align 8, !tbaa !63
  %13 = load i64* %9, align 8, !tbaa !64
  %14 = load i64* %10, align 8, !tbaa !65
  %15 = sub nsw i64 %12, %11
  %16 = sub nsw i64 %14, %13
  %17 = sitofp i64 %15 to double
  %18 = mul nsw i64 %16, 1000
  %19 = fdiv double %17, 1.000000e+03
  %20 = sitofp i64 %18 to double
  %21 = fadd double %19, %20
  %22 = fadd double %21, 5.000000e-01
  %23 = fptosi double %22 to i64
  %24 = getelementptr inbounds %class.Timer* %this, i64 0, i32 0
  %25 = load i8** %24, align 8, !tbaa !44
  %26 = icmp eq i8* %25, null
  br i1 %26, label %27, label %38

; <label>:27                                      ; preds = %6
  %28 = load i8** bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8**), align 8, !tbaa !54
  %29 = getelementptr i8* %28, i64 -24
  %30 = bitcast i8* %29 to i64*
  %31 = load i64* %30, align 8
  %32 = getelementptr inbounds i8* bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8*), i64 %31
  %33 = bitcast i8* %32 to %"class.std::basic_ios"*
  %.sum.i = add i64 %31, 32
  %34 = getelementptr inbounds i8* bitcast (%"class.std::basic_ostream"* @_ZSt4cout to i8*), i64 %.sum.i
  %35 = bitcast i8* %34 to i32*
  %36 = load i32* %35, align 4, !tbaa !66
  %37 = or i32 %36, 1
  tail call void @_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate(%"class.std::basic_ios"* %33, i32 %37)
  br label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit

; <label>:38                                      ; preds = %6
  %39 = tail call i64 @strlen(i8* %25) #1
  %40 = tail call %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* %25, i64 %39)
  br label %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit

_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit: ; preds = %27, %38
  %41 = tail call %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* @_ZSt4cout, i8* getelementptr inbounds ([3 x i8]* @.str22, i64 0, i64 0), i64 2)
  %42 = tail call %"class.std::basic_ostream"* @_ZNSo9_M_insertIlEERSoT_(%"class.std::basic_ostream"* @_ZSt4cout, i64 %23)
  %43 = tail call %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* %42, i8* getelementptr inbounds ([8 x i8]* @.str23, i64 0, i64 0), i64 7)
  br label %44

; <label>:44                                      ; preds = %0, %_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc.exit
  ret void
}

; Function Attrs: noinline noreturn nounwind
define linkonce_odr hidden void @__clang_call_terminate(i8*) #6 {
  %2 = tail call i8* @__cxa_begin_catch(i8* %0) #1
  tail call void @_ZSt9terminatev() #13
  unreachable
}

declare i8* @__cxa_begin_catch(i8*)

declare void @_ZSt9terminatev()

; Function Attrs: nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #1

declare %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"*, i32) #0

declare %"class.std::basic_ostream"* @_ZNSo9_M_insertImEERSoT_(%"class.std::basic_ostream"*, i64) #0

; Function Attrs: uwtable
define linkonce_odr void @_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj(%"class.std::vector"* nocapture %this, i32* %__position.coerce, i32* nocapture readonly %__x) #5 align 2 {
  %1 = getelementptr inbounds %"class.std::vector"* %this, i64 0, i32 0, i32 0, i32 1
  %2 = load i32** %1, align 8, !tbaa !50
  %3 = getelementptr inbounds %"class.std::vector"* %this, i64 0, i32 0, i32 0, i32 2
  %4 = load i32** %3, align 8, !tbaa !53
  %5 = icmp eq i32* %2, %4
  br i1 %5, label %_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit, label %6

; <label>:6                                       ; preds = %0
  %7 = icmp eq i32* %2, null
  %.pre = getelementptr inbounds i32* %2, i64 -1
  br i1 %7, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit, label %8

; <label>:8                                       ; preds = %6
  %9 = load i32* %.pre, align 4, !tbaa !5
  store i32 %9, i32* %2, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit: ; preds = %6, %8
  %10 = getelementptr inbounds i32* %2, i64 1
  store i32* %10, i32** %1, align 8, !tbaa !50
  %11 = load i32* %__x, align 4, !tbaa !5
  %12 = ptrtoint i32* %.pre to i64
  %13 = ptrtoint i32* %__position.coerce to i64
  %14 = sub i64 %12, %13
  %15 = ashr exact i64 %14, 2
  %16 = icmp eq i64 %15, 0
  br i1 %16, label %_ZSt13copy_backwardIPjS0_ET0_T_S2_S1_.exit, label %17

; <label>:17                                      ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit
  %.pre.i.i.i.i = sub i64 0, %15
  %.pre1.i.i.i.i = getelementptr inbounds i32* %2, i64 %.pre.i.i.i.i
  %18 = bitcast i32* %.pre1.i.i.i.i to i8*
  %19 = bitcast i32* %__position.coerce to i8*
  tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %18, i8* %19, i64 %14, i32 4, i1 false) #1
  br label %_ZSt13copy_backwardIPjS0_ET0_T_S2_S1_.exit

_ZSt13copy_backwardIPjS0_ET0_T_S2_S1_.exit:       ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit, %17
  store i32 %11, i32* %__position.coerce, align 4, !tbaa !5
  br label %71

_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit:    ; preds = %0
  %20 = getelementptr inbounds %"class.std::vector"* %this, i64 0, i32 0, i32 0, i32 0
  %21 = load i32** %20, align 8, !tbaa !60
  %22 = ptrtoint i32* %2 to i64
  %23 = ptrtoint i32* %21 to i64
  %24 = sub i64 %22, %23
  %25 = ashr exact i64 %24, 2
  %26 = icmp eq i64 %25, 0
  %27 = select i1 %26, i64 1, i64 %25
  %uadd.i = tail call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %25, i64 %27)
  %28 = extractvalue { i64, i1 } %uadd.i, 0
  %29 = extractvalue { i64, i1 } %uadd.i, 1
  %30 = icmp ugt i64 %28, 4611686018427387903
  %or.cond.i = or i1 %29, %30
  %31 = select i1 %or.cond.i, i64 4611686018427387903, i64 %28
  %32 = ptrtoint i32* %__position.coerce to i64
  %33 = sub i64 %32, %23
  %34 = ashr exact i64 %33, 2
  %35 = icmp eq i64 %31, 0
  br i1 %35, label %_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit, label %36

; <label>:36                                      ; preds = %_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit
  %37 = icmp ugt i64 %31, 4611686018427387903
  br i1 %37, label %38, label %_ZN9__gnu_cxx13new_allocatorIjE8allocateEmPKv.exit.i

; <label>:38                                      ; preds = %36
  tail call void @_ZSt17__throw_bad_allocv() #14
  unreachable

_ZN9__gnu_cxx13new_allocatorIjE8allocateEmPKv.exit.i: ; preds = %36
  %39 = shl i64 %31, 2
  %40 = tail call noalias i8* @_Znwm(i64 %39)
  %41 = bitcast i8* %40 to i32*
  br label %_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit

_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit:  ; preds = %_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit, %_ZN9__gnu_cxx13new_allocatorIjE8allocateEmPKv.exit.i
  %42 = phi i32* [ %41, %_ZN9__gnu_cxx13new_allocatorIjE8allocateEmPKv.exit.i ], [ null, %_ZNKSt6vectorIjSaIjEE12_M_check_lenEmPKc.exit ]
  %43 = getelementptr inbounds i32* %42, i64 %34
  %44 = icmp eq i32* %43, null
  br i1 %44, label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3, label %45

; <label>:45                                      ; preds = %_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit
  %46 = load i32* %__x, align 4, !tbaa !5
  store i32 %46, i32* %43, align 4, !tbaa !5
  br label %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3

_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3: ; preds = %45, %_ZNSt12_Vector_baseIjSaIjEE11_M_allocateEm.exit
  %47 = load i32** %20, align 8, !tbaa !60
  %48 = ptrtoint i32* %47 to i64
  %49 = sub i64 %32, %48
  %50 = ashr exact i64 %49, 2
  %51 = icmp eq i64 %50, 0
  br i1 %51, label %55, label %52

; <label>:52                                      ; preds = %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3
  %53 = bitcast i32* %42 to i8*
  %54 = bitcast i32* %47 to i8*
  tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %53, i8* %54, i64 %49, i32 4, i1 false) #1
  br label %55

; <label>:55                                      ; preds = %52, %_ZN9__gnu_cxx14__alloc_traitsISaIjEE9constructIjEEvRS1_PjRKT_.exit3
  %.sum = add i64 %50, 1
  %56 = load i32** %1, align 8, !tbaa !50
  %57 = ptrtoint i32* %56 to i64
  %58 = sub i64 %57, %32
  %59 = ashr exact i64 %58, 2
  %60 = icmp eq i64 %59, 0
  br i1 %60, label %65, label %61

; <label>:61                                      ; preds = %55
  %62 = getelementptr inbounds i32* %42, i64 %.sum
  %63 = bitcast i32* %62 to i8*
  %64 = bitcast i32* %__position.coerce to i8*
  tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %63, i8* %64, i64 %58, i32 4, i1 false) #1
  br label %65

; <label>:65                                      ; preds = %61, %55
  %.sum4 = add i64 %59, %.sum
  %66 = getelementptr inbounds i32* %42, i64 %.sum4
  %67 = icmp eq i32* %47, null
  br i1 %67, label %_ZNSt12_Vector_baseIjSaIjEE13_M_deallocateEPjm.exit1, label %68

; <label>:68                                      ; preds = %65
  %69 = bitcast i32* %47 to i8*
  tail call void @_ZdlPv(i8* %69) #1
  br label %_ZNSt12_Vector_baseIjSaIjEE13_M_deallocateEPjm.exit1

_ZNSt12_Vector_baseIjSaIjEE13_M_deallocateEPjm.exit1: ; preds = %65, %68
  store i32* %42, i32** %20, align 8, !tbaa !60
  store i32* %66, i32** %1, align 8, !tbaa !50
  %70 = getelementptr inbounds i32* %42, i64 %31
  store i32* %70, i32** %3, align 8, !tbaa !53
  br label %71

; <label>:71                                      ; preds = %_ZNSt12_Vector_baseIjSaIjEE13_M_deallocateEPjm.exit1, %_ZSt13copy_backwardIPjS0_ET0_T_S2_S1_.exit
  ret void
}

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPv(i8*) #7

; Function Attrs: nounwind
declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1

; Function Attrs: noreturn
declare void @_ZSt17__throw_bad_allocv() #8

; Function Attrs: nobuiltin
declare noalias i8* @_Znwm(i64) #9

declare %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"*, i8*, i64) #0

; Function Attrs: nounwind readonly
declare i64 @strlen(i8* nocapture) #10

declare void @_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate(%"class.std::basic_ios"*, i32) #0

; Function Attrs: nounwind
declare i32 @gettimeofday(%struct.timeval* nocapture, %struct.timezone* nocapture) #11

declare %"class.std::basic_ostream"* @_ZNSo9_M_insertIlEERSoT_(%"class.std::basic_ostream"*, i64) #0

define internal void @_GLOBAL__I_a() section ".text.startup" {
  tail call void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"* @_ZStL8__ioinit)
  %1 = tail call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.std::ios_base::Init"*)* @_ZNSt8ios_base4InitD1Ev to void (i8*)*), i8* getelementptr inbounds (%"class.std::ios_base::Init"* @_ZStL8__ioinit, i64 0, i32 0), i8* @__dso_handle) #1
  ret void
}

; Function Attrs: nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1

; Function Attrs: nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #1

; Function Attrs: nounwind readnone
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #12

attributes #0 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind }
attributes #2 = { noinline nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind readonly uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #6 = { noinline noreturn nounwind }
attributes #7 = { nobuiltin nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #8 = { noreturn "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #9 = { nobuiltin "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #10 = { nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #11 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #12 = { nounwind readnone }
attributes #13 = { noreturn nounwind }
attributes #14 = { noreturn }

!llvm.ident = !{!0}

!0 = metadata !{metadata !"clang version 3.5 "}
!1 = metadata !{metadata !1, metadata !2, metadata !3}
!2 = metadata !{metadata !"llvm.vectorizer.width", i32 1}
!3 = metadata !{metadata !"llvm.vectorizer.unroll", i32 1}
!4 = metadata !{metadata !4, metadata !2, metadata !3}
!5 = metadata !{metadata !6, metadata !6, i64 0}
!6 = metadata !{metadata !"int", metadata !7, i64 0}
!7 = metadata !{metadata !"omnipotent char", metadata !8, i64 0}
!8 = metadata !{metadata !"Simple C/C++ TBAA"}
!9 = metadata !{metadata !9, metadata !2, metadata !3}
!10 = metadata !{metadata !10, metadata !2, metadata !3}
!11 = metadata !{metadata !11, metadata !2, metadata !3}
!12 = metadata !{metadata !12, metadata !2, metadata !3}
!13 = metadata !{metadata !13, metadata !2, metadata !3}
!14 = metadata !{metadata !14, metadata !2, metadata !3}
!15 = metadata !{metadata !15, metadata !2, metadata !3}
!16 = metadata !{metadata !16, metadata !2, metadata !3}
!17 = metadata !{metadata !17, metadata !2, metadata !3}
!18 = metadata !{metadata !18, metadata !2, metadata !3}
!19 = metadata !{metadata !19, metadata !2, metadata !3}
!20 = metadata !{metadata !20, metadata !2, metadata !3}
!21 = metadata !{metadata !21, metadata !2, metadata !3}
!22 = metadata !{metadata !22, metadata !2, metadata !3}
!23 = metadata !{metadata !23, metadata !2, metadata !3}
!24 = metadata !{metadata !24, metadata !2, metadata !3}
!25 = metadata !{metadata !25, metadata !2, metadata !3}
!26 = metadata !{metadata !26, metadata !2, metadata !3}
!27 = metadata !{metadata !28, metadata !28, i64 0}
!28 = metadata !{metadata !"any pointer", metadata !7, i64 0}
!29 = metadata !{metadata !29, metadata !2, metadata !3}
!30 = metadata !{metadata !30, metadata !2, metadata !3}
!31 = metadata !{metadata !31, metadata !2, metadata !3}
!32 = metadata !{metadata !32, metadata !2, metadata !3}
!33 = metadata !{metadata !33, metadata !2, metadata !3}
!34 = metadata !{metadata !34, metadata !2, metadata !3}
!35 = metadata !{metadata !35, metadata !2, metadata !3}
!36 = metadata !{metadata !37, metadata !37, i64 0}
!37 = metadata !{metadata !"short", metadata !7, i64 0}
!38 = metadata !{metadata !38, metadata !2, metadata !3}
!39 = metadata !{metadata !39, metadata !2, metadata !3}
!40 = metadata !{metadata !40, metadata !2, metadata !3}
!41 = metadata !{metadata !7, metadata !7, i64 0}
!42 = metadata !{metadata !43, metadata !43, i64 0}
!43 = metadata !{metadata !"float", metadata !7, i64 0}
!44 = metadata !{metadata !45, metadata !28, i64 0}
!45 = metadata !{metadata !"_ZTS5Timer", metadata !28, i64 0, metadata !46, i64 8, metadata !47, i64 16, metadata !47, i64 32}
!46 = metadata !{metadata !"bool", metadata !7, i64 0}
!47 = metadata !{metadata !"_ZTS7timeval", metadata !48, i64 0, metadata !48, i64 8}
!48 = metadata !{metadata !"long", metadata !7, i64 0}
!49 = metadata !{metadata !45, metadata !46, i64 8}
!50 = metadata !{metadata !51, metadata !28, i64 8}
!51 = metadata !{metadata !"_ZTSSt12_Vector_baseIjSaIjEE", metadata !52, i64 0}
!52 = metadata !{metadata !"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", metadata !28, i64 0, metadata !28, i64 8, metadata !28, i64 16}
!53 = metadata !{metadata !51, metadata !28, i64 16}
!54 = metadata !{metadata !55, metadata !55, i64 0}
!55 = metadata !{metadata !"vtable pointer", metadata !8, i64 0}
!56 = metadata !{metadata !57, metadata !57, i64 0}
!57 = metadata !{metadata !"_ZTSSt13_Ios_Fmtflags", metadata !7, i64 0}
!58 = metadata !{metadata !58, metadata !2, metadata !3}
!59 = metadata !{metadata !59, metadata !2, metadata !3}
!60 = metadata !{metadata !51, metadata !28, i64 0}
!61 = metadata !{i8 0, i8 2}
!62 = metadata !{metadata !45, metadata !48, i64 24}
!63 = metadata !{metadata !45, metadata !48, i64 40}
!64 = metadata !{metadata !45, metadata !48, i64 16}
!65 = metadata !{metadata !45, metadata !48, i64 32}
!66 = metadata !{metadata !67, metadata !68, i64 32}
!67 = metadata !{metadata !"_ZTSSt8ios_base", metadata !48, i64 8, metadata !48, i64 16, metadata !57, i64 24, metadata !68, i64 28, metadata !68, i64 32, metadata !28, i64 40, metadata !69, i64 48, metadata !7, i64 64, metadata !6, i64 192, metadata !28, i64 200, metadata !70, i64 208}
!68 = metadata !{metadata !"_ZTSSt12_Ios_Iostate", metadata !7, i64 0}
!69 = metadata !{metadata !"_ZTSNSt8ios_base6_WordsE", metadata !28, i64 0, metadata !48, i64 8}
!70 = metadata !{metadata !"_ZTSSt6locale", metadata !28, i64 0}


More information about the llvm-commits mailing list