-
Notifications
You must be signed in to change notification settings - Fork 193
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AssertionError when trying to set an array shape/strides #2224
Comments
I can only confirm that it's not officially supported. But it looks like something worth investigating for shapes... but for strides I don't think this will. I'll first give a try to supporting your original attempt. |
btw, there's no actual computation in your |
Thank you for the fix.
The aim was to speed-up a larger loop that includes this operation. I found another solution. |
If that makes sense, I'd be curious to read the final kernel |
So my current solution is to use numba (sorry...) I have a python function @numba.njit
def numba_transpose_reshape(old_mat, r1, r2, c1, c2, old_nrr, old_tensor_shape, perm):
"""
numba version of
old_mat[r1:r2, c1:c2].reshape(old_tensor_shape).transpose(perm)
"""
NDIM = len(perm)
old_tensor_strides = numba_compute_tensor_strides(
old_mat.strides, old_nrr, old_tensor_shape
)
new_tensor_shape = np.empty((NDIM,), dtype=np.int64)
new_tensor_strides = np.empty((NDIM,), dtype=np.int64)
for i in range(NDIM):
new_tensor_shape[i] = old_tensor_shape[perm[i]]
new_tensor_strides[i] = old_tensor_strides[perm[i]]
sht = numba.np.unsafe.ndarray.to_fixed_tuple(new_tensor_shape, NDIM)
stridest = numba.np.unsafe.ndarray.to_fixed_tuple(new_tensor_strides, NDIM)
permuted = np.lib.stride_tricks.as_strided(
old_mat[r1:r2, c1:c2], shape=sht, strides=stridest
)
return permuted When I compile for e.g. a 6-dim tensor, I have signature In [7]: numba_transpose_reshape.signatures[0]
Out[7]:
(Array(float64, 2, 'C', True, aligned=True),
int64,
int64,
int64,
int64,
int64,
UniTuple(int64, 6),
UniTuple(int64, 6)) And numba generates a quite verbose LLVM code (which I cannot read) Click meIn [6]: print(numba_transpose_reshape.inspect_llvm(numba_transpose_reshape.signatures[0]))
; ModuleID = 'numba_transpose_reshape'
source_filename = "<string>"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@.const.pickledata.139740390420480 = internal constant [70 x i8] c"\80\04\95;\00\00\00\00\00\00\00\8C\08builtins\94\8C\0AIndexError\94\93\94\8C\18tuple index out of range\94\85\94N\87\94."
@.const.pickledata.139740390420480.sha1 = internal constant [20 x i8] c"\A82\A7\F8\17\\%0i*\B8.X\1E$k\F5dj("
@.const.picklebuf.139740390420480 = internal constant { i8*, i32, i8*, i8*, i32 } { i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.const.pickledata.139740390420480, i32 0, i32 0), i32 70, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.const.pickledata.139740390420480.sha1, i32 0, i32 0), i8* null, i32 0 }
@.const.numba_transpose_reshape = internal constant [24 x i8] c"numba_transpose_reshape\00"
@_ZN08NumbaEnv9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE = common local_unnamed_addr global i8* null
@".const.missing Environment: _ZN08NumbaEnv9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE" = internal constant [211 x i8] c"missing Environment: _ZN08NumbaEnv9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE\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.size mismatch for tuple, expected 6 element(s) but got %zd" = internal constant [59 x i8] c"size mismatch for tuple, expected 6 element(s) but got %zd\00"
@_Py_NoneStruct = external global i8
@".const.`env.consts` is NULL in `read_const`" = internal constant [37 x i8] c"`env.consts` is NULL in `read_const`\00"
@.const.pickledata.139741320154272 = 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.139741320154272.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"
@".const.unknown error when calling native function" = internal constant [43 x i8] c"unknown error when calling native function\00"
@".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.unknown error when calling native function.2" = internal constant [43 x i8] c"unknown error when calling native function\00"
@".const.<numba.core.cpu.CPUContext object at 0x7f17d8920580>" = internal constant [53 x i8] c"<numba.core.cpu.CPUContext object at 0x7f17d8920580>\00"
@.const.pickledata.139740397330368 = internal constant [70 x i8] c"\80\04\95;\00\00\00\00\00\00\00\8C\08builtins\94\8C\0AIndexError\94\93\94\8C\18tuple index out of range\94\85\94N\87\94."
@.const.pickledata.139740397330368.sha1 = internal constant [20 x i8] c"\A82\A7\F8\17\\%0i*\B8.X\1E$k\F5dj("
@.const.picklebuf.139740397330368 = internal constant { i8*, i32, i8*, i8*, i32 } { i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.const.pickledata.139740397330368, i32 0, i32 0), i32 70, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.const.pickledata.139740397330368.sha1, i32 0, i32 0), i8* null, i32 0 }
@_ZN08NumbaEnv9froSTspin10misc_tools11numba_tools28numba_compute_tensor_stridesB3v51B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE8UniTupleIxLi2EEx8UniTupleIxLi6EE = common local_unnamed_addr global i8* null
@PyExc_ValueError = external global i8
@PyExc_StopIteration = external global i8
@.const.pickledata.139740397001280 = 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.139740397001280.sha1 = internal constant [20 x i8] c"\BA(\9D\81\F0\\p \F3G|\15sH\04\DFe\AB\E2\09"
@.const.picklebuf.139740397001280 = internal constant { i8*, i32, i8*, i8*, i32 } { i8* getelementptr inbounds ([86 x i8], [86 x i8]* @.const.pickledata.139740397001280, i32 0, i32 0), i32 86, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.const.pickledata.139740397001280.sha1, i32 0, i32 0), i8* null, i32 0 }
@_ZN08NumbaEnv5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29 = common local_unnamed_addr global i8* null
@PyExc_RuntimeError = external global i8
@PyExc_SystemError = external global i8
@_ZN08NumbaEnv5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj = common local_unnamed_addr global i8* null
@_ZN08NumbaEnv5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj = common local_unnamed_addr global i8* null
@.const.pickledata.139740397001280.10 = 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.139740397001280.sha1.11 = internal constant [20 x i8] c"\BA(\9D\81\F0\\p \F3G|\15sH\04\DFe\AB\E2\09"
@.const.picklebuf.139740397001280.9 = internal constant { i8*, i32, i8*, i8*, i32 } { i8* getelementptr inbounds ([86 x i8], [86 x i8]* @.const.pickledata.139740397001280.10, i32 0, i32 0), i32 86, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.const.pickledata.139740397001280.sha1.11, i32 0, i32 0), i8* null, i32 0 }
@_ZN08NumbaEnv5numba2np6unsafe7ndarray14to_fixed_tuple12_3clocals_3e7codegen12_3clocals_3e4implB3v55B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAE5ArrayIxLi1E1C7mutable7alignedEx8UniTupleIxLi6EE = common local_unnamed_addr global i8* null
@_ZN08NumbaEnv5numba2np8arrayobj10as_strided12_3clocals_3e15as_strided_implB3v52B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE5ArrayIdLi2E1A8readonly7alignedE8UniTupleIxLi6EE8UniTupleIxLi6EE = common local_unnamed_addr global i8* null
@_ZN08NumbaEnv5numba2np8arrayobj10as_strided12_3clocals_3e9get_shapeB3v53B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE5ArrayIdLi2E1A8readonly7alignedE8UniTupleIxLi6EE = common local_unnamed_addr global i8* null
@_ZN08NumbaEnv5numba2np8arrayobj10as_strided12_3clocals_3e11get_stridesB3v54B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE5ArrayIdLi2E1A8readonly7alignedE8UniTupleIxLi6EE = common local_unnamed_addr global i8* null
define i32 @_ZN9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE({ i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* noalias nocapture writeonly %retptr, { i8*, i32, i8*, i8*, i32 }** noalias nocapture writeonly %excinfo, i8* %arg.old_mat.0, i8* nocapture readnone %arg.old_mat.1, i64 %arg.old_mat.2, i64 %arg.old_mat.3, double* %arg.old_mat.4, i64 %arg.old_mat.5.0, i64 %arg.old_mat.5.1, i64 %arg.old_mat.6.0, i64 %arg.old_mat.6.1, i64 %arg.r1, i64 %arg.r2, i64 %arg.c1, i64 %arg.c2, i64 %arg.old_nrr, i64 %arg.old_tensor_shape.0, i64 %arg.old_tensor_shape.1, i64 %arg.old_tensor_shape.2, i64 %arg.old_tensor_shape.3, i64 %arg.old_tensor_shape.4, i64 %arg.old_tensor_shape.5, i64 %arg.perm.0, i64 %arg.perm.1, i64 %arg.perm.2, i64 %arg.perm.3, i64 %arg.perm.4, i64 %arg.perm.5) local_unnamed_addr {
entry:
%.89 = alloca { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, align 8
%.fca.0.gep335155 = bitcast { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %.89 to i8**
%.fca.4.gep339 = getelementptr inbounds { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %.89, i64 0, i32 4
%.fca.5.0.gep340 = getelementptr inbounds { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %.89, i64 0, i32 5, i64 0
%excinfo.1 = alloca { i8*, i32, i8*, i8*, i32 }*, align 8
store { i8*, i32, i8*, i8*, i32 }* null, { i8*, i32, i8*, i8*, i32 }** %excinfo.1, align 8
tail call void @NRT_incref(i8* %arg.old_mat.0)
%0 = bitcast { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %.89 to i8*
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(56) %0, i8 0, i64 56, i1 false)
%.101 = call i32 @_ZN9froSTspin10misc_tools11numba_tools28numba_compute_tensor_stridesB3v51B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE8UniTupleIxLi2EEx8UniTupleIxLi6EE({ i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* nonnull %.89, { i8*, i32, i8*, i8*, i32 }** nonnull %excinfo.1, i64 %arg.old_mat.6.0, i64 %arg.old_mat.6.1, i64 %arg.old_nrr, i64 %arg.old_tensor_shape.0, i64 %arg.old_tensor_shape.1, i64 %arg.old_tensor_shape.2, i64 %arg.old_tensor_shape.3, i64 %arg.old_tensor_shape.4, i64 %arg.old_tensor_shape.5)
%.111.fca.0.load = load i8*, i8** %.fca.0.gep335155, align 8
%.111.fca.4.load = load i64*, i64** %.fca.4.gep339, align 8
%.111.fca.5.0.load = load i64, i64* %.fca.5.0.gep340, align 8
switch i32 %.101, label %B0.if [
i32 -2, label %B0.endif
i32 0, label %B0.endif
]
B0.if: ; preds = %entry
%.109 = icmp sgt i32 %.101, 0
%.102 = load { i8*, i32, i8*, i8*, i32 }*, { i8*, i32, i8*, i8*, i32 }** %excinfo.1, align 8
%.110 = select i1 %.109, { i8*, i32, i8*, i8*, i32 }* %.102, { i8*, i32, i8*, i8*, i32 }* undef
store { i8*, i32, i8*, i8*, i32 }* %.110, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8
br label %common.ret
B0.endif: ; preds = %entry, %entry
%.7.i.i.i = tail call i8* @NRT_MemInfo_alloc_aligned(i64 48, i32 32), !noalias !0
%.8.i.i.i = icmp eq i8* %.7.i.i.i, null
br i1 %.8.i.i.i, label %B0.endif.if, label %B0.endif.endif, !prof !10
common.ret: ; preds = %B0.endif.endif.if, %B0.endif.if, %B0.if, %B106.endif.endif.endif.endif.endif, %switch.else.1
%common.ret.op = phi i32 [ 1, %switch.else.1 ], [ 0, %B106.endif.endif.endif.endif.endif ], [ %.101, %B0.if ], [ 1, %B0.endif.if ], [ 1, %B0.endif.endif.if ]
ret i32 %common.ret.op
B0.endif.if: ; preds = %B0.endif
store { i8*, i32, i8*, i8*, i32 }* @.const.picklebuf.139740397001280.9, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8
br label %common.ret
B0.endif.endif: ; preds = %B0.endif
%.5.i.i = getelementptr i8, i8* %.7.i.i.i, i64 24
%1 = bitcast i8* %.5.i.i to i64**
%.6.i1.i = load i64*, i64** %1, align 8, !noalias !11
%.7.i.i.i2 = tail call i8* @NRT_MemInfo_alloc_aligned(i64 48, i32 32), !noalias !12
%.8.i.i.i3 = icmp eq i8* %.7.i.i.i2, null
br i1 %.8.i.i.i3, label %B0.endif.endif.if, label %switch.end, !prof !10
B0.endif.endif.if: ; preds = %B0.endif.endif
store { i8*, i32, i8*, i8*, i32 }* @.const.picklebuf.139740397001280.9, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8
br label %common.ret
switch.end: ; preds = %B0.endif.endif
%.5.i.i5 = getelementptr i8, i8* %.7.i.i.i2, i64 24
%2 = bitcast i8* %.5.i.i5 to i64**
%.6.i1.i6 = load i64*, i64** %2, align 8, !noalias !22
switch i64 %arg.perm.0, label %switch.else.1 [
i64 0, label %switch.end.1125
i64 -6, label %switch.end.1125
i64 1, label %switch.1.1
i64 -5, label %switch.1.1
i64 2, label %switch.2.1
i64 -4, label %switch.2.1
i64 3, label %switch.3.1
i64 -3, label %switch.3.1
i64 4, label %switch.4.1
i64 -2, label %switch.4.1
i64 5, label %switch.5.1
i64 -1, label %switch.5.1
]
switch.else.1: ; preds = %switch.end.5, %switch.end.4, %switch.end.3, %switch.end.2131, %switch.end.1125, %switch.end
store { i8*, i32, i8*, i8*, i32 }* @.const.picklebuf.139740390420480, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8, !numba_exception_output !23
br label %common.ret
switch.1.1: ; preds = %switch.end, %switch.end
br label %switch.end.1125
switch.2.1: ; preds = %switch.end, %switch.end
br label %switch.end.1125
switch.3.1: ; preds = %switch.end, %switch.end
br label %switch.end.1125
switch.4.1: ; preds = %switch.end, %switch.end
br label %switch.end.1125
switch.5.1: ; preds = %switch.end, %switch.end
br label %switch.end.1125
switch.end.1125: ; preds = %switch.1.1, %switch.2.1, %switch.3.1, %switch.4.1, %switch.5.1, %switch.end, %switch.end
%.383 = phi i64 [ %arg.old_tensor_shape.1, %switch.1.1 ], [ %arg.old_tensor_shape.2, %switch.2.1 ], [ %arg.old_tensor_shape.3, %switch.3.1 ], [ %arg.old_tensor_shape.4, %switch.4.1 ], [ %arg.old_tensor_shape.5, %switch.5.1 ], [ %arg.old_tensor_shape.0, %switch.end ], [ %arg.old_tensor_shape.0, %switch.end ]
store i64 %.383, i64* %.6.i1.i, align 8
%.459 = icmp slt i64 %arg.perm.0, 0
%.460 = select i1 %.459, i64 %.111.fca.5.0.load, i64 0
%.461 = add i64 %.460, %arg.perm.0
%.474 = getelementptr i64, i64* %.111.fca.4.load, i64 %.461
%.475 = load i64, i64* %.474, align 8
store i64 %.475, i64* %.6.i1.i6, align 8
switch i64 %arg.perm.1, label %switch.else.1 [
i64 0, label %switch.end.2131
i64 -6, label %switch.end.2131
i64 1, label %switch.1.1.1
i64 -5, label %switch.1.1.1
i64 2, label %switch.2.1.1
i64 -4, label %switch.2.1.1
i64 3, label %switch.3.1.1
i64 -3, label %switch.3.1.1
i64 4, label %switch.4.1.1
i64 -2, label %switch.4.1.1
i64 5, label %switch.5.1.1
i64 -1, label %switch.5.1.1
]
switch.5.1.1: ; preds = %switch.end.1125, %switch.end.1125
br label %switch.end.2131
switch.4.1.1: ; preds = %switch.end.1125, %switch.end.1125
br label %switch.end.2131
switch.3.1.1: ; preds = %switch.end.1125, %switch.end.1125
br label %switch.end.2131
switch.2.1.1: ; preds = %switch.end.1125, %switch.end.1125
br label %switch.end.2131
switch.1.1.1: ; preds = %switch.end.1125, %switch.end.1125
br label %switch.end.2131
switch.end.2131: ; preds = %switch.1.1.1, %switch.2.1.1, %switch.3.1.1, %switch.4.1.1, %switch.5.1.1, %switch.end.1125, %switch.end.1125
%.383.1 = phi i64 [ %arg.old_tensor_shape.1, %switch.1.1.1 ], [ %arg.old_tensor_shape.2, %switch.2.1.1 ], [ %arg.old_tensor_shape.3, %switch.3.1.1 ], [ %arg.old_tensor_shape.4, %switch.4.1.1 ], [ %arg.old_tensor_shape.5, %switch.5.1.1 ], [ %arg.old_tensor_shape.0, %switch.end.1125 ], [ %arg.old_tensor_shape.0, %switch.end.1125 ]
%.424.1 = getelementptr i64, i64* %.6.i1.i, i64 1
store i64 %.383.1, i64* %.424.1, align 8
%.459.1 = icmp slt i64 %arg.perm.1, 0
%.460.1 = select i1 %.459.1, i64 %.111.fca.5.0.load, i64 0
%.461.1 = add i64 %.460.1, %arg.perm.1
%.474.1 = getelementptr i64, i64* %.111.fca.4.load, i64 %.461.1
%.475.1 = load i64, i64* %.474.1, align 8
%.504.1 = getelementptr i64, i64* %.6.i1.i6, i64 1
store i64 %.475.1, i64* %.504.1, align 8
switch i64 %arg.perm.2, label %switch.else.1 [
i64 0, label %switch.end.3
i64 -6, label %switch.end.3
i64 1, label %switch.1.1.2
i64 -5, label %switch.1.1.2
i64 2, label %switch.2.1.2
i64 -4, label %switch.2.1.2
i64 3, label %switch.3.1.2
i64 -3, label %switch.3.1.2
i64 4, label %switch.4.1.2
i64 -2, label %switch.4.1.2
i64 5, label %switch.5.1.2
i64 -1, label %switch.5.1.2
]
switch.5.1.2: ; preds = %switch.end.2131, %switch.end.2131
br label %switch.end.3
switch.4.1.2: ; preds = %switch.end.2131, %switch.end.2131
br label %switch.end.3
switch.3.1.2: ; preds = %switch.end.2131, %switch.end.2131
br label %switch.end.3
switch.2.1.2: ; preds = %switch.end.2131, %switch.end.2131
br label %switch.end.3
switch.1.1.2: ; preds = %switch.end.2131, %switch.end.2131
br label %switch.end.3
switch.end.3: ; preds = %switch.1.1.2, %switch.2.1.2, %switch.3.1.2, %switch.4.1.2, %switch.5.1.2, %switch.end.2131, %switch.end.2131
%.383.2 = phi i64 [ %arg.old_tensor_shape.1, %switch.1.1.2 ], [ %arg.old_tensor_shape.2, %switch.2.1.2 ], [ %arg.old_tensor_shape.3, %switch.3.1.2 ], [ %arg.old_tensor_shape.4, %switch.4.1.2 ], [ %arg.old_tensor_shape.5, %switch.5.1.2 ], [ %arg.old_tensor_shape.0, %switch.end.2131 ], [ %arg.old_tensor_shape.0, %switch.end.2131 ]
%.424.2 = getelementptr i64, i64* %.6.i1.i, i64 2
store i64 %.383.2, i64* %.424.2, align 8
%.459.2 = icmp slt i64 %arg.perm.2, 0
%.460.2 = select i1 %.459.2, i64 %.111.fca.5.0.load, i64 0
%.461.2 = add i64 %.460.2, %arg.perm.2
%.474.2 = getelementptr i64, i64* %.111.fca.4.load, i64 %.461.2
%.475.2 = load i64, i64* %.474.2, align 8
%.504.2 = getelementptr i64, i64* %.6.i1.i6, i64 2
store i64 %.475.2, i64* %.504.2, align 8
switch i64 %arg.perm.3, label %switch.else.1 [
i64 0, label %switch.end.4
i64 -6, label %switch.end.4
i64 1, label %switch.1.1.3
i64 -5, label %switch.1.1.3
i64 2, label %switch.2.1.3
i64 -4, label %switch.2.1.3
i64 3, label %switch.3.1.3
i64 -3, label %switch.3.1.3
i64 4, label %switch.4.1.3
i64 -2, label %switch.4.1.3
i64 5, label %switch.5.1.3
i64 -1, label %switch.5.1.3
]
switch.5.1.3: ; preds = %switch.end.3, %switch.end.3
br label %switch.end.4
switch.4.1.3: ; preds = %switch.end.3, %switch.end.3
br label %switch.end.4
switch.3.1.3: ; preds = %switch.end.3, %switch.end.3
br label %switch.end.4
switch.2.1.3: ; preds = %switch.end.3, %switch.end.3
br label %switch.end.4
switch.1.1.3: ; preds = %switch.end.3, %switch.end.3
br label %switch.end.4
switch.end.4: ; preds = %switch.1.1.3, %switch.2.1.3, %switch.3.1.3, %switch.4.1.3, %switch.5.1.3, %switch.end.3, %switch.end.3
%.383.3 = phi i64 [ %arg.old_tensor_shape.1, %switch.1.1.3 ], [ %arg.old_tensor_shape.2, %switch.2.1.3 ], [ %arg.old_tensor_shape.3, %switch.3.1.3 ], [ %arg.old_tensor_shape.4, %switch.4.1.3 ], [ %arg.old_tensor_shape.5, %switch.5.1.3 ], [ %arg.old_tensor_shape.0, %switch.end.3 ], [ %arg.old_tensor_shape.0, %switch.end.3 ]
%.424.3 = getelementptr i64, i64* %.6.i1.i, i64 3
store i64 %.383.3, i64* %.424.3, align 8
%.459.3 = icmp slt i64 %arg.perm.3, 0
%.460.3 = select i1 %.459.3, i64 %.111.fca.5.0.load, i64 0
%.461.3 = add i64 %.460.3, %arg.perm.3
%.474.3 = getelementptr i64, i64* %.111.fca.4.load, i64 %.461.3
%.475.3 = load i64, i64* %.474.3, align 8
%.504.3 = getelementptr i64, i64* %.6.i1.i6, i64 3
store i64 %.475.3, i64* %.504.3, align 8
switch i64 %arg.perm.4, label %switch.else.1 [
i64 0, label %switch.end.5
i64 -6, label %switch.end.5
i64 1, label %switch.1.1.4
i64 -5, label %switch.1.1.4
i64 2, label %switch.2.1.4
i64 -4, label %switch.2.1.4
i64 3, label %switch.3.1.4
i64 -3, label %switch.3.1.4
i64 4, label %switch.4.1.4
i64 -2, label %switch.4.1.4
i64 5, label %switch.5.1.4
i64 -1, label %switch.5.1.4
]
switch.5.1.4: ; preds = %switch.end.4, %switch.end.4
br label %switch.end.5
switch.4.1.4: ; preds = %switch.end.4, %switch.end.4
br label %switch.end.5
switch.3.1.4: ; preds = %switch.end.4, %switch.end.4
br label %switch.end.5
switch.2.1.4: ; preds = %switch.end.4, %switch.end.4
br label %switch.end.5
switch.1.1.4: ; preds = %switch.end.4, %switch.end.4
br label %switch.end.5
switch.end.5: ; preds = %switch.1.1.4, %switch.2.1.4, %switch.3.1.4, %switch.4.1.4, %switch.5.1.4, %switch.end.4, %switch.end.4
%.383.4 = phi i64 [ %arg.old_tensor_shape.1, %switch.1.1.4 ], [ %arg.old_tensor_shape.2, %switch.2.1.4 ], [ %arg.old_tensor_shape.3, %switch.3.1.4 ], [ %arg.old_tensor_shape.4, %switch.4.1.4 ], [ %arg.old_tensor_shape.5, %switch.5.1.4 ], [ %arg.old_tensor_shape.0, %switch.end.4 ], [ %arg.old_tensor_shape.0, %switch.end.4 ]
%.424.4 = getelementptr i64, i64* %.6.i1.i, i64 4
store i64 %.383.4, i64* %.424.4, align 8
%.459.4 = icmp slt i64 %arg.perm.4, 0
%.460.4 = select i1 %.459.4, i64 %.111.fca.5.0.load, i64 0
%.461.4 = add i64 %.460.4, %arg.perm.4
%.474.4 = getelementptr i64, i64* %.111.fca.4.load, i64 %.461.4
%.475.4 = load i64, i64* %.474.4, align 8
%.504.4 = getelementptr i64, i64* %.6.i1.i6, i64 4
store i64 %.475.4, i64* %.504.4, align 8
switch i64 %arg.perm.5, label %switch.else.1 [
i64 0, label %switch.end.2.5
i64 -6, label %switch.end.2.5
i64 1, label %switch.1.1.5
i64 -5, label %switch.1.1.5
i64 2, label %switch.2.1.5
i64 -4, label %switch.2.1.5
i64 3, label %switch.3.1.5
i64 -3, label %switch.3.1.5
i64 4, label %switch.4.1.5
i64 -2, label %switch.4.1.5
i64 5, label %switch.5.1.5
i64 -1, label %switch.5.1.5
]
switch.5.1.5: ; preds = %switch.end.5, %switch.end.5
br label %switch.end.2.5
switch.4.1.5: ; preds = %switch.end.5, %switch.end.5
br label %switch.end.2.5
switch.3.1.5: ; preds = %switch.end.5, %switch.end.5
br label %switch.end.2.5
switch.2.1.5: ; preds = %switch.end.5, %switch.end.5
br label %switch.end.2.5
switch.1.1.5: ; preds = %switch.end.5, %switch.end.5
br label %switch.end.2.5
switch.end.2.5: ; preds = %switch.1.1.5, %switch.2.1.5, %switch.3.1.5, %switch.4.1.5, %switch.5.1.5, %switch.end.5, %switch.end.5
%.383.5 = phi i64 [ %arg.old_tensor_shape.1, %switch.1.1.5 ], [ %arg.old_tensor_shape.2, %switch.2.1.5 ], [ %arg.old_tensor_shape.3, %switch.3.1.5 ], [ %arg.old_tensor_shape.4, %switch.4.1.5 ], [ %arg.old_tensor_shape.5, %switch.5.1.5 ], [ %arg.old_tensor_shape.0, %switch.end.5 ], [ %arg.old_tensor_shape.0, %switch.end.5 ]
%.424.5 = getelementptr i64, i64* %.6.i1.i, i64 5
store i64 %.383.5, i64* %.424.5, align 8
%.459.5 = icmp slt i64 %arg.perm.5, 0
%.460.5 = select i1 %.459.5, i64 %.111.fca.5.0.load, i64 0
%.461.5 = add i64 %.460.5, %arg.perm.5
%.474.5 = getelementptr i64, i64* %.111.fca.4.load, i64 %.461.5
%.475.5 = load i64, i64* %.474.5, align 8
%.504.5 = getelementptr i64, i64* %.6.i1.i6, i64 5
store i64 %.475.5, i64* %.504.5, align 8
tail call void @NRT_decref(i8* %.111.fca.0.load)
%.218.i = load i64, i64* %.6.i1.i, align 8, !noalias !24
%3 = bitcast i64* %.6.i1.i to i8*
%sunkaddr = getelementptr i8, i8* %3, i64 8
%4 = bitcast i8* %sunkaddr to i64*
%.218.1.i = load i64, i64* %4, align 8, !noalias !24
%5 = bitcast i64* %.6.i1.i to i8*
%sunkaddr156 = getelementptr i8, i8* %5, i64 16
%6 = bitcast i8* %sunkaddr156 to i64*
%.218.i.1 = load i64, i64* %6, align 8, !noalias !24
%sunkaddr509.i.1 = getelementptr i64, i64* %.6.i1.i, i64 3
%.218.1.i.1 = load i64, i64* %sunkaddr509.i.1, align 8, !noalias !24
%7 = bitcast i64* %.6.i1.i to i8*
%sunkaddr157 = getelementptr i8, i8* %7, i64 32
%8 = bitcast i8* %sunkaddr157 to i64*
%.218.i.2 = load i64, i64* %8, align 8, !noalias !24
%sunkaddr509.i.2 = getelementptr i64, i64* %.6.i1.i, i64 5
%.218.1.i.2 = load i64, i64* %sunkaddr509.i.2, align 8, !noalias !24
tail call void @NRT_decref(i8* nonnull %.7.i.i.i)
%.218.i23 = load i64, i64* %.6.i1.i6, align 8, !noalias !27
%9 = bitcast i64* %.6.i1.i6 to i8*
%sunkaddr158 = getelementptr i8, i8* %9, i64 8
%10 = bitcast i8* %sunkaddr158 to i64*
%.218.1.i39 = load i64, i64* %10, align 8, !noalias !27
%11 = bitcast i64* %.6.i1.i6 to i8*
%sunkaddr159 = getelementptr i8, i8* %11, i64 16
%12 = bitcast i8* %sunkaddr159 to i64*
%.218.i23.1 = load i64, i64* %12, align 8, !noalias !27
%sunkaddr509.i38.1 = getelementptr i64, i64* %.6.i1.i6, i64 3
%.218.1.i39.1 = load i64, i64* %sunkaddr509.i38.1, align 8, !noalias !27
%13 = bitcast i64* %.6.i1.i6 to i8*
%sunkaddr160 = getelementptr i8, i8* %13, i64 32
%14 = bitcast i8* %sunkaddr160 to i64*
%.218.i23.2 = load i64, i64* %14, align 8, !noalias !27
%sunkaddr509.i38.2 = getelementptr i64, i64* %.6.i1.i6, i64 5
%.218.1.i39.2 = load i64, i64* %sunkaddr509.i38.2, align 8, !noalias !27
tail call void @NRT_decref(i8* nonnull %.7.i.i.i2)
%.684 = icmp slt i64 %arg.r1, 0
%.685 = select i1 %.684, i64 %arg.old_mat.5.0, i64 0
%.686 = add i64 %.685, %arg.r1
%.689 = icmp slt i64 %.686, 0
br i1 %.689, label %B106.endif.endif.else.if, label %B106.endif.endif.else.endif, !prof !10
B106.endif.endif.else.if: ; preds = %switch.end.2.5
br label %B106.endif.endif.else.endif
B106.endif.endif.else.endif: ; preds = %B106.endif.endif.else.if, %switch.end.2.5
%.674.sroa.0.1 = phi i64 [ 0, %B106.endif.endif.else.if ], [ %.686, %switch.end.2.5 ]
%.694.not = icmp slt i64 %.686, %arg.old_mat.5.0
br i1 %.694.not, label %B106.endif.endif.endif.else, label %B106.endif.endif.else.endif.if, !prof !30
B106.endif.endif.else.endif.if: ; preds = %B106.endif.endif.else.endif
br label %B106.endif.endif.endif.else
B106.endif.endif.endif.else: ; preds = %B106.endif.endif.else.endif.if, %B106.endif.endif.else.endif
%.674.sroa.0.2 = phi i64 [ %arg.old_mat.5.0, %B106.endif.endif.else.endif.if ], [ %.674.sroa.0.1, %B106.endif.endif.else.endif ]
%.785 = icmp slt i64 %arg.c1, 0
%.786 = select i1 %.785, i64 %arg.old_mat.5.1, i64 0
%.787 = add i64 %.786, %arg.c1
%.790 = icmp slt i64 %.787, 0
br i1 %.790, label %B106.endif.endif.endif.else.if, label %B106.endif.endif.endif.else.endif, !prof !10
B106.endif.endif.endif.else.if: ; preds = %B106.endif.endif.endif.else
br label %B106.endif.endif.endif.else.endif
B106.endif.endif.endif.else.endif: ; preds = %B106.endif.endif.endif.else.if, %B106.endif.endif.endif.else
%.775.sroa.0.1 = phi i64 [ 0, %B106.endif.endif.endif.else.if ], [ %.787, %B106.endif.endif.endif.else ]
%.795.not = icmp slt i64 %.787, %arg.old_mat.5.1
br i1 %.795.not, label %B106.endif.endif.endif.endif.endif, label %B106.endif.endif.endif.else.endif.if, !prof !30
B106.endif.endif.endif.else.endif.if: ; preds = %B106.endif.endif.endif.else.endif
br label %B106.endif.endif.endif.endif.endif
B106.endif.endif.endif.endif.endif: ; preds = %B106.endif.endif.endif.else.endif.if, %B106.endif.endif.endif.else.endif
%.775.sroa.0.2 = phi i64 [ %arg.old_mat.5.1, %B106.endif.endif.endif.else.endif.if ], [ %.775.sroa.0.1, %B106.endif.endif.endif.else.endif ]
%.892 = mul i64 %.674.sroa.0.2, %arg.old_mat.5.1
%.895 = add i64 %.775.sroa.0.2, %.892
%.896 = getelementptr double, double* %arg.old_mat.4, i64 %.895
%.184.i = mul nsw i64 %.218.1.i, %.218.i
%.185.i = mul nsw i64 %.184.i, %.218.i.1
%.186.i = mul nsw i64 %.185.i, %.218.1.i.1
%.187.i = mul nsw i64 %.186.i, %.218.i.2
%.188.i = mul nsw i64 %.187.i, %.218.1.i.2
%retptr.repack161 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr to i8**
store i8* %arg.old_mat.0, i8** %retptr.repack161, align 8
%retptr.repack59 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 1
store i8* null, i8** %retptr.repack59, align 8
%retptr.repack61 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 2
store i64 %.188.i, i64* %retptr.repack61, align 8
%retptr.repack63 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 3
store i64 %arg.old_mat.3, i64* %retptr.repack63, align 8
%retptr.repack65 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 4
store double* %.896, double** %retptr.repack65, align 8
%retptr.repack67.repack = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 5, i64 0
store i64 %.218.i, i64* %retptr.repack67.repack, align 8
%retptr.repack67.repack71 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 5, i64 1
store i64 %.218.1.i, i64* %retptr.repack67.repack71, align 8
%retptr.repack67.repack73 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 5, i64 2
store i64 %.218.i.1, i64* %retptr.repack67.repack73, align 8
%retptr.repack67.repack75 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 5, i64 3
store i64 %.218.1.i.1, i64* %retptr.repack67.repack75, align 8
%retptr.repack67.repack77 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 5, i64 4
store i64 %.218.i.2, i64* %retptr.repack67.repack77, align 8
%retptr.repack67.repack79 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 5, i64 5
store i64 %.218.1.i.2, i64* %retptr.repack67.repack79, align 8
%retptr.repack69.repack = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 6, i64 0
store i64 %.218.i23, i64* %retptr.repack69.repack, align 8
%retptr.repack69.repack81 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 6, i64 1
store i64 %.218.1.i39, i64* %retptr.repack69.repack81, align 8
%retptr.repack69.repack83 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 6, i64 2
store i64 %.218.i23.1, i64* %retptr.repack69.repack83, align 8
%retptr.repack69.repack85 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 6, i64 3
store i64 %.218.1.i39.1, i64* %retptr.repack69.repack85, align 8
%retptr.repack69.repack87 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 6, i64 4
store i64 %.218.i23.2, i64* %retptr.repack69.repack87, align 8
%retptr.repack69.repack89 = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %retptr, i64 0, i32 6, i64 5
store i64 %.218.1.i39.2, i64* %retptr.repack69.repack89, align 8
br label %common.ret
}
define i8* @_ZN7cpython9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE(i8* nocapture readnone %py_closure, i8* %py_args, i8* nocapture readnone %py_kws) local_unnamed_addr {
entry:
%.5 = alloca i8*, align 8
%.6 = alloca i8*, align 8
%.7 = alloca i8*, align 8
%.8 = alloca i8*, align 8
%.9 = alloca i8*, align 8
%.10 = alloca i8*, align 8
%.11 = alloca i8*, align 8
%.12 = alloca i8*, align 8
%.13 = call i32 (i8*, i8*, i64, i64, ...) @PyArg_UnpackTuple(i8* %py_args, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.const.numba_transpose_reshape, i64 0, i64 0), i64 8, i64 8, i8** nonnull %.5, i8** nonnull %.6, i8** nonnull %.7, i8** nonnull %.8, i8** nonnull %.9, i8** nonnull %.10, i8** nonnull %.11, i8** nonnull %.12)
%.14 = icmp eq i32 %.13, 0
%.28 = alloca { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }, align 8
%.386 = alloca { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, align 8
%excinfo = alloca { i8*, i32, i8*, i8*, i32 }*, align 8
%0 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(136) %0, i8 0, i64 136, i1 false)
store { i8*, i32, i8*, i8*, i32 }* null, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8
%.493 = alloca { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, align 8
%1 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(136) %1, i8 0, i64 136, i1 false)
br i1 %.14, label %common.ret, label %entry.endif, !prof !10
common.ret: ; preds = %entry.endif.endif.endif.thread, %entry.endif.endif.endif.e...endif.8.endif.endif.endif, %entry.endif.endif.endif.e...endif.8.endif.endif.if.endif, %entry.endif.endif.endif.e...if.10, %entry.endif.endif.endif.e...if.11, %entry.endif.endif.endif.e...endif.11.endif, %arg0.err, %entry, %entry.endif.endif.endif.e...if.9, %entry.endif.endif.endif.e...endif.8.endif.if.endif.endif, %entry.endif.endif.endif.e...endif.8.endif.if.if, %entry.endif.if
%common.ret.op = phi i8* [ null, %entry.endif.if ], [ @_Py_NoneStruct, %entry.endif.endif.endif.e...endif.8.endif.if.if ], [ %.497, %entry.endif.endif.endif.e...endif.8.endif.if.endif.endif ], [ null, %entry.endif.endif.endif.e...if.9 ], [ null, %entry ], [ null, %arg0.err ], [ null, %entry.endif.endif.endif.e...endif.11.endif ], [ null, %entry.endif.endif.endif.e...if.11 ], [ null, %entry.endif.endif.endif.e...if.10 ], [ null, %entry.endif.endif.endif.e...endif.8.endif.endif.if.endif ], [ null, %entry.endif.endif.endif.e...endif.8.endif.endif.endif ], [ null, %entry.endif.endif.endif.thread ]
ret i8* %common.ret.op
entry.endif: ; preds = %entry
%.18 = load i8*, i8** @_ZN08NumbaEnv9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE, align 8
%.23 = icmp eq i8* %.18, null
br i1 %.23, label %entry.endif.if, label %entry.endif.endif, !prof !10
entry.endif.if: ; preds = %entry.endif
call void @PyErr_SetString(i8* nonnull @PyExc_RuntimeError, i8* getelementptr inbounds ([211 x i8], [211 x i8]* @".const.missing Environment: _ZN08NumbaEnv9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE", i64 0, i64 0))
br label %common.ret
entry.endif.endif: ; preds = %entry.endif
%.27 = load i8*, i8** %.5, align 8
%.31 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8*
%2 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8*
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %2, i8 0, i64 72, i1 false)
%.32 = call i32 @NRT_adapt_ndarray_from_python(i8* %.27, i8* nonnull %.31)
%3 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8*
%sunkaddr = getelementptr inbounds i8, i8* %3, i64 24
%4 = bitcast i8* %sunkaddr to i64*
%.36 = load i64, i64* %4, align 8
%.37 = icmp ne i64 %.36, 8
%.38 = icmp ne i32 %.32, 0
%.39 = or i1 %.38, %.37
br i1 %.39, label %entry.endif.endif.endif.thread, label %entry.endif.endif.endif.endif, !prof !10
entry.endif.endif.endif.thread: ; preds = %entry.endif.endif
call void @PyErr_SetString(i8* nonnull @PyExc_TypeError, i8* getelementptr inbounds ([89 x i8], [89 x i8]* @".const.can't unbox array from PyObject into native value. The object maybe of a different type", i64 0, i64 0))
br label %common.ret
entry.endif.endif.endif.endif: ; preds = %entry.endif.endif
%5 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8**
%.43.fca.0.load = load i8*, i8** %5, align 8
%6 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8*
%sunkaddr13 = getelementptr inbounds i8, i8* %6, i64 32
%7 = bitcast i8* %sunkaddr13 to double**
%.43.fca.4.load = load double*, double** %7, align 8
%8 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8*
%sunkaddr14 = getelementptr inbounds i8, i8* %8, i64 40
%9 = bitcast i8* %sunkaddr14 to i64*
%.43.fca.5.0.load = load i64, i64* %9, align 8
%10 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8*
%sunkaddr15 = getelementptr inbounds i8, i8* %10, i64 48
%11 = bitcast i8* %sunkaddr15 to i64*
%.43.fca.5.1.load = load i64, i64* %11, align 8
%12 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8*
%sunkaddr16 = getelementptr inbounds i8, i8* %12, i64 56
%13 = bitcast i8* %sunkaddr16 to i64*
%.43.fca.6.0.load = load i64, i64* %13, align 8
%14 = bitcast { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] }* %.28 to i8*
%sunkaddr17 = getelementptr inbounds i8, i8* %14, i64 64
%15 = bitcast i8* %sunkaddr17 to i64*
%.43.fca.6.1.load = load i64, i64* %15, align 8
%.52 = load i8*, i8** %.6, align 8
%.55 = call i8* @PyNumber_Long(i8* %.52)
%.56.not = icmp eq i8* %.55, null
br i1 %.56.not, label %entry.endif.endif.endif.endif.endif, label %entry.endif.endif.endif.endif.if, !prof !10
arg0.err: ; preds = %entry.endif.endif.endif.e...endif.7.endif.endif.endif, %entry.endif.endif.endif.e...endif.4.endif, %entry.endif.endif.endif.e...endif.1, %entry.endif.endif.endif.e...endif.endif.endif, %entry.endif.endif.endif.e...endif, %entry.endif.endif.endif.endif.endif.endif.endif, %entry.endif.endif.endif.endif.endif
call void @NRT_decref(i8* %.43.fca.0.load)
br label %common.ret
entry.endif.endif.endif.endif.if: ; preds = %entry.endif.endif.endif.endif
%.58 = call i64 @PyLong_AsLongLong(i8* nonnull %.55)
call void @Py_DecRef(i8* nonnull %.55)
br label %entry.endif.endif.endif.endif.endif
entry.endif.endif.endif.endif.endif: ; preds = %entry.endif.endif.endif.endif.if, %entry.endif.endif.endif.endif
%.53.0 = phi i64 [ %.58, %entry.endif.endif.endif.endif.if ], [ 0, %entry.endif.endif.endif.endif ]
%.63 = call i8* @PyErr_Occurred()
%.64.not = icmp eq i8* %.63, null
br i1 %.64.not, label %entry.endif.endif.endif.endif.endif.endif, label %arg0.err, !prof !30
entry.endif.endif.endif.endif.endif.endif: ; preds = %entry.endif.endif.endif.endif.endif
%.68 = load i8*, i8** %.7, align 8
%.71 = call i8* @PyNumber_Long(i8* %.68)
%.72.not = icmp eq i8* %.71, null
br i1 %.72.not, label %entry.endif.endif.endif.endif.endif.endif.endif, label %entry.endif.endif.endif.endif.endif.endif.if, !prof !10
entry.endif.endif.endif.endif.endif.endif.if: ; preds = %entry.endif.endif.endif.endif.endif.endif
%.74 = call i64 @PyLong_AsLongLong(i8* nonnull %.71)
call void @Py_DecRef(i8* nonnull %.71)
br label %entry.endif.endif.endif.endif.endif.endif.endif
entry.endif.endif.endif.endif.endif.endif.endif: ; preds = %entry.endif.endif.endif.endif.endif.endif.if, %entry.endif.endif.endif.endif.endif.endif
%.79 = call i8* @PyErr_Occurred()
%.80.not = icmp eq i8* %.79, null
br i1 %.80.not, label %entry.endif.endif.endif.endif.endif.endif.endif.endif, label %arg0.err, !prof !30
entry.endif.endif.endif.endif.endif.endif.endif.endif: ; preds = %entry.endif.endif.endif.endif.endif.endif.endif
%.84 = load i8*, i8** %.8, align 8
%.87 = call i8* @PyNumber_Long(i8* %.84)
%.88.not = icmp eq i8* %.87, null
br i1 %.88.not, label %entry.endif.endif.endif.e...endif, label %entry.endif.endif.endif.e...if, !prof !10
entry.endif.endif.endif.e...if: ; preds = %entry.endif.endif.endif.endif.endif.endif.endif.endif
%.90 = call i64 @PyLong_AsLongLong(i8* nonnull %.87)
call void @Py_DecRef(i8* nonnull %.87)
br label %entry.endif.endif.endif.e...endif
entry.endif.endif.endif.e...endif: ; preds = %entry.endif.endif.endif.e...if, %entry.endif.endif.endif.endif.endif.endif.endif.endif
%.85.0 = phi i64 [ %.90, %entry.endif.endif.endif.e...if ], [ 0, %entry.endif.endif.endif.endif.endif.endif.endif.endif ]
%.95 = call i8* @PyErr_Occurred()
%.96.not = icmp eq i8* %.95, null
br i1 %.96.not, label %entry.endif.endif.endif.e...endif.endif, label %arg0.err, !prof !30
entry.endif.endif.endif.e...endif.endif: ; preds = %entry.endif.endif.endif.e...endif
%.100 = load i8*, i8** %.9, align 8
%.103 = call i8* @PyNumber_Long(i8* %.100)
%.104.not = icmp eq i8* %.103, null
br i1 %.104.not, label %entry.endif.endif.endif.e...endif.endif.endif, label %entry.endif.endif.endif.e...endif.endif.if, !prof !10
entry.endif.endif.endif.e...endif.endif.if: ; preds = %entry.endif.endif.endif.e...endif.endif
%.106 = call i64 @PyLong_AsLongLong(i8* nonnull %.103)
call void @Py_DecRef(i8* nonnull %.103)
br label %entry.endif.endif.endif.e...endif.endif.endif
entry.endif.endif.endif.e...endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.endif.if, %entry.endif.endif.endif.e...endif.endif
%.111 = call i8* @PyErr_Occurred()
%.112.not = icmp eq i8* %.111, null
br i1 %.112.not, label %entry.endif.endif.endif.e...endif.endif.endif.endif, label %arg0.err, !prof !30
entry.endif.endif.endif.e...endif.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.endif.endif
%.116 = load i8*, i8** %.10, align 8
%.119 = call i8* @PyNumber_Long(i8* %.116)
%.120.not = icmp eq i8* %.119, null
br i1 %.120.not, label %entry.endif.endif.endif.e...endif.1, label %entry.endif.endif.endif.e...if.1, !prof !10
entry.endif.endif.endif.e...if.1: ; preds = %entry.endif.endif.endif.e...endif.endif.endif.endif
%.122 = call i64 @PyLong_AsLongLong(i8* nonnull %.119)
call void @Py_DecRef(i8* nonnull %.119)
br label %entry.endif.endif.endif.e...endif.1
entry.endif.endif.endif.e...endif.1: ; preds = %entry.endif.endif.endif.e...if.1, %entry.endif.endif.endif.e...endif.endif.endif.endif
%.117.0 = phi i64 [ %.122, %entry.endif.endif.endif.e...if.1 ], [ 0, %entry.endif.endif.endif.e...endif.endif.endif.endif ]
%.127 = call i8* @PyErr_Occurred()
%.128.not = icmp eq i8* %.127, null
br i1 %.128.not, label %entry.endif.endif.endif.e...endif.1.endif, label %arg0.err, !prof !30
entry.endif.endif.endif.e...endif.1.endif: ; preds = %entry.endif.endif.endif.e...endif.1
%.132 = load i8*, i8** %.11, align 8
%.138 = call i64 @PyTuple_Size(i8* %.132)
%.139.not = icmp eq i64 %.138, 6
br i1 %.139.not, label %entry.endif.endif.endif.e...endif.1.endif.endif, label %entry.endif.endif.endif.e...endif.1.endif.if, !prof !30
entry.endif.endif.endif.e...endif.1.endif.if: ; preds = %entry.endif.endif.endif.e...endif.1.endif
call void (i8*, i8*, ...) @PyErr_Format(i8* nonnull @PyExc_ValueError, i8* getelementptr inbounds ([59 x i8], [59 x i8]* @".const.size mismatch for tuple, expected 6 element(s) but got %zd", i64 0, i64 0), i64 %.138)
br label %entry.endif.endif.endif.e...endif.1.endif.endif
entry.endif.endif.endif.e...endif.1.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.1.endif.if, %entry.endif.endif.endif.e...endif.1.endif
%16 = icmp eq i64 %.138, 6
%17 = xor i1 %16, true
%.145 = call i8* @PyTuple_GetItem(i8* %.132, i64 0)
%.148 = call i8* @PyNumber_Long(i8* %.145)
%.149.not = icmp eq i8* %.148, null
br i1 %.149.not, label %entry.endif.endif.endif.e...endif.1.endif.endif.endif, label %entry.endif.endif.endif.e...endif.1.endif.endif.if, !prof !10
entry.endif.endif.endif.e...endif.1.endif.endif.if: ; preds = %entry.endif.endif.endif.e...endif.1.endif.endif
%.151 = call i64 @PyLong_AsLongLong(i8* nonnull %.148)
call void @Py_DecRef(i8* nonnull %.148)
br label %entry.endif.endif.endif.e...endif.1.endif.endif.endif
entry.endif.endif.endif.e...endif.1.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.1.endif.endif.if, %entry.endif.endif.endif.e...endif.1.endif.endif
%.146.0 = phi i64 [ %.151, %entry.endif.endif.endif.e...endif.1.endif.endif.if ], [ 0, %entry.endif.endif.endif.e...endif.1.endif.endif ]
%.156 = call i8* @PyErr_Occurred()
%.157.not = icmp eq i8* %.156, null
br i1 %.157.not, label %entry.endif.endif.endif.e...endif.2, label %entry.endif.endif.endif.e...if.2, !prof !30
entry.endif.endif.endif.e...if.2: ; preds = %entry.endif.endif.endif.e...endif.1.endif.endif.endif
br label %entry.endif.endif.endif.e...endif.2
entry.endif.endif.endif.e...endif.2: ; preds = %entry.endif.endif.endif.e...if.2, %entry.endif.endif.endif.e...endif.1.endif.endif.endif
%.133.1 = phi i1 [ true, %entry.endif.endif.endif.e...if.2 ], [ %17, %entry.endif.endif.endif.e...endif.1.endif.endif.endif ]
%.161 = call i8* @PyTuple_GetItem(i8* %.132, i64 1)
%.164 = call i8* @PyNumber_Long(i8* %.161)
%.165.not = icmp eq i8* %.164, null
br i1 %.165.not, label %entry.endif.endif.endif.e...endif.2.endif, label %entry.endif.endif.endif.e...endif.2.if, !prof !10
entry.endif.endif.endif.e...endif.2.if: ; preds = %entry.endif.endif.endif.e...endif.2
%.167 = call i64 @PyLong_AsLongLong(i8* nonnull %.164)
call void @Py_DecRef(i8* nonnull %.164)
br label %entry.endif.endif.endif.e...endif.2.endif
entry.endif.endif.endif.e...endif.2.endif: ; preds = %entry.endif.endif.endif.e...endif.2.if, %entry.endif.endif.endif.e...endif.2
%.162.0 = phi i64 [ %.167, %entry.endif.endif.endif.e...endif.2.if ], [ 0, %entry.endif.endif.endif.e...endif.2 ]
%.172 = call i8* @PyErr_Occurred()
%.173.not = icmp eq i8* %.172, null
br i1 %.173.not, label %entry.endif.endif.endif.e...endif.2.endif.endif, label %entry.endif.endif.endif.e...endif.2.endif.if, !prof !30
entry.endif.endif.endif.e...endif.2.endif.if: ; preds = %entry.endif.endif.endif.e...endif.2.endif
br label %entry.endif.endif.endif.e...endif.2.endif.endif
entry.endif.endif.endif.e...endif.2.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.2.endif.if, %entry.endif.endif.endif.e...endif.2.endif
%.133.2 = phi i1 [ true, %entry.endif.endif.endif.e...endif.2.endif.if ], [ %.133.1, %entry.endif.endif.endif.e...endif.2.endif ]
%.177 = call i8* @PyTuple_GetItem(i8* %.132, i64 2)
%.180 = call i8* @PyNumber_Long(i8* %.177)
%.181.not = icmp eq i8* %.180, null
br i1 %.181.not, label %entry.endif.endif.endif.e...endif.2.endif.endif.endif, label %entry.endif.endif.endif.e...endif.2.endif.endif.if, !prof !10
entry.endif.endif.endif.e...endif.2.endif.endif.if: ; preds = %entry.endif.endif.endif.e...endif.2.endif.endif
%.183 = call i64 @PyLong_AsLongLong(i8* nonnull %.180)
call void @Py_DecRef(i8* nonnull %.180)
br label %entry.endif.endif.endif.e...endif.2.endif.endif.endif
entry.endif.endif.endif.e...endif.2.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.2.endif.endif.if, %entry.endif.endif.endif.e...endif.2.endif.endif
%.178.0 = phi i64 [ %.183, %entry.endif.endif.endif.e...endif.2.endif.endif.if ], [ 0, %entry.endif.endif.endif.e...endif.2.endif.endif ]
%.188 = call i8* @PyErr_Occurred()
%.189.not = icmp eq i8* %.188, null
br i1 %.189.not, label %entry.endif.endif.endif.e...endif.3, label %entry.endif.endif.endif.e...if.3, !prof !30
entry.endif.endif.endif.e...if.3: ; preds = %entry.endif.endif.endif.e...endif.2.endif.endif.endif
br label %entry.endif.endif.endif.e...endif.3
entry.endif.endif.endif.e...endif.3: ; preds = %entry.endif.endif.endif.e...if.3, %entry.endif.endif.endif.e...endif.2.endif.endif.endif
%.133.3 = phi i1 [ true, %entry.endif.endif.endif.e...if.3 ], [ %.133.2, %entry.endif.endif.endif.e...endif.2.endif.endif.endif ]
%.193 = call i8* @PyTuple_GetItem(i8* %.132, i64 3)
%.196 = call i8* @PyNumber_Long(i8* %.193)
%.197.not = icmp eq i8* %.196, null
br i1 %.197.not, label %entry.endif.endif.endif.e...endif.3.endif, label %entry.endif.endif.endif.e...endif.3.if, !prof !10
entry.endif.endif.endif.e...endif.3.if: ; preds = %entry.endif.endif.endif.e...endif.3
%.199 = call i64 @PyLong_AsLongLong(i8* nonnull %.196)
call void @Py_DecRef(i8* nonnull %.196)
br label %entry.endif.endif.endif.e...endif.3.endif
entry.endif.endif.endif.e...endif.3.endif: ; preds = %entry.endif.endif.endif.e...endif.3.if, %entry.endif.endif.endif.e...endif.3
%.194.0 = phi i64 [ %.199, %entry.endif.endif.endif.e...endif.3.if ], [ 0, %entry.endif.endif.endif.e...endif.3 ]
%.204 = call i8* @PyErr_Occurred()
%.205.not = icmp eq i8* %.204, null
br i1 %.205.not, label %entry.endif.endif.endif.e...endif.3.endif.endif, label %entry.endif.endif.endif.e...endif.3.endif.if, !prof !30
entry.endif.endif.endif.e...endif.3.endif.if: ; preds = %entry.endif.endif.endif.e...endif.3.endif
br label %entry.endif.endif.endif.e...endif.3.endif.endif
entry.endif.endif.endif.e...endif.3.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.3.endif.if, %entry.endif.endif.endif.e...endif.3.endif
%.133.4 = phi i1 [ true, %entry.endif.endif.endif.e...endif.3.endif.if ], [ %.133.3, %entry.endif.endif.endif.e...endif.3.endif ]
%.209 = call i8* @PyTuple_GetItem(i8* %.132, i64 4)
%.212 = call i8* @PyNumber_Long(i8* %.209)
%.213.not = icmp eq i8* %.212, null
br i1 %.213.not, label %entry.endif.endif.endif.e...endif.3.endif.endif.endif, label %entry.endif.endif.endif.e...endif.3.endif.endif.if, !prof !10
entry.endif.endif.endif.e...endif.3.endif.endif.if: ; preds = %entry.endif.endif.endif.e...endif.3.endif.endif
%.215 = call i64 @PyLong_AsLongLong(i8* nonnull %.212)
call void @Py_DecRef(i8* nonnull %.212)
br label %entry.endif.endif.endif.e...endif.3.endif.endif.endif
entry.endif.endif.endif.e...endif.3.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.3.endif.endif.if, %entry.endif.endif.endif.e...endif.3.endif.endif
%.210.0 = phi i64 [ %.215, %entry.endif.endif.endif.e...endif.3.endif.endif.if ], [ 0, %entry.endif.endif.endif.e...endif.3.endif.endif ]
%.220 = call i8* @PyErr_Occurred()
%.221.not = icmp eq i8* %.220, null
br i1 %.221.not, label %entry.endif.endif.endif.e...endif.4, label %entry.endif.endif.endif.e...if.4, !prof !30
entry.endif.endif.endif.e...if.4: ; preds = %entry.endif.endif.endif.e...endif.3.endif.endif.endif
br label %entry.endif.endif.endif.e...endif.4
entry.endif.endif.endif.e...endif.4: ; preds = %entry.endif.endif.endif.e...if.4, %entry.endif.endif.endif.e...endif.3.endif.endif.endif
%.133.5 = phi i1 [ true, %entry.endif.endif.endif.e...if.4 ], [ %.133.4, %entry.endif.endif.endif.e...endif.3.endif.endif.endif ]
%.225 = call i8* @PyTuple_GetItem(i8* %.132, i64 5)
%.228 = call i8* @PyNumber_Long(i8* %.225)
%.229.not = icmp eq i8* %.228, null
br i1 %.229.not, label %entry.endif.endif.endif.e...endif.4.endif, label %entry.endif.endif.endif.e...endif.4.if, !prof !10
entry.endif.endif.endif.e...endif.4.if: ; preds = %entry.endif.endif.endif.e...endif.4
%.231 = call i64 @PyLong_AsLongLong(i8* nonnull %.228)
call void @Py_DecRef(i8* nonnull %.228)
br label %entry.endif.endif.endif.e...endif.4.endif
entry.endif.endif.endif.e...endif.4.endif: ; preds = %entry.endif.endif.endif.e...endif.4.if, %entry.endif.endif.endif.e...endif.4
%.226.0 = phi i64 [ %.231, %entry.endif.endif.endif.e...endif.4.if ], [ 0, %entry.endif.endif.endif.e...endif.4 ]
%.236 = call i8* @PyErr_Occurred()
%.237.not = icmp ne i8* %.236, null
%brmerge = select i1 %.237.not, i1 true, i1 %.133.5
br i1 %brmerge, label %arg0.err, label %entry.endif.endif.endif.e...endif.4.endif.endif.endif, !prof !31
entry.endif.endif.endif.e...endif.4.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.4.endif
%.259 = load i8*, i8** %.12, align 8
%.265 = call i64 @PyTuple_Size(i8* %.259)
%.266.not = icmp eq i64 %.265, 6
br i1 %.266.not, label %entry.endif.endif.endif.e...endif.5, label %entry.endif.endif.endif.e...if.5, !prof !30
entry.endif.endif.endif.e...if.5: ; preds = %entry.endif.endif.endif.e...endif.4.endif.endif.endif
call void (i8*, i8*, ...) @PyErr_Format(i8* nonnull @PyExc_ValueError, i8* getelementptr inbounds ([59 x i8], [59 x i8]* @".const.size mismatch for tuple, expected 6 element(s) but got %zd", i64 0, i64 0), i64 %.265)
br label %entry.endif.endif.endif.e...endif.5
entry.endif.endif.endif.e...endif.5: ; preds = %entry.endif.endif.endif.e...if.5, %entry.endif.endif.endif.e...endif.4.endif.endif.endif
%18 = icmp eq i64 %.265, 6
%19 = xor i1 %18, true
%.272 = call i8* @PyTuple_GetItem(i8* %.259, i64 0)
%.275 = call i8* @PyNumber_Long(i8* %.272)
%.276.not = icmp eq i8* %.275, null
br i1 %.276.not, label %entry.endif.endif.endif.e...endif.5.endif, label %entry.endif.endif.endif.e...endif.5.if, !prof !10
entry.endif.endif.endif.e...endif.5.if: ; preds = %entry.endif.endif.endif.e...endif.5
%.278 = call i64 @PyLong_AsLongLong(i8* nonnull %.275)
call void @Py_DecRef(i8* nonnull %.275)
br label %entry.endif.endif.endif.e...endif.5.endif
entry.endif.endif.endif.e...endif.5.endif: ; preds = %entry.endif.endif.endif.e...endif.5.if, %entry.endif.endif.endif.e...endif.5
%.273.0 = phi i64 [ %.278, %entry.endif.endif.endif.e...endif.5.if ], [ 0, %entry.endif.endif.endif.e...endif.5 ]
%.283 = call i8* @PyErr_Occurred()
%.284.not = icmp eq i8* %.283, null
br i1 %.284.not, label %entry.endif.endif.endif.e...endif.5.endif.endif, label %entry.endif.endif.endif.e...endif.5.endif.if, !prof !30
entry.endif.endif.endif.e...endif.5.endif.if: ; preds = %entry.endif.endif.endif.e...endif.5.endif
br label %entry.endif.endif.endif.e...endif.5.endif.endif
entry.endif.endif.endif.e...endif.5.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.5.endif.if, %entry.endif.endif.endif.e...endif.5.endif
%.260.1 = phi i1 [ true, %entry.endif.endif.endif.e...endif.5.endif.if ], [ %19, %entry.endif.endif.endif.e...endif.5.endif ]
%.288 = call i8* @PyTuple_GetItem(i8* %.259, i64 1)
%.291 = call i8* @PyNumber_Long(i8* %.288)
%.292.not = icmp eq i8* %.291, null
br i1 %.292.not, label %entry.endif.endif.endif.e...endif.5.endif.endif.endif, label %entry.endif.endif.endif.e...endif.5.endif.endif.if, !prof !10
entry.endif.endif.endif.e...endif.5.endif.endif.if: ; preds = %entry.endif.endif.endif.e...endif.5.endif.endif
%.294 = call i64 @PyLong_AsLongLong(i8* nonnull %.291)
call void @Py_DecRef(i8* nonnull %.291)
br label %entry.endif.endif.endif.e...endif.5.endif.endif.endif
entry.endif.endif.endif.e...endif.5.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.5.endif.endif.if, %entry.endif.endif.endif.e...endif.5.endif.endif
%.289.0 = phi i64 [ %.294, %entry.endif.endif.endif.e...endif.5.endif.endif.if ], [ 0, %entry.endif.endif.endif.e...endif.5.endif.endif ]
%.299 = call i8* @PyErr_Occurred()
%.300.not = icmp eq i8* %.299, null
br i1 %.300.not, label %entry.endif.endif.endif.e...endif.6, label %entry.endif.endif.endif.e...if.6, !prof !30
entry.endif.endif.endif.e...if.6: ; preds = %entry.endif.endif.endif.e...endif.5.endif.endif.endif
br label %entry.endif.endif.endif.e...endif.6
entry.endif.endif.endif.e...endif.6: ; preds = %entry.endif.endif.endif.e...if.6, %entry.endif.endif.endif.e...endif.5.endif.endif.endif
%.260.2 = phi i1 [ true, %entry.endif.endif.endif.e...if.6 ], [ %.260.1, %entry.endif.endif.endif.e...endif.5.endif.endif.endif ]
%.304 = call i8* @PyTuple_GetItem(i8* %.259, i64 2)
%.307 = call i8* @PyNumber_Long(i8* %.304)
%.308.not = icmp eq i8* %.307, null
br i1 %.308.not, label %entry.endif.endif.endif.e...endif.6.endif, label %entry.endif.endif.endif.e...endif.6.if, !prof !10
entry.endif.endif.endif.e...endif.6.if: ; preds = %entry.endif.endif.endif.e...endif.6
%.310 = call i64 @PyLong_AsLongLong(i8* nonnull %.307)
call void @Py_DecRef(i8* nonnull %.307)
br label %entry.endif.endif.endif.e...endif.6.endif
entry.endif.endif.endif.e...endif.6.endif: ; preds = %entry.endif.endif.endif.e...endif.6.if, %entry.endif.endif.endif.e...endif.6
%.305.0 = phi i64 [ %.310, %entry.endif.endif.endif.e...endif.6.if ], [ 0, %entry.endif.endif.endif.e...endif.6 ]
%.315 = call i8* @PyErr_Occurred()
%.316.not = icmp eq i8* %.315, null
br i1 %.316.not, label %entry.endif.endif.endif.e...endif.6.endif.endif, label %entry.endif.endif.endif.e...endif.6.endif.if, !prof !30
entry.endif.endif.endif.e...endif.6.endif.if: ; preds = %entry.endif.endif.endif.e...endif.6.endif
br label %entry.endif.endif.endif.e...endif.6.endif.endif
entry.endif.endif.endif.e...endif.6.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.6.endif.if, %entry.endif.endif.endif.e...endif.6.endif
%.260.3 = phi i1 [ true, %entry.endif.endif.endif.e...endif.6.endif.if ], [ %.260.2, %entry.endif.endif.endif.e...endif.6.endif ]
%.320 = call i8* @PyTuple_GetItem(i8* %.259, i64 3)
%.323 = call i8* @PyNumber_Long(i8* %.320)
%.324.not = icmp eq i8* %.323, null
br i1 %.324.not, label %entry.endif.endif.endif.e...endif.6.endif.endif.endif, label %entry.endif.endif.endif.e...endif.6.endif.endif.if, !prof !10
entry.endif.endif.endif.e...endif.6.endif.endif.if: ; preds = %entry.endif.endif.endif.e...endif.6.endif.endif
%.326 = call i64 @PyLong_AsLongLong(i8* nonnull %.323)
call void @Py_DecRef(i8* nonnull %.323)
br label %entry.endif.endif.endif.e...endif.6.endif.endif.endif
entry.endif.endif.endif.e...endif.6.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.6.endif.endif.if, %entry.endif.endif.endif.e...endif.6.endif.endif
%.321.0 = phi i64 [ %.326, %entry.endif.endif.endif.e...endif.6.endif.endif.if ], [ 0, %entry.endif.endif.endif.e...endif.6.endif.endif ]
%.331 = call i8* @PyErr_Occurred()
%.332.not = icmp eq i8* %.331, null
br i1 %.332.not, label %entry.endif.endif.endif.e...endif.7, label %entry.endif.endif.endif.e...if.7, !prof !30
entry.endif.endif.endif.e...if.7: ; preds = %entry.endif.endif.endif.e...endif.6.endif.endif.endif
br label %entry.endif.endif.endif.e...endif.7
entry.endif.endif.endif.e...endif.7: ; preds = %entry.endif.endif.endif.e...if.7, %entry.endif.endif.endif.e...endif.6.endif.endif.endif
%.260.4 = phi i1 [ true, %entry.endif.endif.endif.e...if.7 ], [ %.260.3, %entry.endif.endif.endif.e...endif.6.endif.endif.endif ]
%.336 = call i8* @PyTuple_GetItem(i8* %.259, i64 4)
%.339 = call i8* @PyNumber_Long(i8* %.336)
%.340.not = icmp eq i8* %.339, null
br i1 %.340.not, label %entry.endif.endif.endif.e...endif.7.endif, label %entry.endif.endif.endif.e...endif.7.if, !prof !10
entry.endif.endif.endif.e...endif.7.if: ; preds = %entry.endif.endif.endif.e...endif.7
%.342 = call i64 @PyLong_AsLongLong(i8* nonnull %.339)
call void @Py_DecRef(i8* nonnull %.339)
br label %entry.endif.endif.endif.e...endif.7.endif
entry.endif.endif.endif.e...endif.7.endif: ; preds = %entry.endif.endif.endif.e...endif.7.if, %entry.endif.endif.endif.e...endif.7
%.337.0 = phi i64 [ %.342, %entry.endif.endif.endif.e...endif.7.if ], [ 0, %entry.endif.endif.endif.e...endif.7 ]
%.347 = call i8* @PyErr_Occurred()
%.348.not = icmp eq i8* %.347, null
br i1 %.348.not, label %entry.endif.endif.endif.e...endif.7.endif.endif, label %entry.endif.endif.endif.e...endif.7.endif.if, !prof !30
entry.endif.endif.endif.e...endif.7.endif.if: ; preds = %entry.endif.endif.endif.e...endif.7.endif
br label %entry.endif.endif.endif.e...endif.7.endif.endif
entry.endif.endif.endif.e...endif.7.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.7.endif.if, %entry.endif.endif.endif.e...endif.7.endif
%.260.5 = phi i1 [ true, %entry.endif.endif.endif.e...endif.7.endif.if ], [ %.260.4, %entry.endif.endif.endif.e...endif.7.endif ]
%.352 = call i8* @PyTuple_GetItem(i8* %.259, i64 5)
%.355 = call i8* @PyNumber_Long(i8* %.352)
%.356.not = icmp eq i8* %.355, null
br i1 %.356.not, label %entry.endif.endif.endif.e...endif.7.endif.endif.endif, label %entry.endif.endif.endif.e...endif.7.endif.endif.if, !prof !10
entry.endif.endif.endif.e...endif.7.endif.endif.if: ; preds = %entry.endif.endif.endif.e...endif.7.endif.endif
%.358 = call i64 @PyLong_AsLongLong(i8* nonnull %.355)
call void @Py_DecRef(i8* nonnull %.355)
br label %entry.endif.endif.endif.e...endif.7.endif.endif.endif
entry.endif.endif.endif.e...endif.7.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.7.endif.endif.if, %entry.endif.endif.endif.e...endif.7.endif.endif
%.353.0 = phi i64 [ %.358, %entry.endif.endif.endif.e...endif.7.endif.endif.if ], [ 0, %entry.endif.endif.endif.e...endif.7.endif.endif ]
%.363 = call i8* @PyErr_Occurred()
%.364.not = icmp ne i8* %.363, null
%brmerge3 = select i1 %.364.not, i1 true, i1 %.260.5
br i1 %brmerge3, label %arg0.err, label %entry.endif.endif.endif.e...endif.8.endif, !prof !31
entry.endif.endif.endif.e...endif.8.endif: ; preds = %entry.endif.endif.endif.e...endif.7.endif.endif.endif
%20 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8**
%21 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(136) %21, i8 0, i64 136, i1 false)
%.406 = call i32 @_ZN9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE({ i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* nonnull %.386, { i8*, i32, i8*, i8*, i32 }** nonnull %excinfo, i8* %.43.fca.0.load, i8* undef, i64 undef, i64 8, double* %.43.fca.4.load, i64 %.43.fca.5.0.load, i64 %.43.fca.5.1.load, i64 %.43.fca.6.0.load, i64 %.43.fca.6.1.load, i64 %.53.0, i64 undef, i64 %.85.0, i64 undef, i64 %.117.0, i64 %.146.0, i64 %.162.0, i64 %.178.0, i64 %.194.0, i64 %.210.0, i64 %.226.0, i64 %.273.0, i64 %.289.0, i64 %.305.0, i64 %.321.0, i64 %.337.0, i64 %.353.0) #1
%.407 = load { i8*, i32, i8*, i8*, i32 }*, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8
%.414 = icmp sgt i32 %.406, 0
%.415 = select i1 %.414, { i8*, i32, i8*, i8*, i32 }* %.407, { i8*, i32, i8*, i8*, i32 }* undef
%.416.fca.0.load = load i8*, i8** %20, align 8
%22 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr18 = getelementptr inbounds i8, i8* %22, i64 8
%23 = bitcast i8* %sunkaddr18 to i8**
%.416.fca.1.load = load i8*, i8** %23, align 8
%24 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr19 = getelementptr inbounds i8, i8* %24, i64 16
%25 = bitcast i8* %sunkaddr19 to i64*
%.416.fca.2.load = load i64, i64* %25, align 8
%26 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr20 = getelementptr inbounds i8, i8* %26, i64 24
%27 = bitcast i8* %sunkaddr20 to i64*
%.416.fca.3.load = load i64, i64* %27, align 8
%28 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr21 = getelementptr inbounds i8, i8* %28, i64 32
%29 = bitcast i8* %sunkaddr21 to double**
%.416.fca.4.load = load double*, double** %29, align 8
%30 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr22 = getelementptr inbounds i8, i8* %30, i64 40
%31 = bitcast i8* %sunkaddr22 to i64*
%.416.fca.5.0.load = load i64, i64* %31, align 8
%32 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr23 = getelementptr inbounds i8, i8* %32, i64 48
%33 = bitcast i8* %sunkaddr23 to i64*
%.416.fca.5.1.load = load i64, i64* %33, align 8
%34 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr24 = getelementptr inbounds i8, i8* %34, i64 56
%35 = bitcast i8* %sunkaddr24 to i64*
%.416.fca.5.2.load = load i64, i64* %35, align 8
%36 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr25 = getelementptr inbounds i8, i8* %36, i64 64
%37 = bitcast i8* %sunkaddr25 to i64*
%.416.fca.5.3.load = load i64, i64* %37, align 8
%38 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr26 = getelementptr inbounds i8, i8* %38, i64 72
%39 = bitcast i8* %sunkaddr26 to i64*
%.416.fca.5.4.load = load i64, i64* %39, align 8
%40 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr27 = getelementptr inbounds i8, i8* %40, i64 80
%41 = bitcast i8* %sunkaddr27 to i64*
%.416.fca.5.5.load = load i64, i64* %41, align 8
%42 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr28 = getelementptr inbounds i8, i8* %42, i64 88
%43 = bitcast i8* %sunkaddr28 to i64*
%.416.fca.6.0.load = load i64, i64* %43, align 8
%44 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr29 = getelementptr inbounds i8, i8* %44, i64 96
%45 = bitcast i8* %sunkaddr29 to i64*
%.416.fca.6.1.load = load i64, i64* %45, align 8
%46 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr30 = getelementptr inbounds i8, i8* %46, i64 104
%47 = bitcast i8* %sunkaddr30 to i64*
%.416.fca.6.2.load = load i64, i64* %47, align 8
%48 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr31 = getelementptr inbounds i8, i8* %48, i64 112
%49 = bitcast i8* %sunkaddr31 to i64*
%.416.fca.6.3.load = load i64, i64* %49, align 8
%50 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr32 = getelementptr inbounds i8, i8* %50, i64 120
%51 = bitcast i8* %sunkaddr32 to i64*
%.416.fca.6.4.load = load i64, i64* %51, align 8
%52 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.386 to i8*
%sunkaddr33 = getelementptr inbounds i8, i8* %52, i64 128
%53 = bitcast i8* %sunkaddr33 to i64*
%.416.fca.6.5.load = load i64, i64* %53, align 8
call void @NRT_decref(i8* %.43.fca.0.load)
switch i32 %.406, label %entry.endif.endif.endif.e...endif.8.endif.endif [
i32 -2, label %entry.endif.endif.endif.e...endif.8.endif.if.if
i32 0, label %entry.endif.endif.endif.e...endif.8.endif.if.endif
]
entry.endif.endif.endif.e...endif.8.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.8.endif
%54 = icmp sgt i32 %.406, 0
br i1 %54, label %entry.endif.endif.endif.e...endif.8.endif.endif.if, label %entry.endif.endif.endif.e...endif.8.endif.endif.endif
entry.endif.endif.endif.e...endif.8.endif.if.if: ; preds = %entry.endif.endif.endif.e...endif.8.endif
call void @Py_IncRef(i8* nonnull @_Py_NoneStruct)
br label %common.ret
entry.endif.endif.endif.e...endif.8.endif.if.endif: ; preds = %entry.endif.endif.endif.e...endif.8.endif
%sunkaddr34 = getelementptr i8, i8* %.18, i64 24
%55 = bitcast i8* %sunkaddr34 to i8**
%.474 = load i8*, i8** %55, align 8
%.478.not = icmp eq i8* %.474, null
br i1 %.478.not, label %entry.endif.endif.endif.e...endif.8.endif.if.endif.else, label %entry.endif.endif.endif.e...endif.8.endif.if.endif.if
entry.endif.endif.endif.e...endif.8.endif.if.endif.if: ; preds = %entry.endif.endif.endif.e...endif.8.endif.if.endif
%.480 = call i8* @PyList_GetItem(i8* nonnull %.474, i64 0)
br label %entry.endif.endif.endif.e...endif.8.endif.if.endif.endif
entry.endif.endif.endif.e...endif.8.endif.if.endif.else: ; preds = %entry.endif.endif.endif.e...endif.8.endif.if.endif
call void @PyErr_SetString(i8* nonnull @PyExc_RuntimeError, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @".const.`env.consts` is NULL in `read_const`", i64 0, i64 0))
br label %entry.endif.endif.endif.e...endif.8.endif.if.endif.endif
entry.endif.endif.endif.e...endif.8.endif.if.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.8.endif.if.endif.else, %entry.endif.endif.endif.e...endif.8.endif.if.endif.if
%.475.0 = phi i8* [ %.480, %entry.endif.endif.endif.e...endif.8.endif.if.endif.if ], [ null, %entry.endif.endif.endif.e...endif.8.endif.if.endif.else ]
%56 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8**
%.492 = call i8* @numba_unpickle(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.const.pickledata.139741320154272, i64 0, i64 0), i32 32, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.const.pickledata.139741320154272.sha1, i64 0, i64 0))
store i8* %.416.fca.0.load, i8** %56, align 8
%57 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr35 = getelementptr inbounds i8, i8* %57, i64 8
%58 = bitcast i8* %sunkaddr35 to i8**
store i8* %.416.fca.1.load, i8** %58, align 8
%59 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr36 = getelementptr inbounds i8, i8* %59, i64 16
%60 = bitcast i8* %sunkaddr36 to i64*
store i64 %.416.fca.2.load, i64* %60, align 8
%61 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr37 = getelementptr inbounds i8, i8* %61, i64 24
%62 = bitcast i8* %sunkaddr37 to i64*
store i64 %.416.fca.3.load, i64* %62, align 8
%63 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr38 = getelementptr inbounds i8, i8* %63, i64 32
%64 = bitcast i8* %sunkaddr38 to double**
store double* %.416.fca.4.load, double** %64, align 8
%65 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr39 = getelementptr inbounds i8, i8* %65, i64 40
%66 = bitcast i8* %sunkaddr39 to i64*
store i64 %.416.fca.5.0.load, i64* %66, align 8
%67 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr40 = getelementptr inbounds i8, i8* %67, i64 48
%68 = bitcast i8* %sunkaddr40 to i64*
store i64 %.416.fca.5.1.load, i64* %68, align 8
%69 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr41 = getelementptr inbounds i8, i8* %69, i64 56
%70 = bitcast i8* %sunkaddr41 to i64*
store i64 %.416.fca.5.2.load, i64* %70, align 8
%71 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr42 = getelementptr inbounds i8, i8* %71, i64 64
%72 = bitcast i8* %sunkaddr42 to i64*
store i64 %.416.fca.5.3.load, i64* %72, align 8
%73 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr43 = getelementptr inbounds i8, i8* %73, i64 72
%74 = bitcast i8* %sunkaddr43 to i64*
store i64 %.416.fca.5.4.load, i64* %74, align 8
%75 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr44 = getelementptr inbounds i8, i8* %75, i64 80
%76 = bitcast i8* %sunkaddr44 to i64*
store i64 %.416.fca.5.5.load, i64* %76, align 8
%77 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr45 = getelementptr inbounds i8, i8* %77, i64 88
%78 = bitcast i8* %sunkaddr45 to i64*
store i64 %.416.fca.6.0.load, i64* %78, align 8
%79 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr46 = getelementptr inbounds i8, i8* %79, i64 96
%80 = bitcast i8* %sunkaddr46 to i64*
store i64 %.416.fca.6.1.load, i64* %80, align 8
%81 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr47 = getelementptr inbounds i8, i8* %81, i64 104
%82 = bitcast i8* %sunkaddr47 to i64*
store i64 %.416.fca.6.2.load, i64* %82, align 8
%83 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr48 = getelementptr inbounds i8, i8* %83, i64 112
%84 = bitcast i8* %sunkaddr48 to i64*
store i64 %.416.fca.6.3.load, i64* %84, align 8
%85 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr49 = getelementptr inbounds i8, i8* %85, i64 120
%86 = bitcast i8* %sunkaddr49 to i64*
store i64 %.416.fca.6.4.load, i64* %86, align 8
%87 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%sunkaddr50 = getelementptr inbounds i8, i8* %87, i64 128
%88 = bitcast i8* %sunkaddr50 to i64*
store i64 %.416.fca.6.5.load, i64* %88, align 8
%.496 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.493 to i8*
%.497 = call i8* @NRT_adapt_ndarray_to_python_acqref(i8* nonnull %.496, i8* %.492, i32 6, i32 0, i8* %.475.0)
call void @NRT_decref(i8* %.416.fca.0.load)
br label %common.ret
entry.endif.endif.endif.e...endif.8.endif.endif.if: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif
call void @PyErr_Clear()
%.515 = load { i8*, i32, i8*, i8*, i32 }, { i8*, i32, i8*, i8*, i32 }* %.415, align 8
%.516 = extractvalue { i8*, i32, i8*, i8*, i32 } %.515, 4
%.517 = icmp sgt i32 %.516, 0
%.520 = extractvalue { i8*, i32, i8*, i8*, i32 } %.515, 0
%.522 = extractvalue { i8*, i32, i8*, i8*, i32 } %.515, 1
br i1 %.517, label %entry.endif.endif.endif.e...endif.8.endif.endif.if.if, label %entry.endif.endif.endif.e...endif.8.endif.endif.if.else
entry.endif.endif.endif.e...endif.8.endif.endif.endif: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif
switch i32 %.406, label %entry.endif.endif.endif.e...endif.11.endif [
i32 -3, label %entry.endif.endif.endif.e...if.11
i32 -1, label %common.ret
]
entry.endif.endif.endif.e...endif.8.endif.endif.if.if: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif.if
%.523 = sext i32 %.522 to i64
%.524 = call i8* @PyBytes_FromStringAndSize(i8* %.520, i64 %.523)
%.525 = load { i8*, i32, i8*, i8*, i32 }, { i8*, i32, i8*, i8*, i32 }* %.415, align 8
%.526 = extractvalue { i8*, i32, i8*, i8*, i32 } %.525, 2
%.528 = extractvalue { i8*, i32, i8*, i8*, i32 } %.525, 3
%.529 = bitcast i8* %.528 to i8* (i8*)*
%.530 = call i8* %.529(i8* %.526)
%.531 = icmp eq i8* %.530, null
br i1 %.531, label %entry.endif.endif.endif.e...if.9, label %entry.endif.endif.endif.e...endif.9, !prof !10
entry.endif.endif.endif.e...endif.8.endif.endif.if.else: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif.if
%.544 = extractvalue { i8*, i32, i8*, i8*, i32 } %.515, 2
%.545 = call i8* @numba_unpickle(i8* %.520, i32 %.522, i8* %.544)
br label %entry.endif.endif.endif.e...endif.8.endif.endif.if.endif
entry.endif.endif.endif.e...endif.8.endif.endif.if.endif: ; preds = %entry.endif.endif.endif.e...endif.9, %entry.endif.endif.endif.e...endif.8.endif.endif.if.else
%.547 = phi i8* [ %.535, %entry.endif.endif.endif.e...endif.9 ], [ %.545, %entry.endif.endif.endif.e...endif.8.endif.endif.if.else ]
%.548.not = icmp eq i8* %.547, null
br i1 %.548.not, label %common.ret, label %entry.endif.endif.endif.e...if.10, !prof !10
entry.endif.endif.endif.e...if.9: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif.if.if
call void @PyErr_SetString(i8* nonnull @PyExc_RuntimeError, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @".const.Error creating Python tuple from runtime exception arguments", i64 0, i64 0))
br label %common.ret
entry.endif.endif.endif.e...endif.9: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif.if.if
%.535 = call i8* @numba_runtime_build_excinfo_struct(i8* %.524, i8* nonnull %.530)
%.536 = bitcast { i8*, i32, i8*, i8*, i32 }* %.415 to i8*
call void @NRT_Free(i8* nonnull %.536)
br label %entry.endif.endif.endif.e...endif.8.endif.endif.if.endif
entry.endif.endif.endif.e...if.10: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif.if.endif
call void @numba_do_raise(i8* nonnull %.547)
br label %common.ret
entry.endif.endif.endif.e...if.11: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif.endif
call void @PyErr_SetNone(i8* nonnull @PyExc_StopIteration)
br label %common.ret
entry.endif.endif.endif.e...endif.11.endif: ; preds = %entry.endif.endif.endif.e...endif.8.endif.endif.endif
call void @PyErr_SetString(i8* nonnull @PyExc_SystemError, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @".const.unknown error when calling native function", i64 0, i64 0))
br label %common.ret
}
declare i32 @PyArg_UnpackTuple(i8*, i8*, i64, i64, ...) local_unnamed_addr
declare void @PyErr_SetString(i8*, i8*) local_unnamed_addr
declare i32 @NRT_adapt_ndarray_from_python(i8* nocapture, i8* nocapture) local_unnamed_addr
declare i8* @PyNumber_Long(i8*) local_unnamed_addr
declare i64 @PyLong_AsLongLong(i8*) local_unnamed_addr
declare void @Py_DecRef(i8*) local_unnamed_addr
declare i8* @PyErr_Occurred() local_unnamed_addr
declare i64 @PyTuple_Size(i8*) local_unnamed_addr
declare void @PyErr_Format(i8*, i8*, ...) local_unnamed_addr
declare i8* @PyTuple_GetItem(i8*, i64) local_unnamed_addr
declare void @Py_IncRef(i8*) local_unnamed_addr
declare i8* @PyList_GetItem(i8*, i64) local_unnamed_addr
declare i8* @numba_unpickle(i8*, i32, i8*) local_unnamed_addr
declare i8* @NRT_adapt_ndarray_to_python_acqref(i8* nocapture, i8*, i32, i32, i8*) local_unnamed_addr
declare void @PyErr_Clear() local_unnamed_addr
declare i8* @PyBytes_FromStringAndSize(i8*, i64) local_unnamed_addr
declare i8* @numba_runtime_build_excinfo_struct(i8*, i8*) local_unnamed_addr
declare void @NRT_Free(i8*) local_unnamed_addr
declare void @numba_do_raise(i8*) local_unnamed_addr
declare void @PyErr_SetNone(i8*) local_unnamed_addr
define { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } @cfunc._ZN9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE({ i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] } %.1, i64 %.2, i64 %.3, i64 %.4, i64 %.5, i64 %.6, [6 x i64] %.7, [6 x i64] %.8) local_unnamed_addr {
entry:
%.10 = alloca { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, align 8
%.fca.0.gep1 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10 to i8**
%.fca.1.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 1
%.fca.2.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 2
%.fca.3.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 3
%.fca.4.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 4
%.fca.5.0.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 5, i64 0
%.fca.5.1.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 5, i64 1
%.fca.5.2.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 5, i64 2
%.fca.5.3.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 5, i64 3
%.fca.5.4.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 5, i64 4
%.fca.5.5.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 5, i64 5
%.fca.6.0.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 6, i64 0
%.fca.6.1.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 6, i64 1
%.fca.6.2.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 6, i64 2
%.fca.6.3.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 6, i64 3
%.fca.6.4.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 6, i64 4
%.fca.6.5.gep = getelementptr inbounds { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }, { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10, i64 0, i32 6, i64 5
%excinfo = alloca { i8*, i32, i8*, i8*, i32 }*, align 8
%0 = bitcast { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* %.10 to i8*
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(136) %0, i8 0, i64 136, i1 false)
store { i8*, i32, i8*, i8*, i32 }* null, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8
%extracted.meminfo = extractvalue { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] } %.1, 0
%extracted.itemsize = extractvalue { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] } %.1, 3
%extracted.data = extractvalue { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] } %.1, 4
%extracted.shape = extractvalue { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] } %.1, 5
%.14 = extractvalue [2 x i64] %extracted.shape, 0
%.15 = extractvalue [2 x i64] %extracted.shape, 1
%extracted.strides = extractvalue { i8*, i8*, i64, i64, double*, [2 x i64], [2 x i64] } %.1, 6
%.16 = extractvalue [2 x i64] %extracted.strides, 0
%.17 = extractvalue [2 x i64] %extracted.strides, 1
%.18 = extractvalue [6 x i64] %.7, 0
%.19 = extractvalue [6 x i64] %.7, 1
%.20 = extractvalue [6 x i64] %.7, 2
%.21 = extractvalue [6 x i64] %.7, 3
%.22 = extractvalue [6 x i64] %.7, 4
%.23 = extractvalue [6 x i64] %.7, 5
%.24 = extractvalue [6 x i64] %.8, 0
%.25 = extractvalue [6 x i64] %.8, 1
%.26 = extractvalue [6 x i64] %.8, 2
%.27 = extractvalue [6 x i64] %.8, 3
%.28 = extractvalue [6 x i64] %.8, 4
%.29 = extractvalue [6 x i64] %.8, 5
%.30 = call i32 @_ZN9froSTspin10misc_tools11numba_tools23numba_transpose_reshapeB3v50B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE5ArrayIdLi2E1C8readonly7alignedExxxxx8UniTupleIxLi6EE8UniTupleIxLi6EE({ i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] }* nonnull %.10, { i8*, i32, i8*, i8*, i32 }** nonnull %excinfo, i8* %extracted.meminfo, i8* undef, i64 undef, i64 %extracted.itemsize, double* %extracted.data, i64 %.14, i64 %.15, i64 %.16, i64 %.17, i64 %.2, i64 undef, i64 %.4, i64 undef, i64 %.6, i64 %.18, i64 %.19, i64 %.20, i64 %.21, i64 %.22, i64 %.23, i64 %.24, i64 %.25, i64 %.26, i64 %.27, i64 %.28, i64 %.29) #1
%.31 = load { i8*, i32, i8*, i8*, i32 }*, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8
%.38 = icmp sgt i32 %.30, 0
%.39 = select i1 %.38, { i8*, i32, i8*, i8*, i32 }* %.31, { i8*, i32, i8*, i8*, i32 }* undef
%.40.fca.0.load = load i8*, i8** %.fca.0.gep1, align 8
%.40.fca.1.load = load i8*, i8** %.fca.1.gep, align 8
%.40.fca.2.load = load i64, i64* %.fca.2.gep, align 8
%.40.fca.3.load = load i64, i64* %.fca.3.gep, align 8
%.40.fca.4.load = load double*, double** %.fca.4.gep, align 8
%.40.fca.5.0.load = load i64, i64* %.fca.5.0.gep, align 8
%.40.fca.5.1.load = load i64, i64* %.fca.5.1.gep, align 8
%.40.fca.5.2.load = load i64, i64* %.fca.5.2.gep, align 8
%.40.fca.5.3.load = load i64, i64* %.fca.5.3.gep, align 8
%.40.fca.5.4.load = load i64, i64* %.fca.5.4.gep, align 8
%.40.fca.5.5.load = load i64, i64* %.fca.5.5.gep, align 8
%.40.fca.6.0.load = load i64, i64* %.fca.6.0.gep, align 8
%.40.fca.6.1.load = load i64, i64* %.fca.6.1.gep, align 8
%.40.fca.6.2.load = load i64, i64* %.fca.6.2.gep, align 8
%.40.fca.6.3.load = load i64, i64* %.fca.6.3.gep, align 8
%.40.fca.6.4.load = load i64, i64* %.fca.6.4.gep, align 8
%.40.fca.6.5.load = load i64, i64* %.fca.6.5.gep, align 8
%1 = insertvalue [6 x i64] poison, i64 %.40.fca.5.0.load, 0
%2 = insertvalue [6 x i64] %1, i64 %.40.fca.5.1.load, 1
%3 = insertvalue [6 x i64] %2, i64 %.40.fca.5.2.load, 2
%4 = insertvalue [6 x i64] %3, i64 %.40.fca.5.3.load, 3
%5 = insertvalue [6 x i64] %4, i64 %.40.fca.5.4.load, 4
%.46 = insertvalue [6 x i64] %5, i64 %.40.fca.5.5.load, 5
%6 = insertvalue [6 x i64] poison, i64 %.40.fca.6.0.load, 0
%7 = insertvalue [6 x i64] %6, i64 %.40.fca.6.1.load, 1
%8 = insertvalue [6 x i64] %7, i64 %.40.fca.6.2.load, 2
%9 = insertvalue [6 x i64] %8, i64 %.40.fca.6.3.load, 3
%10 = insertvalue [6 x i64] %9, i64 %.40.fca.6.4.load, 4
%.47 = insertvalue [6 x i64] %10, i64 %.40.fca.6.5.load, 5
%inserted.meminfo = insertvalue { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } undef, i8* %.40.fca.0.load, 0
%inserted.parent = insertvalue { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } %inserted.meminfo, i8* %.40.fca.1.load, 1
%inserted.nitems = insertvalue { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } %inserted.parent, i64 %.40.fca.2.load, 2
%inserted.itemsize = insertvalue { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } %inserted.nitems, i64 %.40.fca.3.load, 3
%inserted.data = insertvalue { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } %inserted.itemsize, double* %.40.fca.4.load, 4
%inserted.shape = insertvalue { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } %inserted.data, [6 x i64] %.46, 5
%inserted.strides = insertvalue { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } %inserted.shape, [6 x i64] %.47, 6
%.73 = alloca i32, align 4
store i32 0, i32* %.73, align 4
switch i32 %.30, label %entry.if [
i32 -2, label %common.ret
i32 0, label %common.ret
]
entry.if: ; preds = %entry
%11 = icmp sgt i32 %.30, 0
call void @numba_gil_ensure(i32* nonnull %.73)
br i1 %11, label %entry.if.if, label %entry.if.endif
common.ret: ; preds = %entry, %entry, %.76, %entry.if.if.if.if
%common.ret.op = phi { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } [ zeroinitializer, %entry.if.if.if.if ], [ %inserted.strides, %.76 ], [ %inserted.strides, %entry ], [ %inserted.strides, %entry ]
ret { i8*, i8*, i64, i64, double*, [6 x i64], [6 x i64] } %common.ret.op
.76: ; preds = %entry.if.endif, %entry.if.if.endif, %entry.if.if.endif.if, %entry.if.endif.endif.endif, %entry.if.endif.if
%.124 = call i8* @PyUnicode_FromString(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @".const.<numba.core.cpu.CPUContext object at 0x7f17d8920580>", i64 0, i64 0))
call void @PyErr_WriteUnraisable(i8* %.124)
call void @Py_DecRef(i8* %.124)
call void @numba_gil_release(i32* nonnull %.73)
br label %common.ret
entry.if.if: ; preds = %entry.if
call void @PyErr_Clear()
%.79 = load { i8*, i32, i8*, i8*, i32 }, { i8*, i32, i8*, i8*, i32 }* %.39, align 8
%.80 = extractvalue { i8*, i32, i8*, i8*, i32 } %.79, 4
%.81 = icmp sgt i32 %.80, 0
%.84 = extractvalue { i8*, i32, i8*, i8*, i32 } %.79, 0
%.86 = extractvalue { i8*, i32, i8*, i8*, i32 } %.79, 1
br i1 %.81, label %entry.if.if.if, label %entry.if.if.else
entry.if.endif: ; preds = %entry.if
switch i32 %.30, label %entry.if.endif.endif.endif [
i32 -3, label %entry.if.endif.if
i32 -1, label %.76
]
entry.if.if.if: ; preds = %entry.if.if
%.87 = sext i32 %.86 to i64
%.88 = call i8* @PyBytes_FromStringAndSize(i8* %.84, i64 %.87)
%.89 = load { i8*, i32, i8*, i8*, i32 }, { i8*, i32, i8*, i8*, i32 }* %.39, align 8
%.90 = extractvalue { i8*, i32, i8*, i8*, i32 } %.89, 2
%.92 = extractvalue { i8*, i32, i8*, i8*, i32 } %.89, 3
%.93 = bitcast i8* %.92 to i8* (i8*)*
%.94 = call i8* %.93(i8* %.90)
%.95 = icmp eq i8* %.94, null
br i1 %.95, label %entry.if.if.if.if, label %entry.if.if.if.endif, !prof !10
entry.if.if.else: ; preds = %entry.if.if
%.108 = extractvalue { i8*, i32, i8*, i8*, i32 } %.79, 2
%.109 = call i8* @numba_unpickle(i8* %.84, i32 %.86, i8* %.108)
br label %entry.if.if.endif
entry.if.if.endif: ; preds = %entry.if.if.if.endif, %entry.if.if.else
%.111 = phi i8* [ %.99, %entry.if.if.if.endif ], [ %.109, %entry.if.if.else ]
%.112.not = icmp eq i8* %.111, null
br i1 %.112.not, label %.76, label %entry.if.if.endif.if, !prof !10
entry.if.if.if.if: ; preds = %entry.if.if.if
call void @PyErr_SetString(i8* nonnull @PyExc_RuntimeError, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @".const.Error creating Python tuple from runtime exception arguments.1", i64 0, i64 0))
br label %common.ret
entry.if.if.if.endif: ; preds = %entry.if.if.if
%.99 = call i8* @numba_runtime_build_excinfo_struct(i8* %.88, i8* nonnull %.94)
%.100 = bitcast { i8*, i32, i8*, i8*, i32 }* %.39 to i8*
call void @NRT_Free(i8* nonnull %.100)
br label %entry.if.if.endif
entry.if.if.endif.if: ; preds = %entry.if.if.endif
call void @numba_do_raise(i8* nonnull %.111)
br label %.76
entry.if.endif.if: ; preds = %entry.if.endif
call void @PyErr_SetNone(i8* nonnull @PyExc_StopIteration)
br label %.76
entry.if.endif.endif.endif: ; preds = %entry.if.endif
call void @PyErr_SetString(i8* nonnull @PyExc_SystemError, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @".const.unknown error when calling native function.2", i64 0, i64 0))
br label %.76
}
declare void @numba_gil_ensure(i32*) local_unnamed_addr
declare i8* @PyUnicode_FromString(i8*) local_unnamed_addr
declare void @PyErr_WriteUnraisable(i8*) local_unnamed_addr
declare void @numba_gil_release(i32*) local_unnamed_addr
define linkonce_odr i32 @_ZN9froSTspin10misc_tools11numba_tools28numba_compute_tensor_stridesB3v51B38c8tJTIcFKzyF2ILShI4CrgQElQb6HczSBAA_3dE8UniTupleIxLi2EEx8UniTupleIxLi6EE({ i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* noalias nocapture writeonly %retptr, { i8*, i32, i8*, i8*, i32 }** noalias nocapture writeonly %excinfo, i64 %arg.mat_strides.0, i64 %arg.mat_strides.1, i64 %arg.nrr, i64 %arg.tensor_shape.0, i64 %arg.tensor_shape.1, i64 %arg.tensor_shape.2, i64 %arg.tensor_shape.3, i64 %arg.tensor_shape.4, i64 %arg.tensor_shape.5) local_unnamed_addr {
entry:
%.7.i.i.i = tail call i8* @NRT_MemInfo_alloc_aligned(i64 48, i32 32), !noalias !32
%.8.i.i.i = icmp eq i8* %.7.i.i.i, null
br i1 %.8.i.i.i, label %B0.if, label %B0.endif.endif, !prof !10
B60: ; preds = %switch.end, %B60.preheader
%.148.034 = phi i64 [ %.217, %switch.end ], [ 1, %B60.preheader ]
%.217 = add nuw i64 %.148.034, 1
%0 = tail call { i64, i1 } @llvm.usub.with.overflow.i64(i64 6, i64 %.148.034)
%math = extractvalue { i64, i1 } %0, 0
%ov = extractvalue { i64, i1 } %0, 1
%.258 = select i1 %ov, i64 6, i64 0
%.259 = add i64 %.258, %math
%.272 = getelementptr i64, i64* %.6.i1.i, i64 %.259
%.273 = load i64, i64* %.272, align 8
switch i64 %math, label %switch.else [
i64 0, label %switch.end
i64 -6, label %switch.end
i64 1, label %switch.1
i64 -5, label %switch.1
i64 2, label %switch.2
i64 -4, label %switch.2
i64 3, label %switch.3
i64 -3, label %switch.3
i64 4, label %switch.4
i64 -2, label %switch.4
i64 5, label %switch.5
i64 -1, label %switch.5
]
B128: ; preds = %B128.preheader, %switch.end.1
%lsr.iv = phi i64 [ %6, %switch.end.1 ], [ %.344, %B128.preheader ]
%.508 = icmp slt i64 %lsr.iv, 0
%.509 = select i1 %.508, i64 6, i64 0
%1 = add i64 %.509, %lsr.iv
%.523 = getelementptr i64, i64* %.6.i1.i, i64 %1
%.524 = load i64, i64* %.523, align 8
switch i64 %lsr.iv, label %switch.else.1 [
i64 -1, label %switch.5.1
i64 -6, label %switch.end.1
i64 1, label %switch.1.1
i64 -5, label %switch.1.1
i64 2, label %switch.2.1
i64 -4, label %switch.2.1
i64 3, label %switch.3.1
i64 -3, label %switch.3.1
i64 4, label %switch.4.1
i64 -2, label %switch.4.1
i64 5, label %switch.5.1
]
common.ret: ; preds = %switch.else.1, %switch.else, %B0.if, %B168
%common.ret.op = phi i32 [ 0, %B168 ], [ 1, %switch.else ], [ 1, %switch.else.1 ], [ 1, %B0.if ]
ret i32 %common.ret.op
B168: ; preds = %switch.end.1, %B100.endif
%retptr.repack381 = bitcast { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %retptr to i8**
store i8* %.7.i.i.i, i8** %retptr.repack381, align 8
%retptr.repack2 = getelementptr inbounds { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %retptr, i64 0, i32 1
store i8* null, i8** %retptr.repack2, align 8
%retptr.repack4 = getelementptr inbounds { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %retptr, i64 0, i32 2
store i64 6, i64* %retptr.repack4, align 8
%retptr.repack6 = getelementptr inbounds { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %retptr, i64 0, i32 3
store i64 8, i64* %retptr.repack6, align 8
%retptr.repack8 = getelementptr inbounds { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %retptr, i64 0, i32 4
store i64* %.6.i1.i, i64** %retptr.repack8, align 8
%2 = getelementptr inbounds { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %retptr, i64 0, i32 5, i64 0
store i64 6, i64* %2, align 8
%3 = getelementptr inbounds { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }, { i8*, i8*, i64, i64, i64*, [1 x i64], [1 x i64] }* %retptr, i64 0, i32 6, i64 0
store i64 8, i64* %3, align 8
br label %common.ret
B0.if: ; preds = %entry
store { i8*, i32, i8*, i8*, i32 }* @.const.picklebuf.139740397001280, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8
br label %common.ret
B0.endif.endif: ; preds = %entry
%.5.i.i = getelementptr i8, i8* %.7.i.i.i, i64 24
%4 = bitcast i8* %.5.i.i to i64**
%.6.i1.i = load i64*, i64** %4, align 8, !noalias !42
%.120 = getelementptr i64, i64* %.6.i1.i, i64 5
store i64 %arg.mat_strides.1, i64* %.120, align 8
%notsub = add i64 %arg.nrr, -6
%.162.inv = icmp slt i64 %notsub, -1
br i1 %.162.inv, label %B60.preheader, label %B100.endif
B60.preheader: ; preds = %B0.endif.endif
%5 = sub i64 6, %arg.nrr
br label %B60
switch.else: ; preds = %B60
store { i8*, i32, i8*, i8*, i32 }* @.const.picklebuf.139740397330368, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8, !numba_exception_output !23
br label %common.ret
switch.end: ; preds = %switch.5, %switch.4, %switch.3, %switch.2, %switch.1, %B60, %B60
%.283 = phi i64 [ %arg.tensor_shape.1, %switch.1 ], [ %arg.tensor_shape.2, %switch.2 ], [ %arg.tensor_shape.3, %switch.3 ], [ %arg.tensor_shape.4, %switch.4 ], [ %arg.tensor_shape.5, %switch.5 ], [ %arg.tensor_shape.0, %B60 ], [ %arg.tensor_shape.0, %B60 ]
%.296 = mul nsw i64 %.283, %.273
%.299 = sub i64 5, %.148.034
%.313.inv = icmp slt i64 %.148.034, 6
%.314 = select i1 %.313.inv, i64 0, i64 6
%.315 = add i64 %.299, %.314
%.328 = getelementptr i64, i64* %.6.i1.i, i64 %.315
store i64 %.296, i64* %.328, align 8
%exitcond36.not = icmp eq i64 %.217, %5
br i1 %exitcond36.not, label %B100.endif, label %B60
switch.1: ; preds = %B60, %B60
br label %switch.end
switch.2: ; preds = %B60, %B60
br label %switch.end
switch.3: ; preds = %B60, %B60
br label %switch.end
switch.4: ; preds = %B60, %B60
br label %switch.end
switch.5: ; preds = %B60, %B60
br label %switch.end
B100.endif: ; preds = %switch.end, %B0.endif.endif
%.344 = add nsw i64 %arg.nrr, -1
%.358.inv = icmp sgt i64 %arg.nrr, 0
%.359 = select i1 %.358.inv, i64 0, i64 6
%.360 = add i64 %.359, %.344
%.373 = getelementptr i64, i64* %.6.i1.i, i64 %.360
store i64 %arg.mat_strides.0, i64* %.373, align 8
%.413 = icmp slt i64 %arg.nrr, 2
%.45531.not37 = icmp eq i64 %.344, 0
%.45531.not = select i1 %.413, i1 true, i1 %.45531.not37
br i1 %.45531.not, label %B168, label %B128.preheader
B128.preheader: ; preds = %B100.endif
br label %B128
switch.else.1: ; preds = %B128
store { i8*, i32, i8*, i8*, i32 }* @.const.picklebuf.139740397330368, { i8*, i32, i8*, i8*, i32 }** %excinfo, align 8, !numba_exception_output !23
br label %common.ret
switch.end.1: ; preds = %switch.5.1, %switch.4.1, %switch.3.1, %switch.2.1, %switch.1.1, %B128
%.534 = phi i64 [ %arg.tensor_shape.1, %switch.1.1 ], [ %arg.tensor_shape.2, %switch.2.1 ], [ %arg.tensor_shape.3, %switch.3.1 ], [ %arg.tensor_shape.4, %switch.4.1 ], [ %arg.tensor_shape.5, %switch.5.1 ], [ %arg.tensor_shape.0, %B128 ]
%.547 = mul nsw i64 %.534, %.524
%6 = add i64 %lsr.iv, -1
%.564 = icmp slt i64 %6, 0
%.565 = select i1 %.564, i64 6, i64 0
%7 = add i64 %.565, %lsr.iv
%8 = add i64 %7, -1
%.579 = getelementptr i64, i64* %.6.i1.i, i64 %8
store i64 %.547, i64* %.579, align 8
%exitcond.not = icmp eq i64 %6, 0
br i1 %exitcond.not, label %B168, label %B128
switch.1.1: ; preds = %B128, %B128
br label %switch.end.1
switch.2.1: ; preds = %B128, %B128
br label %switch.end.1
switch.3.1: ; preds = %B128, %B128
br label %switch.end.1
switch.4.1: ; preds = %B128, %B128
br label %switch.end.1
switch.5.1: ; preds = %B128, %B128
br label %switch.end.1
}
declare noalias i8* @NRT_MemInfo_alloc_aligned(i64, i32) local_unnamed_addr
; Function Attrs: mustprogress nofree nosync nounwind readnone speculatable willreturn
declare { i64, i1 } @llvm.usub.with.overflow.i64(i64, i64) #0
; Function Attrs: noinline
define linkonce_odr void @NRT_decref(i8* %.1) local_unnamed_addr #1 {
.3:
%.4 = icmp eq i8* %.1, null
br i1 %.4, label %common.ret, label %.3.endif, !prof !10
common.ret: ; preds = %.3, %.3.endif
ret void
.3.endif: ; preds = %.3
fence release
%.8 = bitcast i8* %.1 to i64*
%.4.i = atomicrmw sub i64* %.8, i64 1 monotonic, align 8
%.10 = icmp eq i64 %.4.i, 1
br i1 %.10, label %.3.endif.if, label %common.ret, !prof !10
.3.endif.if: ; preds = %.3.endif
fence acquire
tail call void @NRT_MemInfo_call_dtor(i8* nonnull %.1)
ret void
}
declare void @NRT_MemInfo_call_dtor(i8*) local_unnamed_addr
; Function Attrs: mustprogress nofree noinline norecurse nounwind willreturn
define linkonce_odr void @NRT_incref(i8* %.1) local_unnamed_addr #2 {
.3:
%.4 = icmp eq i8* %.1, null
br i1 %.4, label %common.ret, label %.3.endif, !prof !10
common.ret: ; preds = %.3.endif, %.3
ret void
.3.endif: ; preds = %.3
%.7 = bitcast i8* %.1 to i64*
%.4.i = atomicrmw add i64* %.7, i64 1 monotonic, align 8
br label %common.ret
}
; Function Attrs: argmemonly nofree nounwind willreturn writeonly
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #3
attributes #0 = { mustprogress nofree nosync nounwind readnone speculatable willreturn }
attributes #1 = { noinline }
attributes #2 = { mustprogress nofree noinline norecurse nounwind willreturn }
attributes #3 = { argmemonly nofree nounwind willreturn writeonly }
!0 = !{!1, !3, !4, !6, !7, !9}
!1 = distinct !{!1, !2, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %retptr"}
!2 = distinct !{!2, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj"}
!3 = distinct !{!3, !2, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %excinfo"}
!4 = distinct !{!4, !5, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %retptr"}
!5 = distinct !{!5, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj"}
!6 = distinct !{!6, !5, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %excinfo"}
!7 = distinct !{!7, !8, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29: %retptr"}
!8 = distinct !{!8, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29"}
!9 = distinct !{!9, !8, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29: %excinfo"}
!10 = !{!"branch_weights", i32 1, i32 99}
!11 = !{!7, !9}
!12 = !{!13, !15, !16, !18, !19, !21}
!13 = distinct !{!13, !14, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %retptr"}
!14 = distinct !{!14, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj"}
!15 = distinct !{!15, !14, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %excinfo"}
!16 = distinct !{!16, !17, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %retptr"}
!17 = distinct !{!17, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj"}
!18 = distinct !{!18, !17, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %excinfo"}
!19 = distinct !{!19, !20, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29: %retptr"}
!20 = distinct !{!20, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29"}
!21 = distinct !{!21, !20, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29: %excinfo"}
!22 = !{!19, !21}
!23 = !{i1 true}
!24 = !{!25}
!25 = distinct !{!25, !26, !"_ZN5numba2np6unsafe7ndarray14to_fixed_tuple12_3clocals_3e7codegen12_3clocals_3e4implB3v55B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAE5ArrayIxLi1E1C7mutable7alignedEx8UniTupleIxLi6EE: %retptr"}
!26 = distinct !{!26, !"_ZN5numba2np6unsafe7ndarray14to_fixed_tuple12_3clocals_3e7codegen12_3clocals_3e4implB3v55B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAE5ArrayIxLi1E1C7mutable7alignedEx8UniTupleIxLi6EE"}
!27 = !{!28}
!28 = distinct !{!28, !29, !"_ZN5numba2np6unsafe7ndarray14to_fixed_tuple12_3clocals_3e7codegen12_3clocals_3e4implB3v55B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAE5ArrayIxLi1E1C7mutable7alignedEx8UniTupleIxLi6EE: %retptr"}
!29 = distinct !{!29, !"_ZN5numba2np6unsafe7ndarray14to_fixed_tuple12_3clocals_3e7codegen12_3clocals_3e4implB3v55B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAE5ArrayIxLi1E1C7mutable7alignedEx8UniTupleIxLi6EE"}
!30 = !{!"branch_weights", i32 99, i32 1}
!31 = !{!"branch_weights", i32 199, i32 9801}
!32 = !{!33, !35, !36, !38, !39, !41}
!33 = distinct !{!33, !34, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %retptr"}
!34 = distinct !{!34, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj"}
!35 = distinct !{!35, !34, !"_ZN5numba2np8arrayobj18_ol_array_allocate12_3clocals_3e4implB2v6B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %excinfo"}
!36 = distinct !{!36, !37, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %retptr"}
!37 = distinct !{!37, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj"}
!38 = distinct !{!38, !37, !"_ZN5numba2np8arrayobj15_call_allocatorB2v5B42c8tJTC_2fWQI8IW1CiAAYKPM6RBFDjESZRVAJmaQIAEN29typeref_5b_3cclass_20_27numba4core5types8npytypes14Array_27_3e_5dExj: %excinfo"}
!39 = distinct !{!39, !40, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29: %retptr"}
!40 = distinct !{!40, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29"}
!41 = distinct !{!41, !40, !"_ZN5numba2np8arrayobj11ol_np_empty12_3clocals_3e4implB3v16B42c8tJTIcFKzyF2ILShI4CrgQElcaMVJhEEUSJJgA_3dE8UniTupleIxLi1EE16class_28int64_29: %excinfo"}
!42 = !{!39, !41} |
Hi!
When trying to manually set an array shape, pythran triggers an
AssertionError
.If I understand correctly the code of
visit_Attribute
, pythran fails to detect I want asetattr
and not agetattr
. This may be unsupported, but then the error message should mention it. The same errors arises when trying to setstrides
instead ofshape
.Context: I want to implement
However currently pythran copies the data, which I want to avoid. I am trying to use a lower level approach and to replicate
np.lib.stride_tricks.as_strided
by manually settingshape
andstrides
.The text was updated successfully, but these errors were encountered: