JustPaste.it

LLVM IR

; ModuleID = 'f'
source_filename = "<string>"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-grtev4-linux-gnu"
 
@.const.pickledata.92013167184064 = internal constant [137 x i8] c"\80\04\95~\00\00\00\00\00\00\00\8C\08builtins\94\8C\0AValueError\94\93\94\8C[array is too big; `arr.size * arr.dtype.itemsize` is larger than the maximum possible size.\94\85\94N\87\94."
@.const.pickledata.92013167184064.sha1 = internal constant [20 x i8] c"X\E1N\CC\B5\07\B1\E0 i\81t\02#\E6\85\CB\8C<W"
@.const.picklebuf.92013167184064 = internal constant { ptr, i32, ptr, ptr, i32 } { ptr @.const.pickledata.92013167184064, i32 137, ptr @.const.pickledata.92013167184064.sha1, ptr null, i32 0 }
@.const.f = internal constant [2 x i8] c"f\00"
@_ZN08NumbaEnv8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE = common local_unnamed_addr global ptr null
@".const.missing Environment: _ZN08NumbaEnv8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE" = internal constant [123 x i8] c"missing Environment: _ZN08NumbaEnv8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE\00"
@PyExc_TypeError = external global i8
@".const.can't unbox array from PyObject into native value.  The object maybe of a different type" = internal constant [89 x i8] c"can't unbox array from PyObject into native value.  The object maybe of a different type\00"
@".const.`env.consts` is NULL in `read_const`" = internal constant [37 x i8] c"`env.consts` is NULL in `read_const`\00"
@.const.pickledata.93842500064544 = internal constant [32 x i8] c"\80\04\95\15\00\00\00\00\00\00\00\8C\05numpy\94\8C\07ndarray\94\93\94."
@.const.pickledata.93842500064544.sha1 = internal constant [20 x i8] c"\DF\BC\FD\D3\9F\CB&\F4\D0\C6\80\95D\87\B8\C0\B5;\B8\A3"
@".const.Error creating Python tuple from runtime exception arguments" = internal constant [61 x i8] c"Error creating Python tuple from runtime exception arguments\00"
@PyExc_RuntimeError = external global i8
@".const.Error creating Python tuple from runtime exception arguments.1" = internal constant [61 x i8] c"Error creating Python tuple from runtime exception arguments\00"
@".const.<numba.core.cpu.CPUContext object at 0x53af7c21d190>" = internal constant [53 x i8] c"<numba.core.cpu.CPUContext object at 0x53af7c21d190>\00"
@_ZN08NumbaEnv13_3cdynamic_3e33__numba_array_expr_0x53af7c21e310B2v2B72c8tJTIeFIjxB2IKSgI4CrvQCk0Z4yRYcWsBAQ4s_2fqEpEUkESQI1_2bmEQRxHRNAA_3d_3dEd = common local_unnamed_addr global ptr null
@_ZN08NumbaEnv5numba2np7npyimpl15_broadcast_ontoB2v3B42c8tJTC_2fWQA93W1AaAIYBPIqRBFCjDSZRVAJmaQIAEx8int64_2ax8int64_2a = common local_unnamed_addr global ptr null
@_ZN08NumbaEnv5numba2np8arrayobj15_call_allocatorB2v4B42c8tJTC_2fWQA93W1AaAIYBPIqRBFCjDSZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj = common local_unnamed_addr global ptr null
@_ZN08NumbaEnv5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v5B42c8tJTIeFIjxB2IKSgI4CrvQClcaMQ5hEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj = common local_unnamed_addr global ptr null
@.const.pickledata.92013159063168 = internal constant [86 x i8] c"\80\04\95K\00\00\00\00\00\00\00\8C\08builtins\94\8C\0BMemoryError\94\93\94\8C'Allocation failed (probably too large).\94\85\94N\87\94."
@.const.pickledata.92013159063168.sha1 = internal constant [20 x i8] c"\BA(\9D\81\F0\\p \F3G|\15sH\04\DFe\AB\E2\09"
@.const.picklebuf.92013159063168 = internal constant { ptr, i32, ptr, ptr, i32 } { ptr @.const.pickledata.92013159063168, i32 86, ptr @.const.pickledata.92013159063168.sha1, ptr null, i32 0 }
 
define range(i32 0, 2) i32 @_ZN8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE(ptr noalias writeonly captures(none) %retptr, ptr noalias writeonly captures(none) %excinfo, ptr %arg.arr1.0, ptr readnone captures(none) %arg.arr1.1, i64 %arg.arr1.2, i64 %arg.arr1.3, ptr readonly captures(none) %arg.arr1.4, i64 %arg.arr1.5.0, i64 %arg.arr1.5.1, i64 %arg.arr1.6.0, i64 %arg.arr1.6.1) local_unnamed_addr {
B128.i:
  %arg.arr1.5.1.fr = freeze i64 %arg.arr1.5.1
  %arg.arr1.5.0.fr = freeze i64 %arg.arr1.5.0
  tail call void @NRT_incref(ptr %arg.arr1.0)
  %.93 = tail call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %arg.arr1.5.0.fr, i64 %arg.arr1.5.1.fr)
  %.94 = extractvalue { i64, i1 } %.93, 0
  %.95 = extractvalue { i64, i1 } %.93, 1
  %.97 = shl i64 %arg.arr1.5.1.fr, 3
  %0 = add i64 %.94, -1152921504606846976
  %.100 = icmp ult i64 %0, -2305843009213693952
  %.101 = or i1 %.95, %.100
  br i1 %.101, label %B0.endif.endif.if, label %B0.endif.endif.endif, !prof !0
 
common.ret:                                       ; preds = %for.end, %B0.endif.endif.endif.if.if, %B0.endif.endif.if
  %common.ret.op = phi i32 [ 1, %B0.endif.endif.if ], [ 1, %B0.endif.endif.endif.if.if ], [ 0, %for.end ]
  ret i32 %common.ret.op
 
B0.endif.endif.if:                                ; preds = %B128.i
  store ptr @.const.picklebuf.92013167184064, ptr %excinfo, align 8, !numba_exception_output !1
  br label %common.ret
 
B0.endif.endif.endif:                             ; preds = %B128.i
  %.99 = shl nsw i64 %.94, 3
  %.7.i.i = tail call ptr @NRT_MemInfo_alloc_aligned(i64 %.99, i32 32), !noalias !2
  %.8.i.i = icmp eq ptr %.7.i.i, null
  br i1 %.8.i.i, label %B0.endif.endif.endif.if.if, label %B0.endif.endif.endif.endif, !prof !0
 
B0.endif.endif.endif.endif:                       ; preds = %B0.endif.endif.endif
  %.5.i = getelementptr i8, ptr %.7.i.i, i64 24
  %.6.i = load ptr, ptr %.5.i, align 8
  %.17977 = icmp sgt i64 %arg.arr1.5.0.fr, 0
  br i1 %.17977, label %for.cond.1.preheader.lr.ph, label %for.end
 
for.cond.1.preheader.lr.ph:                       ; preds = %B0.endif.endif.endif.endif
  %.18248 = icmp sgt i64 %arg.arr1.5.1.fr, 0
  br i1 %.18248, label %for.cond.1.preheader.lr.ph.split.us, label %for.end
 
for.cond.1.preheader.lr.ph.split.us:              ; preds = %for.cond.1.preheader.lr.ph
  %.184.not = icmp eq i64 %arg.arr1.5.0.fr, 1
  br i1 %.184.not, label %for.cond.1.preheader.lr.ph.split.us.split, label %for.cond.1.preheader.lr.ph.split.us.split.us
 
for.cond.1.preheader.lr.ph.split.us.split.us:     ; preds = %for.cond.1.preheader.lr.ph.split.us
  %1 = icmp ugt i64 %arg.arr1.5.1.fr, 1
  br i1 %1, label %for.cond.1.preheader.us.us.us.preheader, label %iter.check42
 
iter.check42:                                     ; preds = %for.cond.1.preheader.lr.ph.split.us.split.us
  %2 = ptrtoint ptr %.6.i to i64
  %3 = ptrtoint ptr %arg.arr1.4 to i64
  %min.iters.check40 = icmp ult i64 %arg.arr1.5.0.fr, 4
  %ident.check.not = icmp ne i64 %arg.arr1.5.1.fr, 1
  %or.cond.not109 = or i1 %min.iters.check40, %ident.check.not
  %4 = sub i64 %2, %3
  %diff.check39 = icmp ult i64 %4, 128
  %or.cond106 = select i1 %or.cond.not109, i1 true, i1 %diff.check39
  br i1 %or.cond106, label %for.body.1.endif.endif.endif.us.us98.us.preheader, label %vector.main.loop.iter.check44
 
vector.main.loop.iter.check44:                    ; preds = %iter.check42
  %const = bitcast i64 9223372036854775792 to i64
  %min.iters.check43 = icmp ult i64 %arg.arr1.5.0.fr, 16
  br i1 %min.iters.check43, label %vec.epilog.ph59, label %vector.ph45
 
vector.ph45:                                      ; preds = %vector.main.loop.iter.check44
  %n.vec47 = and i64 %arg.arr1.5.0.fr, %const
  br label %vector.body48
 
vector.body48:                                    ; preds = %vector.body48, %vector.ph45
  %index49 = phi i64 [ 0, %vector.ph45 ], [ %index.next54, %vector.body48 ]
  %sunkaddr = mul i64 %index49, 8
  %sunkaddr282 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr
  %wide.load50 = load <4 x double>, ptr %sunkaddr282, align 8
  %sunkaddr283 = mul i64 %index49, 8
  %sunkaddr284 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr283
  %sunkaddr285 = getelementptr i8, ptr %sunkaddr284, i64 32
  %wide.load51 = load <4 x double>, ptr %sunkaddr285, align 8
  %sunkaddr286 = mul i64 %index49, 8
  %sunkaddr287 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr286
  %sunkaddr288 = getelementptr i8, ptr %sunkaddr287, i64 64
  %wide.load52 = load <4 x double>, ptr %sunkaddr288, align 8
  %sunkaddr289 = mul i64 %index49, 8
  %sunkaddr290 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr289
  %sunkaddr291 = getelementptr i8, ptr %sunkaddr290, i64 96
  %wide.load53 = load <4 x double>, ptr %sunkaddr291, align 8
  %5 = fadd <4 x double> %wide.load50, splat (double 2.000000e+00)
  %6 = fadd <4 x double> %wide.load51, splat (double 2.000000e+00)
  %7 = fadd <4 x double> %wide.load52, splat (double 2.000000e+00)
  %8 = fadd <4 x double> %wide.load53, splat (double 2.000000e+00)
  %sunkaddr292 = mul i64 %index49, 8
  %sunkaddr293 = getelementptr i8, ptr %.6.i, i64 %sunkaddr292
  store <4 x double> %5, ptr %sunkaddr293, align 8
  %sunkaddr294 = mul i64 %index49, 8
  %sunkaddr295 = getelementptr i8, ptr %.6.i, i64 %sunkaddr294
  %sunkaddr296 = getelementptr i8, ptr %sunkaddr295, i64 32
  store <4 x double> %6, ptr %sunkaddr296, align 8
  %sunkaddr297 = mul i64 %index49, 8
  %sunkaddr298 = getelementptr i8, ptr %.6.i, i64 %sunkaddr297
  %sunkaddr299 = getelementptr i8, ptr %sunkaddr298, i64 64
  store <4 x double> %7, ptr %sunkaddr299, align 8
  %sunkaddr300 = mul i64 %index49, 8
  %sunkaddr301 = getelementptr i8, ptr %.6.i, i64 %sunkaddr300
  %sunkaddr302 = getelementptr i8, ptr %sunkaddr301, i64 96
  store <4 x double> %8, ptr %sunkaddr302, align 8
  %index.next54 = add nuw i64 %index49, 16
  %9 = icmp eq i64 %n.vec47, %index.next54
  br i1 %9, label %middle.block55, label %vector.body48, !llvm.loop !9
 
middle.block55:                                   ; preds = %vector.body48
  %cmp.n56 = icmp eq i64 %arg.arr1.5.0.fr, %n.vec47
  br i1 %cmp.n56, label %for.end, label %vec.epilog.iter.check60
 
vec.epilog.iter.check60:                          ; preds = %middle.block55
  %n.vec.remaining61 = and i64 %arg.arr1.5.0.fr, 12
  %min.epilog.iters.check62 = icmp eq i64 %n.vec.remaining61, 0
  br i1 %min.epilog.iters.check62, label %for.body.1.endif.endif.endif.us.us98.us.preheader, label %vec.epilog.ph59
 
for.body.1.endif.endif.endif.us.us98.us.preheader: ; preds = %iter.check42, %vec.epilog.middle.block69, %vec.epilog.iter.check60
  %loop.index80.us.us.ph = phi i64 [ 0, %iter.check42 ], [ %n.vec47, %vec.epilog.iter.check60 ], [ %n.vec64, %vec.epilog.middle.block69 ]
  %10 = sub nsw i64 %arg.arr1.5.0.fr, %loop.index80.us.us.ph
  %xtraiter = and i64 %10, 7
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %for.body.1.endif.endif.endif.us.us98.us.prol.loopexit, label %for.body.1.endif.endif.endif.us.us98.us.prol.preheader
 
for.body.1.endif.endif.endif.us.us98.us.prol.preheader: ; preds = %for.body.1.endif.endif.endif.us.us98.us.preheader
  %11 = mul i64 %arg.arr1.5.1.fr, %loop.index80.us.us.ph
  %12 = shl i64 %11, 3
  %13 = shl i64 %arg.arr1.5.1.fr, 3
  %14 = sub i64 0, %xtraiter
  br label %for.body.1.endif.endif.endif.us.us98.us.prol
 
for.body.1.endif.endif.endif.us.us98.us.prol:     ; preds = %for.body.1.endif.endif.endif.us.us98.us.prol.preheader, %for.body.1.endif.endif.endif.us.us98.us.prol
  %lsr.iv256 = phi i64 [ %12, %for.body.1.endif.endif.endif.us.us98.us.prol.preheader ], [ %lsr.iv.next257, %for.body.1.endif.endif.endif.us.us98.us.prol ]
  %lsr.iv254 = phi i64 [ 0, %for.body.1.endif.endif.endif.us.us98.us.prol.preheader ], [ %lsr.iv.next255, %for.body.1.endif.endif.endif.us.us98.us.prol ]
  %scevgep259 = getelementptr i8, ptr %arg.arr1.4, i64 %lsr.iv256
  %scevgep258 = getelementptr i8, ptr %.6.i, i64 %lsr.iv256
  %.200.us.us96.us.prol = load double, ptr %scevgep259, align 8
  %.6.i2.prol = fadd double %.200.us.us96.us.prol, 2.000000e+00
  store double %.6.i2.prol, ptr %scevgep258, align 8
  %lsr.iv.next255 = add nsw i64 %lsr.iv254, -1
  %lsr.iv.next257 = add i64 %lsr.iv256, %13
  %prol.iter.cmp.not = icmp eq i64 %14, %lsr.iv.next255
  br i1 %prol.iter.cmp.not, label %for.body.1.endif.endif.endif.us.us98.us.prol.loopexit.loopexit, label %for.body.1.endif.endif.endif.us.us98.us.prol, !llvm.loop !12
 
for.body.1.endif.endif.endif.us.us98.us.prol.loopexit.loopexit: ; preds = %for.body.1.endif.endif.endif.us.us98.us.prol
  %15 = sub i64 %loop.index80.us.us.ph, %lsr.iv.next255
  br label %for.body.1.endif.endif.endif.us.us98.us.prol.loopexit
 
for.body.1.endif.endif.endif.us.us98.us.prol.loopexit: ; preds = %for.body.1.endif.endif.endif.us.us98.us.prol.loopexit.loopexit, %for.body.1.endif.endif.endif.us.us98.us.preheader
  %loop.index80.us.us.unr = phi i64 [ %loop.index80.us.us.ph, %for.body.1.endif.endif.endif.us.us98.us.preheader ], [ %15, %for.body.1.endif.endif.endif.us.us98.us.prol.loopexit.loopexit ]
  %16 = sub nsw i64 %loop.index80.us.us.ph, %arg.arr1.5.0.fr
  %17 = icmp ugt i64 %16, -8
  br i1 %17, label %for.end, label %for.body.1.endif.endif.endif.us.us98.us.preheader121
 
for.body.1.endif.endif.endif.us.us98.us.preheader121: ; preds = %for.body.1.endif.endif.endif.us.us98.us.prol.loopexit
  %18 = sub i64 %arg.arr1.5.0.fr, %loop.index80.us.us.unr
  %19 = mul i64 %arg.arr1.5.1.fr, %loop.index80.us.us.unr
  %20 = shl i64 %19, 3
  %21 = shl i64 %arg.arr1.5.1.fr, 6
  %22 = shl i64 %arg.arr1.5.1.fr, 3
  br label %for.body.1.endif.endif.endif.us.us98.us
 
vec.epilog.ph59:                                  ; preds = %vec.epilog.iter.check60, %vector.main.loop.iter.check44
  %vec.epilog.resume.val57 = phi i64 [ %n.vec47, %vec.epilog.iter.check60 ], [ 0, %vector.main.loop.iter.check44 ]
  %const_mat = add i64 %const, 12
  %n.vec64 = and i64 %arg.arr1.5.0.fr, %const_mat
  br label %vec.epilog.vector.body65
 
vec.epilog.vector.body65:                         ; preds = %vec.epilog.vector.body65, %vec.epilog.ph59
  %index66 = phi i64 [ %vec.epilog.resume.val57, %vec.epilog.ph59 ], [ %index.next68, %vec.epilog.vector.body65 ]
  %23 = shl i64 %index66, 3
  %scevgep260 = getelementptr i8, ptr %.6.i, i64 %23
  %scevgep261 = getelementptr i8, ptr %arg.arr1.4, i64 %23
  %wide.load67 = load <4 x double>, ptr %scevgep261, align 8
  %24 = fadd <4 x double> %wide.load67, splat (double 2.000000e+00)
  store <4 x double> %24, ptr %scevgep260, align 8
  %index.next68 = add nuw i64 %index66, 4
  %25 = icmp eq i64 %n.vec64, %index.next68
  br i1 %25, label %vec.epilog.middle.block69, label %vec.epilog.vector.body65, !llvm.loop !14
 
vec.epilog.middle.block69:                        ; preds = %vec.epilog.vector.body65
  %cmp.n70 = icmp eq i64 %arg.arr1.5.0.fr, %n.vec64
  br i1 %cmp.n70, label %for.end, label %for.body.1.endif.endif.endif.us.us98.us.preheader
 
for.cond.1.preheader.us.us.us.preheader:          ; preds = %for.cond.1.preheader.lr.ph.split.us.split.us
  %26 = ptrtoint ptr %.6.i to i64
  %27 = ptrtoint ptr %arg.arr1.4 to i64
  %const278 = bitcast i64 9223372036854775792 to i64
  %28 = sub i64 %26, %27
  %min.iters.check74 = icmp ult i64 %arg.arr1.5.1.fr, 4
  %diff.check73 = icmp ult i64 %28, 128
  %or.cond107 = select i1 %min.iters.check74, i1 true, i1 %diff.check73
  %n.vec81 = and i64 %arg.arr1.5.1.fr, %const278
  %const_mat279 = add i64 %const278, 12
  %n.vec98 = and i64 %arg.arr1.5.1.fr, %const_mat279
  %scevgep174 = getelementptr i8, ptr %arg.arr1.4, i64 96
  %29 = shl i64 %arg.arr1.5.1.fr, 3
  %scevgep184 = getelementptr i8, ptr %.6.i, i64 96
  br label %iter.check76
 
iter.check76:                                     ; preds = %for.cond.1.preheader.us.us.us.preheader, %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us
  %lsr.iv197 = phi ptr [ %.6.i, %for.cond.1.preheader.us.us.us.preheader ], [ %scevgep198, %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us ]
  %lsr.iv194 = phi ptr [ %arg.arr1.4, %for.cond.1.preheader.us.us.us.preheader ], [ %scevgep195, %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us ]
  %lsr.iv185 = phi ptr [ %scevgep184, %for.cond.1.preheader.us.us.us.preheader ], [ %scevgep186, %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us ]
  %lsr.iv175 = phi ptr [ %scevgep174, %for.cond.1.preheader.us.us.us.preheader ], [ %scevgep176, %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us ]
  %loop.index80.us.us.us = phi i64 [ %.234.us.us.us, %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us ], [ 0, %for.cond.1.preheader.us.us.us.preheader ]
  br i1 %or.cond107, label %for.body.1.endif.endif.endif.us.us.us.us.us.preheader, label %vector.main.loop.iter.check78
 
vector.main.loop.iter.check78:                    ; preds = %iter.check76
  %30 = icmp ult i64 %arg.arr1.5.1.fr, 16
  br i1 %30, label %vec.epilog.ph93, label %vector.body82.preheader
 
vector.body82.preheader:                          ; preds = %vector.main.loop.iter.check78
  br label %vector.body82
 
vector.body82:                                    ; preds = %vector.body82.preheader, %vector.body82
  %index83 = phi i64 [ %index.next88, %vector.body82 ], [ 0, %vector.body82.preheader ]
  %31 = shl i64 %index83, 3
  %scevgep182 = getelementptr i8, ptr %lsr.iv175, i64 %31
  %scevgep183 = getelementptr i8, ptr %scevgep182, i64 -96
  %32 = shl i64 %index83, 3
  %scevgep180 = getelementptr i8, ptr %lsr.iv175, i64 %32
  %scevgep181 = getelementptr i8, ptr %scevgep180, i64 -64
  %33 = shl i64 %index83, 3
  %scevgep178 = getelementptr i8, ptr %lsr.iv175, i64 %33
  %scevgep179 = getelementptr i8, ptr %scevgep178, i64 -32
  %34 = shl i64 %index83, 3
  %scevgep177 = getelementptr i8, ptr %lsr.iv175, i64 %34
  %wide.load84 = load <4 x double>, ptr %scevgep183, align 8
  %wide.load85 = load <4 x double>, ptr %scevgep181, align 8
  %wide.load86 = load <4 x double>, ptr %scevgep179, align 8
  %wide.load87 = load <4 x double>, ptr %scevgep177, align 8
  %35 = fadd <4 x double> %wide.load84, splat (double 2.000000e+00)
  %36 = fadd <4 x double> %wide.load85, splat (double 2.000000e+00)
  %37 = fadd <4 x double> %wide.load86, splat (double 2.000000e+00)
  %38 = fadd <4 x double> %wide.load87, splat (double 2.000000e+00)
  %39 = shl i64 %index83, 3
  %scevgep192 = getelementptr i8, ptr %lsr.iv185, i64 %39
  %scevgep193 = getelementptr i8, ptr %scevgep192, i64 -96
  %40 = shl i64 %index83, 3
  %scevgep190 = getelementptr i8, ptr %lsr.iv185, i64 %40
  %scevgep191 = getelementptr i8, ptr %scevgep190, i64 -64
  %41 = shl i64 %index83, 3
  %scevgep188 = getelementptr i8, ptr %lsr.iv185, i64 %41
  %scevgep189 = getelementptr i8, ptr %scevgep188, i64 -32
  %42 = shl i64 %index83, 3
  %scevgep187 = getelementptr i8, ptr %lsr.iv185, i64 %42
  store <4 x double> %35, ptr %scevgep193, align 8
  store <4 x double> %36, ptr %scevgep191, align 8
  store <4 x double> %37, ptr %scevgep189, align 8
  store <4 x double> %38, ptr %scevgep187, align 8
  %index.next88 = add nuw i64 %index83, 16
  %43 = icmp eq i64 %n.vec81, %index.next88
  br i1 %43, label %middle.block89, label %vector.body82, !llvm.loop !15
 
middle.block89:                                   ; preds = %vector.body82
  %44 = icmp eq i64 %arg.arr1.5.1.fr, %n.vec81
  br i1 %44, label %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us, label %vec.epilog.iter.check94
 
vec.epilog.iter.check94:                          ; preds = %middle.block89
  %45 = and i64 %arg.arr1.5.1.fr, 12
  %46 = icmp eq i64 %45, 0
  br i1 %46, label %for.body.1.endif.endif.endif.us.us.us.us.us.preheader, label %vec.epilog.ph93
 
vec.epilog.ph93:                                  ; preds = %vec.epilog.iter.check94, %vector.main.loop.iter.check78
  %vec.epilog.resume.val91 = phi i64 [ %n.vec81, %vec.epilog.iter.check94 ], [ 0, %vector.main.loop.iter.check78 ]
  br label %vec.epilog.vector.body99
 
vec.epilog.vector.body99:                         ; preds = %vec.epilog.vector.body99, %vec.epilog.ph93
  %index100 = phi i64 [ %vec.epilog.resume.val91, %vec.epilog.ph93 ], [ %index.next102, %vec.epilog.vector.body99 ]
  %47 = shl i64 %index100, 3
  %scevgep196 = getelementptr i8, ptr %lsr.iv194, i64 %47
  %wide.load101 = load <4 x double>, ptr %scevgep196, align 8
  %48 = fadd <4 x double> %wide.load101, splat (double 2.000000e+00)
  %scevgep199 = getelementptr i8, ptr %lsr.iv197, i64 %47
  store <4 x double> %48, ptr %scevgep199, align 8
  %index.next102 = add nuw i64 %index100, 4
  %49 = icmp eq i64 %n.vec98, %index.next102
  br i1 %49, label %vec.epilog.middle.block103, label %vec.epilog.vector.body99, !llvm.loop !16
 
vec.epilog.middle.block103:                       ; preds = %vec.epilog.vector.body99
  %50 = icmp eq i64 %arg.arr1.5.1.fr, %n.vec98
  br i1 %50, label %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us, label %for.body.1.endif.endif.endif.us.us.us.us.us.preheader
 
for.body.1.endif.endif.endif.us.us.us.us.us.preheader: ; preds = %vec.epilog.iter.check94, %vec.epilog.middle.block103, %iter.check76
  %loop.index.151.us.us.us.us.us.ph = phi i64 [ 0, %iter.check76 ], [ %n.vec81, %vec.epilog.iter.check94 ], [ %n.vec98, %vec.epilog.middle.block103 ]
  %51 = sub nsw i64 %arg.arr1.5.1.fr, %loop.index.151.us.us.us.us.us.ph
  %xtraiter112 = and i64 %51, 7
  %lcmp.mod113.not = icmp eq i64 %xtraiter112, 0
  br i1 %lcmp.mod113.not, label %for.body.1.endif.endif.endif.us.us.us.us.us.prol.loopexit, label %for.body.1.endif.endif.endif.us.us.us.us.us.prol.preheader
 
for.body.1.endif.endif.endif.us.us.us.us.us.prol.preheader: ; preds = %for.body.1.endif.endif.endif.us.us.us.us.us.preheader
  br label %for.body.1.endif.endif.endif.us.us.us.us.us.prol
 
for.body.1.endif.endif.endif.us.us.us.us.us.prol: ; preds = %for.body.1.endif.endif.endif.us.us.us.us.us.prol.preheader, %for.body.1.endif.endif.endif.us.us.us.us.us.prol
  %lsr.iv202 = phi i64 [ %xtraiter112, %for.body.1.endif.endif.endif.us.us.us.us.us.prol.preheader ], [ %lsr.iv.next203, %for.body.1.endif.endif.endif.us.us.us.us.us.prol ]
  %loop.index.151.us.us.us.us.us.prol = phi i64 [ %.232.us.us.us.us.us.prol, %for.body.1.endif.endif.endif.us.us.us.us.us.prol ], [ %loop.index.151.us.us.us.us.us.ph, %for.body.1.endif.endif.endif.us.us.us.us.us.prol.preheader ]
  %52 = shl i64 %loop.index.151.us.us.us.us.us.prol, 3
  %scevgep201 = getelementptr i8, ptr %lsr.iv194, i64 %52
  %.200.us.us.us.us.us.prol = load double, ptr %scevgep201, align 8
  %.6.i1.prol = fadd double %.200.us.us.us.us.us.prol, 2.000000e+00
  %53 = shl i64 %loop.index.151.us.us.us.us.us.prol, 3
  %scevgep200 = getelementptr i8, ptr %lsr.iv197, i64 %53
  store double %.6.i1.prol, ptr %scevgep200, align 8
  %.232.us.us.us.us.us.prol = add nuw i64 %loop.index.151.us.us.us.us.us.prol, 1
  %lsr.iv.next203 = add nsw i64 %lsr.iv202, -1
  %prol.iter114.cmp.not = icmp eq i64 %lsr.iv.next203, 0
  br i1 %prol.iter114.cmp.not, label %for.body.1.endif.endif.endif.us.us.us.us.us.prol.loopexit, label %for.body.1.endif.endif.endif.us.us.us.us.us.prol, !llvm.loop !17
 
for.body.1.endif.endif.endif.us.us.us.us.us.prol.loopexit: ; preds = %for.body.1.endif.endif.endif.us.us.us.us.us.prol, %for.body.1.endif.endif.endif.us.us.us.us.us.preheader
  %loop.index.151.us.us.us.us.us.unr = phi i64 [ %loop.index.151.us.us.us.us.us.ph, %for.body.1.endif.endif.endif.us.us.us.us.us.preheader ], [ %.232.us.us.us.us.us.prol, %for.body.1.endif.endif.endif.us.us.us.us.us.prol ]
  %54 = sub nsw i64 %loop.index.151.us.us.us.us.us.ph, %arg.arr1.5.1.fr
  %55 = icmp ugt i64 %54, -8
  br i1 %55, label %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us, label %for.body.1.endif.endif.endif.us.us.us.us.us.preheader119
 
for.body.1.endif.endif.endif.us.us.us.us.us.preheader119: ; preds = %for.body.1.endif.endif.endif.us.us.us.us.us.prol.loopexit
  br label %for.body.1.endif.endif.endif.us.us.us.us.us
 
for.body.1.endif.endif.endif.us.us.us.us.us:      ; preds = %for.body.1.endif.endif.endif.us.us.us.us.us.preheader119, %for.body.1.endif.endif.endif.us.us.us.us.us
  %loop.index.151.us.us.us.us.us = phi i64 [ %.232.us.us.us.us.us.7, %for.body.1.endif.endif.endif.us.us.us.us.us ], [ %loop.index.151.us.us.us.us.us.unr, %for.body.1.endif.endif.endif.us.us.us.us.us.preheader119 ]
  %56 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep221 = getelementptr i8, ptr %lsr.iv194, i64 %56
  %.200.us.us.us.us.us = load double, ptr %scevgep221, align 8
  %.6.i1 = fadd double %.200.us.us.us.us.us, 2.000000e+00
  %57 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep206 = getelementptr i8, ptr %lsr.iv197, i64 %57
  store double %.6.i1, ptr %scevgep206, align 8
  %scevgep222 = getelementptr i8, ptr %lsr.iv194, i64 %57
  %scevgep223 = getelementptr i8, ptr %scevgep222, i64 8
  %.200.us.us.us.us.us.1 = load double, ptr %scevgep223, align 8
  %.6.i1.1 = fadd double %.200.us.us.us.us.us.1, 2.000000e+00
  %58 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep209 = getelementptr i8, ptr %lsr.iv197, i64 %58
  %scevgep210 = getelementptr i8, ptr %scevgep209, i64 8
  store double %.6.i1.1, ptr %scevgep210, align 8
  %scevgep224 = getelementptr i8, ptr %lsr.iv194, i64 %58
  %scevgep225 = getelementptr i8, ptr %scevgep224, i64 16
  %.200.us.us.us.us.us.2 = load double, ptr %scevgep225, align 8
  %.6.i1.2 = fadd double %.200.us.us.us.us.us.2, 2.000000e+00
  %59 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep211 = getelementptr i8, ptr %lsr.iv197, i64 %59
  %scevgep212 = getelementptr i8, ptr %scevgep211, i64 16
  store double %.6.i1.2, ptr %scevgep212, align 8
  %scevgep226 = getelementptr i8, ptr %lsr.iv194, i64 %59
  %scevgep227 = getelementptr i8, ptr %scevgep226, i64 24
  %.200.us.us.us.us.us.3 = load double, ptr %scevgep227, align 8
  %.6.i1.3 = fadd double %.200.us.us.us.us.us.3, 2.000000e+00
  %60 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep213 = getelementptr i8, ptr %lsr.iv197, i64 %60
  %scevgep214 = getelementptr i8, ptr %scevgep213, i64 24
  store double %.6.i1.3, ptr %scevgep214, align 8
  %scevgep228 = getelementptr i8, ptr %lsr.iv194, i64 %60
  %scevgep229 = getelementptr i8, ptr %scevgep228, i64 32
  %.200.us.us.us.us.us.4 = load double, ptr %scevgep229, align 8
  %.6.i1.4 = fadd double %.200.us.us.us.us.us.4, 2.000000e+00
  %61 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep204 = getelementptr i8, ptr %lsr.iv197, i64 %61
  %scevgep205 = getelementptr i8, ptr %scevgep204, i64 32
  store double %.6.i1.4, ptr %scevgep205, align 8
  %scevgep230 = getelementptr i8, ptr %lsr.iv194, i64 %61
  %scevgep231 = getelementptr i8, ptr %scevgep230, i64 40
  %.200.us.us.us.us.us.5 = load double, ptr %scevgep231, align 8
  %.6.i1.5 = fadd double %.200.us.us.us.us.us.5, 2.000000e+00
  %62 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep217 = getelementptr i8, ptr %lsr.iv197, i64 %62
  %scevgep218 = getelementptr i8, ptr %scevgep217, i64 40
  store double %.6.i1.5, ptr %scevgep218, align 8
  %scevgep232 = getelementptr i8, ptr %lsr.iv194, i64 %62
  %scevgep233 = getelementptr i8, ptr %scevgep232, i64 48
  %.200.us.us.us.us.us.6 = load double, ptr %scevgep233, align 8
  %.6.i1.6 = fadd double %.200.us.us.us.us.us.6, 2.000000e+00
  %63 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep215 = getelementptr i8, ptr %lsr.iv197, i64 %63
  %scevgep216 = getelementptr i8, ptr %scevgep215, i64 48
  store double %.6.i1.6, ptr %scevgep216, align 8
  %scevgep219 = getelementptr i8, ptr %lsr.iv194, i64 %63
  %scevgep220 = getelementptr i8, ptr %scevgep219, i64 56
  %.200.us.us.us.us.us.7 = load double, ptr %scevgep220, align 8
  %.6.i1.7 = fadd double %.200.us.us.us.us.us.7, 2.000000e+00
  %64 = shl i64 %loop.index.151.us.us.us.us.us, 3
  %scevgep207 = getelementptr i8, ptr %lsr.iv197, i64 %64
  %scevgep208 = getelementptr i8, ptr %scevgep207, i64 56
  store double %.6.i1.7, ptr %scevgep208, align 8
  %.232.us.us.us.us.us.7 = add nuw nsw i64 %loop.index.151.us.us.us.us.us, 8
  %exitcond138.not.7 = icmp eq i64 %arg.arr1.5.1.fr, %.232.us.us.us.us.us.7
  br i1 %exitcond138.not.7, label %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us, label %for.body.1.endif.endif.endif.us.us.us.us.us, !llvm.loop !18
 
for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us: ; preds = %for.body.1.endif.endif.endif.us.us.us.us.us, %for.body.1.endif.endif.endif.us.us.us.us.us.prol.loopexit, %vec.epilog.middle.block103, %middle.block89
  %.234.us.us.us = add nuw nsw i64 %loop.index80.us.us.us, 1
  %scevgep176 = getelementptr i8, ptr %lsr.iv175, i64 %29
  %scevgep186 = getelementptr i8, ptr %lsr.iv185, i64 %29
  %scevgep195 = getelementptr i8, ptr %lsr.iv194, i64 %29
  %scevgep198 = getelementptr i8, ptr %lsr.iv197, i64 %29
  %exitcond139.not = icmp eq i64 %.234.us.us.us, %arg.arr1.5.0.fr
  br i1 %exitcond139.not, label %for.end, label %iter.check76
 
for.body.1.endif.endif.endif.us.us98.us:          ; preds = %for.body.1.endif.endif.endif.us.us98.us.preheader121, %for.body.1.endif.endif.endif.us.us98.us
  %lsr.iv236 = phi i64 [ %20, %for.body.1.endif.endif.endif.us.us98.us.preheader121 ], [ %lsr.iv.next237, %for.body.1.endif.endif.endif.us.us98.us ]
  %lsr.iv234 = phi i64 [ %18, %for.body.1.endif.endif.endif.us.us98.us.preheader121 ], [ %lsr.iv.next235, %for.body.1.endif.endif.endif.us.us98.us ]
  %scevgep238 = getelementptr i8, ptr %arg.arr1.4, i64 %lsr.iv236
  %scevgep239 = getelementptr i8, ptr %.6.i, i64 %lsr.iv236
  %.200.us.us96.us = load double, ptr %scevgep238, align 8
  %.6.i2 = fadd double %.200.us.us96.us, 2.000000e+00
  store double %.6.i2, ptr %scevgep239, align 8
  %scevgep240 = getelementptr i8, ptr %scevgep238, i64 %22
  %sunkaddr375 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr376 = getelementptr i8, ptr %scevgep238, i64 %sunkaddr375
  %.200.us.us96.us.1 = load double, ptr %sunkaddr376, align 8
  %.6.i2.1 = fadd double %.200.us.us96.us.1, 2.000000e+00
  %scevgep247 = getelementptr i8, ptr %scevgep239, i64 %22
  %sunkaddr377 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr378 = getelementptr i8, ptr %scevgep239, i64 %sunkaddr377
  store double %.6.i2.1, ptr %sunkaddr378, align 8
  %scevgep241 = getelementptr i8, ptr %scevgep240, i64 %22
  %sunkaddr379 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr380 = getelementptr i8, ptr %scevgep240, i64 %sunkaddr379
  %.200.us.us96.us.2 = load double, ptr %sunkaddr380, align 8
  %.6.i2.2 = fadd double %.200.us.us96.us.2, 2.000000e+00
  %scevgep248 = getelementptr i8, ptr %scevgep247, i64 %22
  %sunkaddr381 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr382 = getelementptr i8, ptr %scevgep247, i64 %sunkaddr381
  store double %.6.i2.2, ptr %sunkaddr382, align 8
  %scevgep242 = getelementptr i8, ptr %scevgep241, i64 %22
  %sunkaddr383 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr384 = getelementptr i8, ptr %scevgep241, i64 %sunkaddr383
  %.200.us.us96.us.3 = load double, ptr %sunkaddr384, align 8
  %.6.i2.3 = fadd double %.200.us.us96.us.3, 2.000000e+00
  %scevgep249 = getelementptr i8, ptr %scevgep248, i64 %22
  %sunkaddr385 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr386 = getelementptr i8, ptr %scevgep248, i64 %sunkaddr385
  store double %.6.i2.3, ptr %sunkaddr386, align 8
  %scevgep243 = getelementptr i8, ptr %scevgep242, i64 %22
  %sunkaddr387 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr388 = getelementptr i8, ptr %scevgep242, i64 %sunkaddr387
  %.200.us.us96.us.4 = load double, ptr %sunkaddr388, align 8
  %.6.i2.4 = fadd double %.200.us.us96.us.4, 2.000000e+00
  %scevgep250 = getelementptr i8, ptr %scevgep249, i64 %22
  %sunkaddr389 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr390 = getelementptr i8, ptr %scevgep249, i64 %sunkaddr389
  store double %.6.i2.4, ptr %sunkaddr390, align 8
  %scevgep244 = getelementptr i8, ptr %scevgep243, i64 %22
  %sunkaddr391 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr392 = getelementptr i8, ptr %scevgep243, i64 %sunkaddr391
  %.200.us.us96.us.5 = load double, ptr %sunkaddr392, align 8
  %.6.i2.5 = fadd double %.200.us.us96.us.5, 2.000000e+00
  %scevgep251 = getelementptr i8, ptr %scevgep250, i64 %22
  %sunkaddr393 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr394 = getelementptr i8, ptr %scevgep250, i64 %sunkaddr393
  store double %.6.i2.5, ptr %sunkaddr394, align 8
  %scevgep245 = getelementptr i8, ptr %scevgep244, i64 %22
  %sunkaddr395 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr396 = getelementptr i8, ptr %scevgep244, i64 %sunkaddr395
  %.200.us.us96.us.6 = load double, ptr %sunkaddr396, align 8
  %.6.i2.6 = fadd double %.200.us.us96.us.6, 2.000000e+00
  %scevgep252 = getelementptr i8, ptr %scevgep251, i64 %22
  %sunkaddr397 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr398 = getelementptr i8, ptr %scevgep251, i64 %sunkaddr397
  store double %.6.i2.6, ptr %sunkaddr398, align 8
  %sunkaddr303 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr304 = getelementptr i8, ptr %scevgep245, i64 %sunkaddr303
  %.200.us.us96.us.7 = load double, ptr %sunkaddr304, align 8
  %.6.i2.7 = fadd double %.200.us.us96.us.7, 2.000000e+00
  %sunkaddr305 = mul i64 %arg.arr1.5.1.fr, 8
  %sunkaddr306 = getelementptr i8, ptr %scevgep252, i64 %sunkaddr305
  store double %.6.i2.7, ptr %sunkaddr306, align 8
  %lsr.iv.next235 = add i64 %lsr.iv234, -8
  %lsr.iv.next237 = add i64 %lsr.iv236, %21
  %exitcond137.not.7 = icmp eq i64 %lsr.iv.next235, 0
  br i1 %exitcond137.not.7, label %for.end, label %for.body.1.endif.endif.endif.us.us98.us, !llvm.loop !19
 
for.cond.1.preheader.lr.ph.split.us.split:        ; preds = %for.cond.1.preheader.lr.ph.split.us
  %65 = icmp ugt i64 %arg.arr1.5.1.fr, 1
  br i1 %65, label %iter.check, label %for.body.1.endif.endif.endif.us86
 
iter.check:                                       ; preds = %for.cond.1.preheader.lr.ph.split.us.split
  %66 = ptrtoint ptr %.6.i to i64
  %67 = ptrtoint ptr %arg.arr1.4 to i64
  %min.iters.check = icmp ult i64 %arg.arr1.5.1.fr, 4
  %68 = sub i64 %66, %67
  %diff.check = icmp ult i64 %68, 128
  %or.cond108 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond108, label %for.body.1.endif.endif.endif.us58.us.us.preheader, label %vector.main.loop.iter.check
 
vector.main.loop.iter.check:                      ; preds = %iter.check
  %const280 = bitcast i64 9223372036854775792 to i64
  %min.iters.check28 = icmp ult i64 %arg.arr1.5.1.fr, 16
  br i1 %min.iters.check28, label %vec.epilog.ph, label %vector.ph
 
vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %arg.arr1.5.1.fr, %const280
  br label %vector.body
 
vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %sunkaddr307 = mul i64 %index, 8
  %sunkaddr308 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr307
  %wide.load = load <4 x double>, ptr %sunkaddr308, align 8
  %sunkaddr309 = mul i64 %index, 8
  %sunkaddr310 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr309
  %sunkaddr311 = getelementptr i8, ptr %sunkaddr310, i64 32
  %wide.load29 = load <4 x double>, ptr %sunkaddr311, align 8
  %sunkaddr312 = mul i64 %index, 8
  %sunkaddr313 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr312
  %sunkaddr314 = getelementptr i8, ptr %sunkaddr313, i64 64
  %wide.load30 = load <4 x double>, ptr %sunkaddr314, align 8
  %sunkaddr315 = mul i64 %index, 8
  %sunkaddr316 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr315
  %sunkaddr317 = getelementptr i8, ptr %sunkaddr316, i64 96
  %wide.load31 = load <4 x double>, ptr %sunkaddr317, align 8
  %69 = fadd <4 x double> %wide.load, splat (double 2.000000e+00)
  %70 = fadd <4 x double> %wide.load29, splat (double 2.000000e+00)
  %71 = fadd <4 x double> %wide.load30, splat (double 2.000000e+00)
  %72 = fadd <4 x double> %wide.load31, splat (double 2.000000e+00)
  %sunkaddr318 = mul i64 %index, 8
  %sunkaddr319 = getelementptr i8, ptr %.6.i, i64 %sunkaddr318
  store <4 x double> %69, ptr %sunkaddr319, align 8
  %sunkaddr320 = mul i64 %index, 8
  %sunkaddr321 = getelementptr i8, ptr %.6.i, i64 %sunkaddr320
  %sunkaddr322 = getelementptr i8, ptr %sunkaddr321, i64 32
  store <4 x double> %70, ptr %sunkaddr322, align 8
  %sunkaddr323 = mul i64 %index, 8
  %sunkaddr324 = getelementptr i8, ptr %.6.i, i64 %sunkaddr323
  %sunkaddr325 = getelementptr i8, ptr %sunkaddr324, i64 64
  store <4 x double> %71, ptr %sunkaddr325, align 8
  %sunkaddr326 = mul i64 %index, 8
  %sunkaddr327 = getelementptr i8, ptr %.6.i, i64 %sunkaddr326
  %sunkaddr328 = getelementptr i8, ptr %sunkaddr327, i64 96
  store <4 x double> %72, ptr %sunkaddr328, align 8
  %index.next = add nuw i64 %index, 16
  %73 = icmp eq i64 %n.vec, %index.next
  br i1 %73, label %middle.block, label %vector.body, !llvm.loop !20
 
middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %arg.arr1.5.1.fr, %n.vec
  br i1 %cmp.n, label %for.end, label %vec.epilog.iter.check
 
vec.epilog.iter.check:                            ; preds = %middle.block
  %n.vec.remaining = and i64 %arg.arr1.5.1.fr, 12
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %for.body.1.endif.endif.endif.us58.us.us.preheader, label %vec.epilog.ph
 
vec.epilog.ph:                                    ; preds = %vec.epilog.iter.check, %vector.main.loop.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %const_mat281 = add i64 %const280, 12
  %n.vec33 = and i64 %arg.arr1.5.1.fr, %const_mat281
  br label %vec.epilog.vector.body
 
vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index34 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next36, %vec.epilog.vector.body ]
  %74 = shl i64 %index34, 3
  %scevgep156 = getelementptr i8, ptr %arg.arr1.4, i64 %74
  %wide.load35 = load <4 x double>, ptr %scevgep156, align 8
  %75 = fadd <4 x double> %wide.load35, splat (double 2.000000e+00)
  %scevgep157 = getelementptr i8, ptr %.6.i, i64 %74
  store <4 x double> %75, ptr %scevgep157, align 8
  %index.next36 = add nuw i64 %index34, 4
  %76 = icmp eq i64 %n.vec33, %index.next36
  br i1 %76, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !21
 
vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n37 = icmp eq i64 %arg.arr1.5.1.fr, %n.vec33
  br i1 %cmp.n37, label %for.end, label %for.body.1.endif.endif.endif.us58.us.us.preheader
 
for.body.1.endif.endif.endif.us58.us.us.preheader: ; preds = %vec.epilog.iter.check, %vec.epilog.middle.block, %iter.check
  %loop.index.151.us56.us.us.ph = phi i64 [ 0, %iter.check ], [ %n.vec, %vec.epilog.iter.check ], [ %n.vec33, %vec.epilog.middle.block ]
  %77 = sub nsw i64 %arg.arr1.5.1.fr, %loop.index.151.us56.us.us.ph
  %xtraiter115 = and i64 %77, 7
  %lcmp.mod116.not = icmp eq i64 %xtraiter115, 0
  br i1 %lcmp.mod116.not, label %for.body.1.endif.endif.endif.us58.us.us.prol.loopexit, label %for.body.1.endif.endif.endif.us58.us.us.prol.preheader
 
for.body.1.endif.endif.endif.us58.us.us.prol.preheader: ; preds = %for.body.1.endif.endif.endif.us58.us.us.preheader
  br label %for.body.1.endif.endif.endif.us58.us.us.prol
 
for.body.1.endif.endif.endif.us58.us.us.prol:     ; preds = %for.body.1.endif.endif.endif.us58.us.us.prol.preheader, %for.body.1.endif.endif.endif.us58.us.us.prol
  %lsr.iv = phi i64 [ %xtraiter115, %for.body.1.endif.endif.endif.us58.us.us.prol.preheader ], [ %lsr.iv.next, %for.body.1.endif.endif.endif.us58.us.us.prol ]
  %loop.index.151.us56.us.us.prol = phi i64 [ %.232.us61.us.us.prol, %for.body.1.endif.endif.endif.us58.us.us.prol ], [ %loop.index.151.us56.us.us.ph, %for.body.1.endif.endif.endif.us58.us.us.prol.preheader ]
  %78 = shl i64 %loop.index.151.us56.us.us.prol, 3
  %scevgep155 = getelementptr i8, ptr %arg.arr1.4, i64 %78
  %.200.us65.us.us.prol = load double, ptr %scevgep155, align 8
  %.6.i3.prol = fadd double %.200.us65.us.us.prol, 2.000000e+00
  %79 = shl i64 %loop.index.151.us56.us.us.prol, 3
  %scevgep154 = getelementptr i8, ptr %.6.i, i64 %79
  store double %.6.i3.prol, ptr %scevgep154, align 8
  %.232.us61.us.us.prol = add nuw i64 %loop.index.151.us56.us.us.prol, 1
  %lsr.iv.next = add nsw i64 %lsr.iv, -1
  %prol.iter117.cmp.not = icmp eq i64 %lsr.iv.next, 0
  br i1 %prol.iter117.cmp.not, label %for.body.1.endif.endif.endif.us58.us.us.prol.loopexit, label %for.body.1.endif.endif.endif.us58.us.us.prol, !llvm.loop !22
 
for.body.1.endif.endif.endif.us58.us.us.prol.loopexit: ; preds = %for.body.1.endif.endif.endif.us58.us.us.prol, %for.body.1.endif.endif.endif.us58.us.us.preheader
  %loop.index.151.us56.us.us.unr = phi i64 [ %loop.index.151.us56.us.us.ph, %for.body.1.endif.endif.endif.us58.us.us.preheader ], [ %.232.us61.us.us.prol, %for.body.1.endif.endif.endif.us58.us.us.prol ]
  %80 = sub nsw i64 %loop.index.151.us56.us.us.ph, %arg.arr1.5.1.fr
  %81 = icmp ugt i64 %80, -8
  br i1 %81, label %for.end, label %for.body.1.endif.endif.endif.us58.us.us.preheader118
 
for.body.1.endif.endif.endif.us58.us.us.preheader118: ; preds = %for.body.1.endif.endif.endif.us58.us.us.prol.loopexit
  br label %for.body.1.endif.endif.endif.us58.us.us
 
for.body.1.endif.endif.endif.us58.us.us:          ; preds = %for.body.1.endif.endif.endif.us58.us.us.preheader118, %for.body.1.endif.endif.endif.us58.us.us
  %loop.index.151.us56.us.us = phi i64 [ %.232.us61.us.us.7, %for.body.1.endif.endif.endif.us58.us.us ], [ %loop.index.151.us56.us.us.unr, %for.body.1.endif.endif.endif.us58.us.us.preheader118 ]
  %sunkaddr329 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr330 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr329
  %.200.us65.us.us = load double, ptr %sunkaddr330, align 8
  %.6.i3 = fadd double %.200.us65.us.us, 2.000000e+00
  %sunkaddr331 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr332 = getelementptr i8, ptr %.6.i, i64 %sunkaddr331
  store double %.6.i3, ptr %sunkaddr332, align 8
  %sunkaddr333 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr334 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr333
  %sunkaddr335 = getelementptr i8, ptr %sunkaddr334, i64 8
  %.200.us65.us.us.1 = load double, ptr %sunkaddr335, align 8
  %.6.i3.1 = fadd double %.200.us65.us.us.1, 2.000000e+00
  %sunkaddr336 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr337 = getelementptr i8, ptr %.6.i, i64 %sunkaddr336
  %sunkaddr338 = getelementptr i8, ptr %sunkaddr337, i64 8
  store double %.6.i3.1, ptr %sunkaddr338, align 8
  %sunkaddr339 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr340 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr339
  %sunkaddr341 = getelementptr i8, ptr %sunkaddr340, i64 16
  %.200.us65.us.us.2 = load double, ptr %sunkaddr341, align 8
  %.6.i3.2 = fadd double %.200.us65.us.us.2, 2.000000e+00
  %sunkaddr342 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr343 = getelementptr i8, ptr %.6.i, i64 %sunkaddr342
  %sunkaddr344 = getelementptr i8, ptr %sunkaddr343, i64 16
  store double %.6.i3.2, ptr %sunkaddr344, align 8
  %sunkaddr345 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr346 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr345
  %sunkaddr347 = getelementptr i8, ptr %sunkaddr346, i64 24
  %.200.us65.us.us.3 = load double, ptr %sunkaddr347, align 8
  %.6.i3.3 = fadd double %.200.us65.us.us.3, 2.000000e+00
  %sunkaddr348 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr349 = getelementptr i8, ptr %.6.i, i64 %sunkaddr348
  %sunkaddr350 = getelementptr i8, ptr %sunkaddr349, i64 24
  store double %.6.i3.3, ptr %sunkaddr350, align 8
  %sunkaddr351 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr352 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr351
  %sunkaddr353 = getelementptr i8, ptr %sunkaddr352, i64 32
  %.200.us65.us.us.4 = load double, ptr %sunkaddr353, align 8
  %.6.i3.4 = fadd double %.200.us65.us.us.4, 2.000000e+00
  %sunkaddr354 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr355 = getelementptr i8, ptr %.6.i, i64 %sunkaddr354
  %sunkaddr356 = getelementptr i8, ptr %sunkaddr355, i64 32
  store double %.6.i3.4, ptr %sunkaddr356, align 8
  %sunkaddr357 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr358 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr357
  %sunkaddr359 = getelementptr i8, ptr %sunkaddr358, i64 40
  %.200.us65.us.us.5 = load double, ptr %sunkaddr359, align 8
  %.6.i3.5 = fadd double %.200.us65.us.us.5, 2.000000e+00
  %sunkaddr360 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr361 = getelementptr i8, ptr %.6.i, i64 %sunkaddr360
  %sunkaddr362 = getelementptr i8, ptr %sunkaddr361, i64 40
  store double %.6.i3.5, ptr %sunkaddr362, align 8
  %sunkaddr363 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr364 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr363
  %sunkaddr365 = getelementptr i8, ptr %sunkaddr364, i64 48
  %.200.us65.us.us.6 = load double, ptr %sunkaddr365, align 8
  %.6.i3.6 = fadd double %.200.us65.us.us.6, 2.000000e+00
  %sunkaddr366 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr367 = getelementptr i8, ptr %.6.i, i64 %sunkaddr366
  %sunkaddr368 = getelementptr i8, ptr %sunkaddr367, i64 48
  store double %.6.i3.6, ptr %sunkaddr368, align 8
  %sunkaddr369 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr370 = getelementptr i8, ptr %arg.arr1.4, i64 %sunkaddr369
  %sunkaddr371 = getelementptr i8, ptr %sunkaddr370, i64 56
  %.200.us65.us.us.7 = load double, ptr %sunkaddr371, align 8
  %.6.i3.7 = fadd double %.200.us65.us.us.7, 2.000000e+00
  %sunkaddr372 = mul i64 %loop.index.151.us56.us.us, 8
  %sunkaddr373 = getelementptr i8, ptr %.6.i, i64 %sunkaddr372
  %sunkaddr374 = getelementptr i8, ptr %sunkaddr373, i64 56
  store double %.6.i3.7, ptr %sunkaddr374, align 8
  %.232.us61.us.us.7 = add nuw nsw i64 %loop.index.151.us56.us.us, 8
  %exitcond134.not.7 = icmp eq i64 %arg.arr1.5.1.fr, %.232.us61.us.us.7
  br i1 %exitcond134.not.7, label %for.end, label %for.body.1.endif.endif.endif.us58.us.us, !llvm.loop !23
 
for.body.1.endif.endif.endif.us86:                ; preds = %for.cond.1.preheader.lr.ph.split.us.split
  %.200.us84 = load double, ptr %arg.arr1.4, align 8
  %.6.i4 = fadd double %.200.us84, 2.000000e+00
  store double %.6.i4, ptr %.6.i, align 8
  br label %for.end
 
B0.endif.endif.endif.if.if:                       ; preds = %B0.endif.endif.endif
  store ptr @.const.picklebuf.92013159063168, ptr %excinfo, align 8
  br label %common.ret
 
for.end:                                          ; preds = %for.body.1.endif.endif.endif.us.us98.us, %for.cond.1.for.end.1_crit_edge.split.us.split.us.us.us.us, %for.body.1.endif.endif.endif.us58.us.us, %for.body.1.endif.endif.endif.us.us98.us.prol.loopexit, %for.body.1.endif.endif.endif.us58.us.us.prol.loopexit, %middle.block55, %vec.epilog.middle.block69, %vec.epilog.middle.block, %middle.block, %for.body.1.endif.endif.endif.us86, %for.cond.1.preheader.lr.ph, %B0.endif.endif.endif.endif
  tail call void @NRT_decref(ptr %arg.arr1.0)
  store ptr %.7.i.i, ptr %retptr, align 8
  %retptr.repack30 = getelementptr inbounds nuw i8, ptr %retptr, i64 8
  store ptr null, ptr %retptr.repack30, align 8
  %retptr.repack32 = getelementptr inbounds nuw i8, ptr %retptr, i64 16
  store i64 %.94, ptr %retptr.repack32, align 8
  %retptr.repack34 = getelementptr inbounds nuw i8, ptr %retptr, i64 24
  store i64 8, ptr %retptr.repack34, align 8
  %retptr.repack36 = getelementptr inbounds nuw i8, ptr %retptr, i64 32
  store ptr %.6.i, ptr %retptr.repack36, align 8
  %retptr.repack38 = getelementptr inbounds nuw i8, ptr %retptr, i64 40
  store i64 %arg.arr1.5.0.fr, ptr %retptr.repack38, align 8
  %retptr.repack38.repack42 = getelementptr inbounds nuw i8, ptr %retptr, i64 48
  store i64 %arg.arr1.5.1.fr, ptr %retptr.repack38.repack42, align 8
  %retptr.repack40 = getelementptr inbounds nuw i8, ptr %retptr, i64 56
  store i64 %.97, ptr %retptr.repack40, align 8
  %retptr.repack40.repack44 = getelementptr inbounds nuw i8, ptr %retptr, i64 64
  store i64 8, ptr %retptr.repack40.repack44, align 8
  br label %common.ret
}
 
; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.smul.with.overflow.i64(i64, i64) #0
 
define ptr @_ZN7cpython8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE(ptr readnone captures(none) %py_closure, ptr %py_args, ptr readnone captures(none) %py_kws) local_unnamed_addr {
entry:
  %.5 = alloca ptr, align 8
  %.6 = call i32 (ptr, ptr, i64, i64, ...) @PyArg_UnpackTuple(ptr %py_args, ptr nonnull @.const.f, i64 1, i64 1, ptr nonnull %.5)
  %.7 = icmp eq i32 %.6, 0
  %.21 = alloca { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] }, align 8
  %.45 = alloca { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] }, align 8
  %excinfo = alloca ptr, align 8
  store ptr null, ptr %excinfo, align 8
  %.112 = alloca { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] }, align 8
  br i1 %.7, label %common.ret, label %entry.endif, !prof !0
 
common.ret:                                       ; preds = %entry.endif.endif.endif.endif.endif.if.endif.if, %entry.endif.endif.endif.endif.endif.if.if.if, %entry.endif.endif.endif.endif.endif.if.endif, %entry.endif.endif.endif.endif.if.endif.endif, %entry.endif.endif.if, %entry.endif.if, %entry
  %common.ret.op = phi ptr [ null, %entry.endif.if ], [ %.116, %entry.endif.endif.endif.endif.if.endif.endif ], [ null, %entry.endif.endif.endif.endif.endif.if.if.if ], [ null, %entry ], [ null, %entry.endif.endif.if ], [ null, %entry.endif.endif.endif.endif.endif.if.endif ], [ null, %entry.endif.endif.endif.endif.endif.if.endif.if ]
  ret ptr %common.ret.op
 
entry.endif:                                      ; preds = %entry
  %.11 = load ptr, ptr @_ZN08NumbaEnv8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE, align 8
  %.16 = icmp eq ptr %.11, null
  br i1 %.16, label %entry.endif.if, label %entry.endif.endif, !prof !0
 
entry.endif.if:                                   ; preds = %entry.endif
  call void @PyErr_SetString(ptr nonnull @PyExc_RuntimeError, ptr nonnull @".const.missing Environment: _ZN08NumbaEnv8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE")
  br label %common.ret
 
entry.endif.endif:                                ; preds = %entry.endif
  %.20 = load ptr, ptr %.5, align 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %.21, i8 0, i64 72, i1 false)
  %.25 = call i32 @NRT_adapt_ndarray_from_python(ptr %.20, ptr nonnull %.21)
  %sunkaddr = getelementptr inbounds i8, ptr %.21, i64 24
  %.29 = load i64, ptr %sunkaddr, align 8
  %.30 = icmp ne i64 %.29, 8
  %.31 = icmp ne i32 %.25, 0
  %.32 = or i1 %.31, %.30
  br i1 %.32, label %entry.endif.endif.if, label %entry.endif.endif.endif.endif, !prof !0
 
entry.endif.endif.if:                             ; preds = %entry.endif.endif
  call void @PyErr_SetString(ptr nonnull @PyExc_TypeError, ptr nonnull @".const.can't unbox array from PyObject into native value.  The object maybe of a different type")
  br label %common.ret
 
entry.endif.endif.endif.endif:                    ; preds = %entry.endif.endif
  %.36.fca.0.load = load ptr, ptr %.21, align 8
  %sunkaddr1 = getelementptr inbounds i8, ptr %.21, i64 32
  %.36.fca.4.load = load ptr, ptr %sunkaddr1, align 8
  %sunkaddr2 = getelementptr inbounds i8, ptr %.21, i64 40
  %.36.fca.5.0.load = load i64, ptr %sunkaddr2, align 8
  %sunkaddr3 = getelementptr inbounds i8, ptr %.21, i64 48
  %.36.fca.5.1.load = load i64, ptr %sunkaddr3, align 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %.45, i8 0, i64 72, i1 false)
  %.53 = call i32 @_ZN8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE(ptr nonnull %.45, ptr nonnull %excinfo, ptr %.36.fca.0.load, ptr poison, i64 poison, i64 poison, ptr %.36.fca.4.load, i64 %.36.fca.5.0.load, i64 %.36.fca.5.1.load, i64 poison, i64 poison) #3
  %.54 = load ptr, ptr %excinfo, align 8
  %.63.fca.0.load = load ptr, ptr %.45, align 8
  %sunkaddr4 = getelementptr inbounds i8, ptr %.45, i64 8
  %.63.fca.1.load = load ptr, ptr %sunkaddr4, align 8
  %sunkaddr5 = getelementptr inbounds i8, ptr %.45, i64 16
  %.63.fca.2.load = load i64, ptr %sunkaddr5, align 8
  %sunkaddr6 = getelementptr inbounds i8, ptr %.45, i64 24
  %.63.fca.3.load = load i64, ptr %sunkaddr6, align 8
  %sunkaddr7 = getelementptr inbounds i8, ptr %.45, i64 32
  %.63.fca.4.load = load ptr, ptr %sunkaddr7, align 8
  %sunkaddr8 = getelementptr inbounds i8, ptr %.45, i64 40
  %.63.fca.5.0.load = load i64, ptr %sunkaddr8, align 8
  %sunkaddr9 = getelementptr inbounds i8, ptr %.45, i64 48
  %.63.fca.5.1.load = load i64, ptr %sunkaddr9, align 8
  %sunkaddr10 = getelementptr inbounds i8, ptr %.45, i64 56
  %.63.fca.6.0.load = load i64, ptr %sunkaddr10, align 8
  %sunkaddr11 = getelementptr inbounds i8, ptr %.45, i64 64
  %.63.fca.6.1.load = load i64, ptr %sunkaddr11, align 8
  call void @NRT_decref(ptr %.36.fca.0.load)
  %cond = icmp eq i32 %.53, 0
  br i1 %cond, label %entry.endif.endif.endif.endif.if.endif, label %entry.endif.endif.endif.endif.endif.if
 
entry.endif.endif.endif.endif.if.endif:           ; preds = %entry.endif.endif.endif.endif
  %sunkaddr12 = getelementptr i8, ptr %.11, i64 24
  %.93 = load ptr, ptr %sunkaddr12, align 8
  %.97.not = icmp eq ptr %.93, null
  br i1 %.97.not, label %entry.endif.endif.endif.endif.if.endif.else, label %entry.endif.endif.endif.endif.if.endif.if
 
entry.endif.endif.endif.endif.if.endif.if:        ; preds = %entry.endif.endif.endif.endif.if.endif
  %.99 = call ptr @PyList_GetItem(ptr nonnull %.93, i64 0)
  br label %entry.endif.endif.endif.endif.if.endif.endif
 
entry.endif.endif.endif.endif.if.endif.else:      ; preds = %entry.endif.endif.endif.endif.if.endif
  call void @PyErr_SetString(ptr nonnull @PyExc_RuntimeError, ptr nonnull @".const.`env.consts` is NULL in `read_const`")
  br label %entry.endif.endif.endif.endif.if.endif.endif
 
entry.endif.endif.endif.endif.if.endif.endif:     ; preds = %entry.endif.endif.endif.endif.if.endif.else, %entry.endif.endif.endif.endif.if.endif.if
  %.94.0 = phi ptr [ %.99, %entry.endif.endif.endif.endif.if.endif.if ], [ null, %entry.endif.endif.endif.endif.if.endif.else ]
  %.111 = call ptr @numba_unpickle(ptr nonnull @.const.pickledata.93842500064544, i32 32, ptr nonnull @.const.pickledata.93842500064544.sha1)
  store ptr %.63.fca.0.load, ptr %.112, align 8
  %sunkaddr13 = getelementptr inbounds i8, ptr %.112, i64 8
  store ptr %.63.fca.1.load, ptr %sunkaddr13, align 8
  %sunkaddr14 = getelementptr inbounds i8, ptr %.112, i64 16
  store i64 %.63.fca.2.load, ptr %sunkaddr14, align 8
  %sunkaddr15 = getelementptr inbounds i8, ptr %.112, i64 24
  store i64 %.63.fca.3.load, ptr %sunkaddr15, align 8
  %sunkaddr16 = getelementptr inbounds i8, ptr %.112, i64 32
  store ptr %.63.fca.4.load, ptr %sunkaddr16, align 8
  %sunkaddr17 = getelementptr inbounds i8, ptr %.112, i64 40
  store i64 %.63.fca.5.0.load, ptr %sunkaddr17, align 8
  %sunkaddr18 = getelementptr inbounds i8, ptr %.112, i64 48
  store i64 %.63.fca.5.1.load, ptr %sunkaddr18, align 8
  %sunkaddr19 = getelementptr inbounds i8, ptr %.112, i64 56
  store i64 %.63.fca.6.0.load, ptr %sunkaddr19, align 8
  %sunkaddr20 = getelementptr inbounds i8, ptr %.112, i64 64
  store i64 %.63.fca.6.1.load, ptr %sunkaddr20, align 8
  %.116 = call ptr @NRT_adapt_ndarray_to_python_acqref(ptr nonnull %.112, ptr %.111, i32 2, i32 1, ptr %.94.0)
  call void @NRT_decref(ptr %.63.fca.0.load)
  br label %common.ret
 
entry.endif.endif.endif.endif.endif.if:           ; preds = %entry.endif.endif.endif.endif
  call void @PyErr_Clear()
  %.126 = load { ptr, i32, ptr, ptr, i32 }, ptr %.54, align 8
  %.127 = extractvalue { ptr, i32, ptr, ptr, i32 } %.126, 4
  %.128 = icmp sgt i32 %.127, 0
  %.131 = extractvalue { ptr, i32, ptr, ptr, i32 } %.126, 0
  %.133 = extractvalue { ptr, i32, ptr, ptr, i32 } %.126, 1
  br i1 %.128, label %entry.endif.endif.endif.endif.endif.if.if, label %entry.endif.endif.endif.endif.endif.if.else
 
entry.endif.endif.endif.endif.endif.if.if:        ; preds = %entry.endif.endif.endif.endif.endif.if
  %.134 = sext i32 %.133 to i64
  %.135 = call ptr @PyBytes_FromStringAndSize(ptr %.131, i64 %.134)
  %.136 = load { ptr, i32, ptr, ptr, i32 }, ptr %.54, align 8
  %.137 = extractvalue { ptr, i32, ptr, ptr, i32 } %.136, 2
  %.139 = extractvalue { ptr, i32, ptr, ptr, i32 } %.136, 3
  %.141 = call ptr %.139(ptr %.137)
  %.142 = icmp eq ptr %.141, null
  br i1 %.142, label %entry.endif.endif.endif.endif.endif.if.if.if, label %entry.endif.endif.endif.endif.endif.if.if.endif, !prof !0
 
entry.endif.endif.endif.endif.endif.if.else:      ; preds = %entry.endif.endif.endif.endif.endif.if
  %.155 = extractvalue { ptr, i32, ptr, ptr, i32 } %.126, 2
  %.156 = call ptr @numba_unpickle(ptr %.131, i32 %.133, ptr %.155)
  br label %entry.endif.endif.endif.endif.endif.if.endif
 
entry.endif.endif.endif.endif.endif.if.endif:     ; preds = %entry.endif.endif.endif.endif.endif.if.if.endif, %entry.endif.endif.endif.endif.endif.if.else
  %.158 = phi ptr [ %.146, %entry.endif.endif.endif.endif.endif.if.if.endif ], [ %.156, %entry.endif.endif.endif.endif.endif.if.else ]
  %.159.not = icmp eq ptr %.158, null
  br i1 %.159.not, label %common.ret, label %entry.endif.endif.endif.endif.endif.if.endif.if, !prof !0
 
entry.endif.endif.endif.endif.endif.if.if.if:     ; preds = %entry.endif.endif.endif.endif.endif.if.if
  call void @PyErr_SetString(ptr nonnull @PyExc_RuntimeError, ptr nonnull @".const.Error creating Python tuple from runtime exception arguments")
  br label %common.ret
 
entry.endif.endif.endif.endif.endif.if.if.endif:  ; preds = %entry.endif.endif.endif.endif.endif.if.if
  %.146 = call ptr @numba_runtime_build_excinfo_struct(ptr %.135, ptr nonnull %.141)
  call void @NRT_Free(ptr nonnull %.54)
  br label %entry.endif.endif.endif.endif.endif.if.endif
 
entry.endif.endif.endif.endif.endif.if.endif.if:  ; preds = %entry.endif.endif.endif.endif.endif.if.endif
  call void @numba_do_raise(ptr nonnull %.158)
  br label %common.ret
}
 
declare i32 @PyArg_UnpackTuple(ptr, ptr, i64, i64, ...) local_unnamed_addr
 
declare void @PyErr_SetString(ptr, ptr) local_unnamed_addr
 
; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #1
 
declare i32 @NRT_adapt_ndarray_from_python(ptr captures(none), ptr captures(none)) local_unnamed_addr
 
declare ptr @PyList_GetItem(ptr, i64) local_unnamed_addr
 
declare ptr @numba_unpickle(ptr, i32, ptr) local_unnamed_addr
 
declare ptr @NRT_adapt_ndarray_to_python_acqref(ptr captures(none), ptr, i32, i32, ptr) local_unnamed_addr
 
declare void @PyErr_Clear() local_unnamed_addr
 
declare ptr @PyBytes_FromStringAndSize(ptr, i64) local_unnamed_addr
 
declare ptr @numba_runtime_build_excinfo_struct(ptr, ptr) local_unnamed_addr
 
declare void @NRT_Free(ptr) local_unnamed_addr
 
declare void @numba_do_raise(ptr) local_unnamed_addr
 
define { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } @cfunc._ZN8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE({ ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %.1) local_unnamed_addr {
entry:
  %.3 = alloca { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] }, align 8
  %.fca.1.gep = getelementptr inbounds nuw i8, ptr %.3, i64 8
  %.fca.2.gep = getelementptr inbounds nuw i8, ptr %.3, i64 16
  %.fca.3.gep = getelementptr inbounds nuw i8, ptr %.3, i64 24
  %.fca.4.gep = getelementptr inbounds nuw i8, ptr %.3, i64 32
  %.fca.5.0.gep = getelementptr inbounds nuw i8, ptr %.3, i64 40
  %.fca.5.1.gep = getelementptr inbounds nuw i8, ptr %.3, i64 48
  %.fca.6.0.gep = getelementptr inbounds nuw i8, ptr %.3, i64 56
  %.fca.6.1.gep = getelementptr inbounds nuw i8, ptr %.3, i64 64
  %excinfo = alloca ptr, align 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %.3, i8 0, i64 72, i1 false)
  store ptr null, ptr %excinfo, align 8
  %extracted.meminfo = extractvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %.1, 0
  %extracted.data = extractvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %.1, 4
  %extracted.shape = extractvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %.1, 5
  %.7 = extractvalue [2 x i64] %extracted.shape, 0
  %.8 = extractvalue [2 x i64] %extracted.shape, 1
  %.11 = call i32 @_ZN8__main__1fB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIdLi2E1C7mutable7alignedE(ptr nonnull %.3, ptr nonnull %excinfo, ptr %extracted.meminfo, ptr poison, i64 poison, i64 poison, ptr %extracted.data, i64 %.7, i64 %.8, i64 poison, i64 poison) #3
  %.12 = load ptr, ptr %excinfo, align 8
  %.21.fca.0.load = load ptr, ptr %.3, align 8
  %.21.fca.1.load = load ptr, ptr %.fca.1.gep, align 8
  %.21.fca.2.load = load i64, ptr %.fca.2.gep, align 8
  %.21.fca.3.load = load i64, ptr %.fca.3.gep, align 8
  %.21.fca.4.load = load ptr, ptr %.fca.4.gep, align 8
  %.21.fca.5.0.load = load i64, ptr %.fca.5.0.gep, align 8
  %.21.fca.5.1.load = load i64, ptr %.fca.5.1.gep, align 8
  %.21.fca.6.0.load = load i64, ptr %.fca.6.0.gep, align 8
  %.21.fca.6.1.load = load i64, ptr %.fca.6.1.gep, align 8
  %inserted.meminfo = insertvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } undef, ptr %.21.fca.0.load, 0
  %inserted.parent = insertvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %inserted.meminfo, ptr %.21.fca.1.load, 1
  %inserted.nitems = insertvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %inserted.parent, i64 %.21.fca.2.load, 2
  %inserted.itemsize = insertvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %inserted.nitems, i64 %.21.fca.3.load, 3
  %inserted.data = insertvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %inserted.itemsize, ptr %.21.fca.4.load, 4
  %.30 = insertvalue [2 x i64] undef, i64 %.21.fca.5.0.load, 0
  %.32 = insertvalue [2 x i64] %.30, i64 %.21.fca.5.1.load, 1
  %inserted.shape = insertvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %inserted.data, [2 x i64] %.32, 5
  %.34 = insertvalue [2 x i64] undef, i64 %.21.fca.6.0.load, 0
  %.36 = insertvalue [2 x i64] %.34, i64 %.21.fca.6.1.load, 1
  %inserted.strides = insertvalue { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %inserted.shape, [2 x i64] %.36, 6
  %.38 = alloca i32, align 4
  store i32 0, ptr %.38, align 4
  %cond = icmp eq i32 %.11, 0
  br i1 %cond, label %common.ret, label %entry.if.if
 
common.ret:                                       ; preds = %entry, %entry.if.if.if.if, %.41
  %common.ret.op = phi { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } [ zeroinitializer, %entry.if.if.if.if ], [ %inserted.strides, %.41 ], [ %inserted.strides, %entry ]
  ret { ptr, ptr, i64, i64, ptr, [2 x i64], [2 x i64] } %common.ret.op
 
.41:                                              ; preds = %entry.if.if.endif.if, %entry.if.if.endif
  %.89 = call ptr @PyUnicode_FromString(ptr nonnull @".const.<numba.core.cpu.CPUContext object at 0x53af7c21d190>")
  call void @PyErr_WriteUnraisable(ptr %.89)
  call void @Py_DecRef(ptr %.89)
  call void @numba_gil_release(ptr nonnull %.38)
  br label %common.ret
 
entry.if.if:                                      ; preds = %entry
  call void @numba_gil_ensure(ptr nonnull %.38)
  call void @PyErr_Clear()
  %.44 = load { ptr, i32, ptr, ptr, i32 }, ptr %.12, align 8
  %.45 = extractvalue { ptr, i32, ptr, ptr, i32 } %.44, 4
  %.46 = icmp sgt i32 %.45, 0
  %.49 = extractvalue { ptr, i32, ptr, ptr, i32 } %.44, 0
  %.51 = extractvalue { ptr, i32, ptr, ptr, i32 } %.44, 1
  br i1 %.46, label %entry.if.if.if, label %entry.if.if.else
 
entry.if.if.if:                                   ; preds = %entry.if.if
  %.52 = sext i32 %.51 to i64
  %.53 = call ptr @PyBytes_FromStringAndSize(ptr %.49, i64 %.52)
  %.54 = load { ptr, i32, ptr, ptr, i32 }, ptr %.12, align 8
  %.55 = extractvalue { ptr, i32, ptr, ptr, i32 } %.54, 2
  %.57 = extractvalue { ptr, i32, ptr, ptr, i32 } %.54, 3
  %.59 = call ptr %.57(ptr %.55)
  %.60 = icmp eq ptr %.59, null
  br i1 %.60, label %entry.if.if.if.if, label %entry.if.if.if.endif, !prof !0
 
entry.if.if.else:                                 ; preds = %entry.if.if
  %.73 = extractvalue { ptr, i32, ptr, ptr, i32 } %.44, 2
  %.74 = call ptr @numba_unpickle(ptr %.49, i32 %.51, ptr %.73)
  br label %entry.if.if.endif
 
entry.if.if.endif:                                ; preds = %entry.if.if.if.endif, %entry.if.if.else
  %.76 = phi ptr [ %.64, %entry.if.if.if.endif ], [ %.74, %entry.if.if.else ]
  %.77.not = icmp eq ptr %.76, null
  br i1 %.77.not, label %.41, label %entry.if.if.endif.if, !prof !0
 
entry.if.if.if.if:                                ; preds = %entry.if.if.if
  call void @PyErr_SetString(ptr nonnull @PyExc_RuntimeError, ptr nonnull @".const.Error creating Python tuple from runtime exception arguments.1")
  br label %common.ret
 
entry.if.if.if.endif:                             ; preds = %entry.if.if.if
  %.64 = call ptr @numba_runtime_build_excinfo_struct(ptr %.53, ptr nonnull %.59)
  call void @NRT_Free(ptr nonnull %.12)
  br label %entry.if.if.endif
 
entry.if.if.endif.if:                             ; preds = %entry.if.if.endif
  call void @numba_do_raise(ptr nonnull %.76)
  br label %.41
}
 
declare void @numba_gil_ensure(ptr) local_unnamed_addr
 
declare ptr @PyUnicode_FromString(ptr) local_unnamed_addr
 
declare void @PyErr_WriteUnraisable(ptr) local_unnamed_addr
 
declare void @Py_DecRef(ptr) local_unnamed_addr
 
declare void @numba_gil_release(ptr) local_unnamed_addr
 
declare noalias ptr @NRT_MemInfo_alloc_aligned(i64, i32) local_unnamed_addr
 
; Function Attrs: mustprogress nofree noinline norecurse nounwind willreturn memory(argmem: readwrite)
define linkonce_odr void @NRT_incref(ptr %.1) local_unnamed_addr #2 {
.3:
  %.4 = icmp eq ptr %.1, null
  br i1 %.4, label %common.ret, label %.3.endif, !prof !0
 
common.ret:                                       ; preds = %.3.endif, %.3
  ret void
 
.3.endif:                                         ; preds = %.3
  %.4.i = atomicrmw add ptr %.1, i64 1 monotonic, align 8
  br label %common.ret
}
 
; Function Attrs: noinline
define linkonce_odr void @NRT_decref(ptr %.1) local_unnamed_addr #3 {
.3:
  %.4 = icmp eq ptr %.1, null
  br i1 %.4, label %common.ret1, label %.3.endif, !prof !0
 
common.ret1:                                      ; preds = %.3, %.3.endif
  ret void
 
.3.endif:                                         ; preds = %.3
  fence release
  %0 = tail call i8 @llvm.x86.atomic.sub.cc.i64(ptr nonnull %.1, i64 1, i32 4)
  %1 = trunc i8 %0 to i1
  br i1 %1, label %.3.endif.if, label %common.ret1, !prof !0
 
.3.endif.if:                                      ; preds = %.3.endif
  fence acquire
  tail call void @NRT_MemInfo_call_dtor(ptr nonnull %.1)
  ret void
}
 
; Function Attrs: nounwind
declare i8 @llvm.x86.atomic.sub.cc.i64(ptr, i64, i32 immarg) #4
 
declare void @NRT_MemInfo_call_dtor(ptr) local_unnamed_addr
 
attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { mustprogress nofree noinline norecurse nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { noinline }
attributes #4 = { nounwind }
 
!0 = !{!"branch_weights", i32 1, i32 99}
!1 = !{i1 true}
!2 = !{!3, !5, !6, !8}
!3 = distinct !{!3, !4, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v5B42c8tJTIeFIjxB2IKSgI4CrvQClcaMQ5hEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %retptr"}
!4 = distinct !{!4, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v5B42c8tJTIeFIjxB2IKSgI4CrvQClcaMQ5hEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj"}
!5 = distinct !{!5, !4, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v5B42c8tJTIeFIjxB2IKSgI4CrvQClcaMQ5hEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %excinfo"}
!6 = distinct !{!6, !7, !"_ZN5numba2np8arrayobj15_call_allocatorB2v4B42c8tJTC_2fWQA93W1AaAIYBPIqRBFCjDSZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %retptr"}
!7 = distinct !{!7, !"_ZN5numba2np8arrayobj15_call_allocatorB2v4B42c8tJTC_2fWQA93W1AaAIYBPIqRBFCjDSZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj"}
!8 = distinct !{!8, !7, !"_ZN5numba2np8arrayobj15_call_allocatorB2v4B42c8tJTC_2fWQA93W1AaAIYBPIqRBFCjDSZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %excinfo"}
!9 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = !{!"llvm.loop.unroll.runtime.disable"}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.unroll.disable"}
!14 = distinct !{!14, !10, !11}
!15 = distinct !{!15, !10, !11}
!16 = distinct !{!16, !10, !11}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !10}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10, !11}
!21 = distinct !{!21, !10, !11}
!22 = distinct !{!22, !13}
!23 = distinct !{!23, !10}