JustPaste.it

LLVM IR from `my_array_add`

; ModuleID = 'my_array_add'
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.my_array_add = internal constant [13 x i8] c"my_array_add\00"
@_ZN08NumbaEnv8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE = common local_unnamed_addr global ptr null
@".const.missing Environment: _ZN08NumbaEnv8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE" = internal constant [135 x i8] c"missing Environment: _ZN08NumbaEnv8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE\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.93985114789184 = 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.93985114789184.sha1 = internal constant [20 x i8] c"\DF\BC\FD\D3\9F\CB&\F4\D0\C6\80\95D\87\B8\C0\B5;\B8\A3"
@PyExc_RuntimeError = external global i8
 
; Function Attrs: nofree norecurse nounwind memory(argmem: readwrite)
define noundef i32 @_ZN8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE(ptr noalias writeonly captures(none) %retptr, ptr noalias readnone captures(none) %excinfo, ptr %arg.arr.0, ptr %arg.arr.1, i64 %arg.arr.2, i64 %arg.arr.3, ptr %arg.arr.4, i64 %arg.arr.5.0, i64 %arg.arr.6.0) local_unnamed_addr #0 {
B0.endif:
  tail call void @NRT_incref(ptr %arg.arr.0)
  %.120113.not = icmp slt i64 %arg.arr.5.0, 1
  br i1 %.120113.not, label %B110, label %iter.check
 
iter.check:                                       ; preds = %B0.endif
  %0 = trunc i64 %arg.arr.2 to i32
  %1 = add i32 %0, 1345
  %min.iters.check = icmp ult i64 %arg.arr.5.0, 4
  br i1 %min.iters.check, label %B72.preheader, label %vector.main.loop.iter.check
 
vector.main.loop.iter.check:                      ; preds = %iter.check
  %const = bitcast i64 9223372036854775776 to i64
  %min.iters.check1 = icmp ult i64 %arg.arr.5.0, 32
  br i1 %min.iters.check1, label %vec.epilog.ph, label %vector.ph
 
vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %arg.arr.5.0, %const
  %broadcast.splatinsert = insertelement <8 x i32> poison, i32 %1, i64 0
  %broadcast.splat = shufflevector <8 x i32> %broadcast.splatinsert, <8 x i32> poison, <8 x i32> zeroinitializer
  br label %vector.body
 
vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %sunkaddr = mul i64 %index, 4
  %sunkaddr22 = getelementptr i8, ptr %arg.arr.4, i64 %sunkaddr
  %wide.load = load <8 x i32>, ptr %sunkaddr22, align 4
  %sunkaddr23 = mul i64 %index, 4
  %sunkaddr24 = getelementptr i8, ptr %arg.arr.4, i64 %sunkaddr23
  %sunkaddr25 = getelementptr i8, ptr %sunkaddr24, i64 32
  %wide.load2 = load <8 x i32>, ptr %sunkaddr25, align 4
  %sunkaddr26 = mul i64 %index, 4
  %sunkaddr27 = getelementptr i8, ptr %arg.arr.4, i64 %sunkaddr26
  %sunkaddr28 = getelementptr i8, ptr %sunkaddr27, i64 64
  %wide.load3 = load <8 x i32>, ptr %sunkaddr28, align 4
  %sunkaddr29 = mul i64 %index, 4
  %sunkaddr30 = getelementptr i8, ptr %arg.arr.4, i64 %sunkaddr29
  %sunkaddr31 = getelementptr i8, ptr %sunkaddr30, i64 96
  %wide.load4 = load <8 x i32>, ptr %sunkaddr31, align 4
  %2 = add <8 x i32> %broadcast.splat, %wide.load
  %3 = add <8 x i32> %broadcast.splat, %wide.load2
  %4 = add <8 x i32> %broadcast.splat, %wide.load3
  %5 = add <8 x i32> %broadcast.splat, %wide.load4
  store <8 x i32> %2, ptr %sunkaddr22, align 4
  store <8 x i32> %3, ptr %sunkaddr25, align 4
  store <8 x i32> %4, ptr %sunkaddr28, align 4
  store <8 x i32> %5, ptr %sunkaddr31, align 4
  %index.next = add nuw i64 %index, 32
  %6 = icmp eq i64 %n.vec, %index.next
  br i1 %6, label %middle.block, label %vector.body, !llvm.loop !0
 
middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %arg.arr.5.0, %n.vec
  br i1 %cmp.n, label %B110, label %vec.epilog.iter.check
 
vec.epilog.iter.check:                            ; preds = %middle.block
  %n.vec.remaining = and i64 %arg.arr.5.0, 28
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %B72.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_mat = add i64 %const, 28
  %n.vec6 = and i64 %arg.arr.5.0, %const_mat
  %broadcast.splatinsert7 = insertelement <4 x i32> poison, i32 %1, i64 0
  %broadcast.splat8 = shufflevector <4 x i32> %broadcast.splatinsert7, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vec.epilog.vector.body
 
vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index9 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next11, %vec.epilog.vector.body ]
  %7 = shl i64 %index9, 2
  %scevgep13 = getelementptr i8, ptr %arg.arr.4, i64 %7
  %wide.load10 = load <4 x i32>, ptr %scevgep13, align 4
  %8 = add <4 x i32> %broadcast.splat8, %wide.load10
  store <4 x i32> %8, ptr %scevgep13, align 4
  %index.next11 = add nuw i64 %index9, 4
  %9 = icmp eq i64 %n.vec6, %index.next11
  br i1 %9, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !3
 
vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n12 = icmp eq i64 %arg.arr.5.0, %n.vec6
  br i1 %cmp.n12, label %B110, label %B72.preheader
 
B72.preheader:                                    ; preds = %vec.epilog.iter.check, %vec.epilog.middle.block, %iter.check
  %.126112114.ph = phi i64 [ 0, %iter.check ], [ %n.vec, %vec.epilog.iter.check ], [ %n.vec6, %vec.epilog.middle.block ]
  br label %B72
 
B72:                                              ; preds = %B72.preheader, %B72
  %.126112114 = phi i64 [ %.133, %B72 ], [ %.126112114.ph, %B72.preheader ]
  %.133 = add nuw nsw i64 %.126112114, 1
  %10 = shl i64 %.126112114, 2
  %scevgep = getelementptr i8, ptr %arg.arr.4, i64 %10
  %.187 = load i32, ptr %scevgep, align 4
  %.221 = add i32 %1, %.187
  store i32 %.221, ptr %scevgep, align 4
  %exitcond.not = icmp eq i64 %arg.arr.5.0, %.133
  br i1 %exitcond.not, label %B110, label %B72, !llvm.loop !4
 
B110:                                             ; preds = %B72, %middle.block, %vec.epilog.middle.block, %B0.endif
  store ptr %arg.arr.0, ptr %retptr, align 8
  %retptr.repack99 = getelementptr inbounds nuw i8, ptr %retptr, i64 8
  store ptr %arg.arr.1, ptr %retptr.repack99, align 8
  %retptr.repack101 = getelementptr inbounds nuw i8, ptr %retptr, i64 16
  store i64 %arg.arr.2, ptr %retptr.repack101, align 8
  %retptr.repack103 = getelementptr inbounds nuw i8, ptr %retptr, i64 24
  store i64 %arg.arr.3, ptr %retptr.repack103, align 8
  %retptr.repack105 = getelementptr inbounds nuw i8, ptr %retptr, i64 32
  store ptr %arg.arr.4, ptr %retptr.repack105, align 8
  %retptr.repack107 = getelementptr inbounds nuw i8, ptr %retptr, i64 40
  store i64 %arg.arr.5.0, ptr %retptr.repack107, align 8
  %retptr.repack109 = getelementptr inbounds nuw i8, ptr %retptr, i64 48
  store i64 %arg.arr.6.0, ptr %retptr.repack109, align 8
  ret i32 0
}
 
define ptr @_ZN7cpython8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE(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.my_array_add, i64 1, i64 1, ptr nonnull %.5)
  %.7 = icmp eq i32 %.6, 0
  %.21 = alloca { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] }, align 8
  %.43 = alloca { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] }, align 8
  %.102 = alloca { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] }, align 8
  br i1 %.7, label %common.ret, label %entry.endif, !prof !5
 
common.ret:                                       ; preds = %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 ], [ %.106, %entry.endif.endif.endif.endif.if.endif.endif ], [ null, %entry ], [ null, %entry.endif.endif.if ]
  ret ptr %common.ret.op
 
entry.endif:                                      ; preds = %entry
  %.11 = load ptr, ptr @_ZN08NumbaEnv8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE, align 8
  %.16 = icmp eq ptr %.11, null
  br i1 %.16, label %entry.endif.if, label %entry.endif.endif, !prof !5
 
entry.endif.if:                                   ; preds = %entry.endif
  call void @PyErr_SetString(ptr nonnull @PyExc_RuntimeError, ptr nonnull @".const.missing Environment: _ZN08NumbaEnv8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE")
  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(56) %.21, i8 0, i64 56, 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, 4
  %.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 !5
 
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 8
  %.36.fca.1.load = load ptr, ptr %sunkaddr1, align 8
  %sunkaddr2 = getelementptr inbounds i8, ptr %.21, i64 16
  %.36.fca.2.load = load i64, ptr %sunkaddr2, align 8
  %sunkaddr3 = getelementptr inbounds i8, ptr %.21, i64 32
  %.36.fca.4.load = load ptr, ptr %sunkaddr3, align 8
  %sunkaddr4 = getelementptr inbounds i8, ptr %.21, i64 40
  %.36.fca.5.0.load = load i64, ptr %sunkaddr4, align 8
  %sunkaddr5 = getelementptr inbounds i8, ptr %.21, i64 48
  %.36.fca.6.0.load = load i64, ptr %sunkaddr5, align 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.43, i8 0, i64 56, i1 false)
  %.49 = call i32 @_ZN8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE(ptr nonnull %.43, ptr nonnull poison, ptr %.36.fca.0.load, ptr %.36.fca.1.load, i64 %.36.fca.2.load, i64 4, ptr %.36.fca.4.load, i64 %.36.fca.5.0.load, i64 %.36.fca.6.0.load) #4
  %.59.fca.0.load = load ptr, ptr %.43, align 8
  %sunkaddr6 = getelementptr inbounds i8, ptr %.43, i64 8
  %.59.fca.1.load = load ptr, ptr %sunkaddr6, align 8
  %sunkaddr7 = getelementptr inbounds i8, ptr %.43, i64 16
  %.59.fca.2.load = load i64, ptr %sunkaddr7, align 8
  %sunkaddr8 = getelementptr inbounds i8, ptr %.43, i64 24
  %.59.fca.3.load = load i64, ptr %sunkaddr8, align 8
  %sunkaddr9 = getelementptr inbounds i8, ptr %.43, i64 32
  %.59.fca.4.load = load ptr, ptr %sunkaddr9, align 8
  %sunkaddr10 = getelementptr inbounds i8, ptr %.43, i64 40
  %.59.fca.5.0.load = load i64, ptr %sunkaddr10, align 8
  %sunkaddr11 = getelementptr inbounds i8, ptr %.43, i64 48
  %.59.fca.6.0.load = load i64, ptr %sunkaddr11, align 8
  call void @NRT_decref(ptr %.36.fca.0.load)
  %sunkaddr12 = getelementptr i8, ptr %.11, i64 24
  %.83 = load ptr, ptr %sunkaddr12, align 8
  %.87.not = icmp eq ptr %.83, null
  br i1 %.87.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
  %.89 = call ptr @PyList_GetItem(ptr nonnull %.83, 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
  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
  %.84.0 = phi ptr [ %.89, %entry.endif.endif.endif.endif.if.endif.if ], [ null, %entry.endif.endif.endif.endif.if.endif.else ]
  %.101 = call ptr @numba_unpickle(ptr nonnull @.const.pickledata.93985114789184, i32 32, ptr nonnull @.const.pickledata.93985114789184.sha1)
  store ptr %.59.fca.0.load, ptr %.102, align 8
  %sunkaddr13 = getelementptr inbounds i8, ptr %.102, i64 8
  store ptr %.59.fca.1.load, ptr %sunkaddr13, align 8
  %sunkaddr14 = getelementptr inbounds i8, ptr %.102, i64 16
  store i64 %.59.fca.2.load, ptr %sunkaddr14, align 8
  %sunkaddr15 = getelementptr inbounds i8, ptr %.102, i64 24
  store i64 %.59.fca.3.load, ptr %sunkaddr15, align 8
  %sunkaddr16 = getelementptr inbounds i8, ptr %.102, i64 32
  store ptr %.59.fca.4.load, ptr %sunkaddr16, align 8
  %sunkaddr17 = getelementptr inbounds i8, ptr %.102, i64 40
  store i64 %.59.fca.5.0.load, ptr %sunkaddr17, align 8
  %sunkaddr18 = getelementptr inbounds i8, ptr %.102, i64 48
  store i64 %.59.fca.6.0.load, ptr %sunkaddr18, align 8
  %.106 = call ptr @NRT_adapt_ndarray_to_python_acqref(ptr nonnull %.102, ptr %.101, i32 1, i32 1, ptr %.84.0)
  call void @NRT_decref(ptr %.59.fca.0.load)
  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
 
; Function Attrs: nofree norecurse nounwind memory(readwrite, inaccessiblemem: none)
define { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } @cfunc._ZN8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE({ ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1) local_unnamed_addr #2 {
entry:
  %.3 = alloca { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] }, align 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.3, i8 0, i64 56, i1 false)
  %extracted.meminfo = extractvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1, 0
  %extracted.parent = extractvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1, 1
  %extracted.nitems = extractvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1, 2
  %extracted.itemsize = extractvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1, 3
  %extracted.data = extractvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1, 4
  %extracted.shape = extractvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1, 5
  %.7 = extractvalue [1 x i64] %extracted.shape, 0
  %extracted.strides = extractvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1, 6
  %.8 = extractvalue [1 x i64] %extracted.strides, 0
  %.9 = call i32 @_ZN8__main__12my_array_addB2v1B38c8tJTIeFIjxB2IKSgI4CrvQClQZ6FczSBAA_3dE5ArrayIiLi1E1C7mutable7alignedE(ptr nonnull %.3, ptr nonnull poison, ptr %extracted.meminfo, ptr %extracted.parent, i64 %extracted.nitems, i64 %extracted.itemsize, ptr %extracted.data, i64 %.7, i64 %.8) #4
  ret { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %.1
  /* %.19.fca.0.load = load ptr, ptr %.3, align 8
  %inserted.meminfo = insertvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } undef, ptr %.19.fca.0.load, 0
  %.fca.1.gep = getelementptr inbounds nuw i8, ptr %.3, i64 8
  %.19.fca.1.load = load ptr, ptr %.fca.1.gep, align 8
  %inserted.parent = insertvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %inserted.meminfo, ptr %.19.fca.1.load, 1
  %.fca.2.gep = getelementptr inbounds nuw i8, ptr %.3, i64 16
  %.19.fca.2.load = load i64, ptr %.fca.2.gep, align 8
  %inserted.nitems = insertvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %inserted.parent, i64 %.19.fca.2.load, 2
  %.fca.3.gep = getelementptr inbounds nuw i8, ptr %.3, i64 24
  %.19.fca.3.load = load i64, ptr %.fca.3.gep, align 8
  %inserted.itemsize = insertvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %inserted.nitems, i64 %.19.fca.3.load, 3
  %.fca.4.gep = getelementptr inbounds nuw i8, ptr %.3, i64 32
  %.19.fca.4.load = load ptr, ptr %.fca.4.gep, align 8
  %inserted.data = insertvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %inserted.itemsize, ptr %.19.fca.4.load, 4
  %.fca.5.0.gep = getelementptr inbounds nuw i8, ptr %.3, i64 40
  %.19.fca.5.0.load = load i64, ptr %.fca.5.0.gep, align 8
  %.28 = insertvalue [1 x i64] undef, i64 %.19.fca.5.0.load, 0
  %inserted.shape = insertvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %inserted.data, [1 x i64] %.28, 5
  %.fca.6.0.gep = getelementptr inbounds nuw i8, ptr %.3, i64 48
  %.19.fca.6.0.load = load i64, ptr %.fca.6.0.gep, align 8
  %.30 = insertvalue [1 x i64] undef, i64 %.19.fca.6.0.load, 0
  %inserted.strides = insertvalue { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %inserted.shape, [1 x i64] %.30, 6
  ret { ptr, ptr, i64, i64, ptr, [1 x i64], [1 x i64] } %inserted.strides */
}
 
; Function Attrs: mustprogress nofree noinline norecurse nounwind willreturn memory(argmem: readwrite)
define linkonce_odr void @NRT_incref(ptr captures(address_is_null) %.1) local_unnamed_addr #3 {
.3:
  %.4 = icmp eq ptr %.1, null
  br i1 %.4, label %common.ret, label %.3.endif, !prof !5
 
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 #4 {
.3:
  %.4 = icmp eq ptr %.1, null
  br i1 %.4, label %common.ret1, label %.3.endif, !prof !5
 
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 !5
 
.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) #5
 
declare void @NRT_MemInfo_call_dtor(ptr) local_unnamed_addr
 
attributes #0 = { nofree norecurse nounwind memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { nofree norecurse nounwind memory(readwrite, inaccessiblemem: none) }
attributes #3 = { mustprogress nofree noinline norecurse nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { noinline }
attributes #5 = { nounwind }
 
!0 = distinct !{!0, !1, !2}
!1 = !{!"llvm.loop.isvectorized", i32 1}
!2 = !{!"llvm.loop.unroll.runtime.disable"}
!3 = distinct !{!3, !1, !2}
!4 = distinct !{!4, !2, !1}
!5 = !{!"branch_weights", i32 1, i32 99}