Skip to content
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

Compilation fails with named sparse arrays #1471

Closed
JohannesNaegele opened this issue May 25, 2024 · 7 comments · Fixed by #1473
Closed

Compilation fails with named sparse arrays #1471

JohannesNaegele opened this issue May 25, 2024 · 7 comments · Fixed by #1473

Comments

@JohannesNaegele
Copy link

Hi, this example fails only if I use named arrays. With sparse arrays alone it works:

using Enzyme
using SparseArrays
using NamedArrays

foo(x, y) = sum(x .* y)

named(x) = NamedArray(x, ([1, 2], ["a"]), ("Rows", "Cols"))

function test_gradient()
    x = named(sparse(
        [1.0, 2.0],
        [1, 1],
        [1, 2]
    ))
    y = deepcopy(x)
    dx = Enzyme.make_zero(x)
    dy = Enzyme.make_zero(y)
    Enzyme.autodiff(Reverse, foo, Duplicated(x, dx), Duplicated(y, dy))
    return dx, dy
end

test_gradient()
@JohannesNaegele
Copy link
Author

JohannesNaegele commented May 25, 2024

┌ Error: Exception while generating log record in module Main at /Users/johannes/mwe.jl:26
│ exception =
│ Enzyme execution failed.
│ Enzyme compilation failed.
│ Current scope:
│ ; Function Attrs: mustprogress willreturn
│ define "enzyme_inactive" "enzyme_type"="{[-1]:Integer}" i64 @preprocess_julia_foo_2466({} addrspace(10)* noundef nonnull align 8 dereferenceable(64) "enzyme_type"="{[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,-1]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer, [-1,24]:Pointer, [-1,24,0]:Pointer, [-1,24,0,-1]:Integer, [-1,24,8]:Integer, [-1,24,9]:Integer, [-1,24,10]:Integer, [-1,24,11]:Integer, [-1,24,12]:Integer, [-1,24,13]:Integer, [-1,24,14]:Integer, [-1,24,15]:Integer, [-1,24,16]:Integer, [-1,24,17]:Integer, [-1,24,18]:Integer, [-1,24,19]:Integer, [-1,24,20]:Integer, [-1,24,21]:Integer, [-1,24,22]:Integer, [-1,24,23]:Integer, [-1,24,24]:Integer, [-1,24,25]:Integer, [-1,24,26]:Integer, [-1,24,27]:Integer, [-1,24,28]:Integer, [-1,24,29]:Integer, [-1,24,30]:Integer, [-1,24,31]:Integer, [-1,24,32]:Integer, [-1,24,33]:Integer, [-1,24,34]:Integer, [-1,24,35]:Integer, [-1,24,36]:Integer, [-1,24,37]:Integer, [-1,24,38]:Integer, [-1,24,39]:Integer, [-1,32]:Pointer, [-1,32,0]:Pointer, [-1,32,0,-1]:Integer, [-1,32,8]:Integer, [-1,32,9]:Integer, [-1,32,10]:Integer, [-1,32,11]:Integer, [-1,32,12]:Integer, [-1,32,13]:Integer, [-1,32,14]:Integer, [-1,32,15]:Integer, [-1,32,16]:Integer, [-1,32,17]:Integer, [-1,32,18]:Integer, [-1,32,19]:Integer, [-1,32,20]:Integer, [-1,32,21]:Integer, [-1,32,22]:Integer, [-1,32,23]:Integer, [-1,32,24]:Integer, [-1,32,25]:Integer, [-1,32,26]:Integer, [-1,32,27]:Integer, [-1,32,28]:Integer, [-1,32,29]:Integer, [-1,32,30]:Integer, [-1,32,31]:Integer, [-1,32,32]:Integer, [-1,32,33]:Integer, [-1,32,34]:Integer, [-1,32,35]:Integer, [-1,32,36]:Integer, [-1,32,37]:Integer, [-1,32,38]:Integer, [-1,32,39]:Integer, [-1,40]:Pointer, [-1,40,0]:Pointer, [-1,40,0,0]:Pointer, [-1,40,0,0,-1]:Integer, [-1,40,0,8]:Integer, [-1,40,0,9]:Integer, [-1,40,0,10]:Integer, [-1,40,0,11]:Integer, [-1,40,0,12]:Integer, [-1,40,0,13]:Integer, [-1,40,0,14]:Integer, [-1,40,0,15]:Integer, [-1,40,0,16]:Integer, [-1,40,0,17]:Integer, [-1,40,0,18]:Integer, [-1,40,0,19]:Integer, [-1,40,0,20]:Integer, [-1,40,0,21]:Integer, [-1,40,0,22]:Integer, [-1,40,0,23]:Integer, [-1,40,0,24]:Integer, [-1,40,0,25]:Integer, [-1,40,0,26]:Integer, [-1,40,0,27]:Integer, [-1,40,0,28]:Integer, [-1,40,0,29]:Integer, [-1,40,0,30]:Integer, [-1,40,0,31]:Integer, [-1,40,0,32]:Integer, [-1,40,0,33]:Integer, [-1,40,0,34]:Integer, [-1,40,0,35]:Integer, [-1,40,0,36]:Integer, [-1,40,0,37]:Integer, [-1,40,0,38]:Integer, [-1,40,0,39]:Integer, [-1,40,8]:Pointer, [-1,40,8,0]:Pointer, [-1,40,8,0,-1]:Integer, [-1,40,8,8]:Integer, [-1,40,8,9]:Integer, [-1,40,8,10]:Integer, [-1,40,8,11]:Integer, [-1,40,8,12]:Integer, [-1,40,8,13]:Integer, [-1,40,8,14]:Integer, [-1,40,8,15]:Integer, [-1,40,8,16]:Integer, [-1,40,8,17]:Integer, [-1,40,8,18]:Integer, [-1,40,8,19]:Integer, [-1,40,8,20]:Integer, [-1,40,8,21]:Integer, [-1,40,8,22]:Integer, [-1,40,8,23]:Integer, [-1,40,8,24]:Integer, [-1,40,8,25]:Integer, [-1,40,8,26]:Integer, [-1,40,8,27]:Integer, [-1,40,8,28]:Integer, [-1,40,8,29]:Integer, [-1,40,8,30]:Integer, [-1,40,8,31]:Integer, [-1,40,8,32]:Integer, [-1,40,8,33]:Integer, [-1,40,8,34]:Integer, [-1,40,8,35]:Integer, [-1,40,8,36]:Integer, [-1,40,8,37]:Integer, [-1,40,8,38]:Integer, [-1,40,8,39]:Integer, [-1,40,16]:Pointer, [-1,40,16,0]:Pointer, [-1,40,16,0,-1]:Integer, [-1,40,16,8]:Integer, [-1,40,16,9]:Integer, [-1,40,16,10]:Integer, [-1,40,16,11]:Integer, [-1,40,16,12]:Integer, [-1,40,16,13]:Integer, [-1,40,16,14]:Integer, [-1,40,16,15]:Integer, [-1,40,16,16]:Integer, [-1,40,16,17]:Integer, [-1,40,16,18]:Integer, [-1,40,16,19]:Integer, [-1,40,16,20]:Integer, [-1,40,16,21]:Integer, [-1,40,16,22]:Integer, [-1,40,16,23]:Integer, [-1,40,16,24]:Integer, [-1,40,16,25]:Integer, [-1,40,16,26]:Integer, [-1,40,16,27]:Integer, [-1,40,16,28]:Integer, [-1,40,16,29]:Integer, [-1,40,16,30]:Integer, [-1,40,16,31]:Integer, [-1,40,16,32]:Integer, [-1,40,16,33]:Integer, [-1,40,16,34]:Integer, [-1,40,16,35]:Integer, [-1,40,16,36]:Integer, [-1,40,16,37]:Integer, [-1,40,16,38]:Integer, [-1,40,16,39]:Integer, [-1,40,24]:Integer, [-1,40,25]:Integer, [-1,40,26]:Integer, [-1,40,27]:Integer, [-1,40,28]:Integer, [-1,40,29]:Integer, [-1,40,30]:Integer, [-1,40,31]:Integer, [-1,40,32]:Integer, [-1,40,33]:Integer, [-1,40,34]:Integer, [-1,40,35]:Integer, [-1,40,36]:Integer, [-1,40,37]:Integer, [-1,40,38]:Integer, [-1,40,39]:Integer, [-1,40,40]:Integer, [-1,48]:Pointer, [-1,48,0]:Pointer, [-1,48,0,0]:Pointer, [-1,48,0,0,-1]:Integer, [-1,48,0,8]:Integer, [-1,48,0,9]:Integer, [-1,48,0,10]:Integer, [-1,48,0,11]:Integer, [-1,48,0,12]:Integer, [-1,48,0,13]:Integer, [-1,48,0,14]:Integer, [-1,48,0,15]:Integer, [-1,48,0,16]:Integer, [-1,48,0,17]:Integer, [-1,48,0,18]:Integer, [-1,48,0,19]:Integer, [-1,48,0,20]:Integer, [-1,48,0,21]:Integer, [-1,48,0,22]:Integer, [-1,48,0,23]:Integer, [-1,48,0,24]:Integer, [-1,48,0,25]:Integer, [-1,48,0,26]:Integer, [-1,48,0,27]:Integer, [-1,48,0,28]:Integer, [-1,48,0,29]:Integer, [-1,48,0,30]:Integer, [-1,48,0,31]:Integer, [-1,48,0,32]:Integer, [-1,48,0,33]:Integer, [-1,48,0,34]:Integer, [-1,48,0,35]:Integer, [-1,48,0,36]:Integer, [-1,48,0,37]:Integer, [-1,48,0,38]:Integer, [-1,48,0,39]:Integer, [-1,48,8]:Pointer, [-1,48,8,0]:Pointer, [-1,48,8,0,0]:Pointer, [-1,48,8,8]:Integer, [-1,48,8,9]:Integer, [-1,48,8,10]:Integer, [-1,48,8,11]:Integer, [-1,48,8,12]:Integer, [-1,48,8,13]:Integer, [-1,48,8,14]:Integer, [-1,48,8,15]:Integer, [-1,48,8,16]:Integer, [-1,48,8,17]:Integer, [-1,48,8,18]:Integer, [-1,48,8,19]:Integer, [-1,48,8,20]:Integer, [-1,48,8,21]:Integer, [-1,48,8,22]:Integer, [-1,48,8,23]:Integer, [-1,48,8,24]:Integer, [-1,48,8,25]:Integer, [-1,48,8,26]:Integer, [-1,48,8,27]:Integer, [-1,48,8,28]:Integer, [-1,48,8,29]:Integer, [-1,48,8,30]:Integer, [-1,48,8,31]:Integer, [-1,48,8,32]:Integer, [-1,48,8,33]:Integer, [-1,48,8,34]:Integer, [-1,48,8,35]:Integer, [-1,48,8,36]:Integer, [-1,48,8,37]:Integer, [-1,48,8,38]:Integer, [-1,48,8,39]:Integer, [-1,48,16]:Pointer, [-1,48,16,0]:Pointer, [-1,48,16,0,-1]:Integer, [-1,48,16,8]:Integer, [-1,48,16,9]:Integer, [-1,48,16,10]:Integer, [-1,48,16,11]:Integer, [-1,48,16,12]:Integer, [-1,48,16,13]:Integer, [-1,48,16,14]:Integer, [-1,48,16,15]:Integer, [-1,48,16,16]:Integer, [-1,48,16,17]:Integer, [-1,48,16,18]:Integer, [-1,48,16,19]:Integer, [-1,48,16,20]:Integer, [-1,48,16,21]:Integer, [-1,48,16,22]:Integer, [-1,48,16,23]:Integer, [-1,48,16,24]:Integer, [-1,48,16,25]:Integer, [-1,48,16,26]:Integer, [-1,48,16,27]:Integer, [-1,48,16,28]:Integer, [-1,48,16,29]:Integer, [-1,48,16,30]:Integer, [-1,48,16,31]:Integer, [-1,48,16,32]:Integer, [-1,48,16,33]:Integer, [-1,48,16,34]:Integer, [-1,48,16,35]:Integer, [-1,48,16,36]:Integer, [-1,48,16,37]:Integer, [-1,48,16,38]:Integer, [-1,48,16,39]:Integer, [-1,48,24]:Integer, [-1,48,25]:Integer, [-1,48,26]:Integer, [-1,48,27]:Integer, [-1,48,28]:Integer, [-1,48,29]:Integer, [-1,48,30]:Integer, [-1,48,31]:Integer, [-1,48,32]:Integer, [-1,48,33]:Integer, [-1,48,34]:Integer, [-1,48,35]:Integer, [-1,48,36]:Integer, [-1,48,37]:Integer, [-1,48,38]:Integer, [-1,48,39]:Integer, [-1,48,40]:Integer, [-1,56]:Pointer, [-1,56,-1]:Pointer}" "enzymejl_parmtype"="4474993040" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* noundef nonnull align 8 dereferenceable(64) "enzyme_type"="{[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,-1]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer, [-1,24]:Pointer, [-1,24,0]:Pointer, [-1,24,0,-1]:Integer, [-1,24,8]:Integer, [-1,24,9]:Integer, [-1,24,10]:Integer, [-1,24,11]:Integer, [-1,24,12]:Integer, [-1,24,13]:Integer, [-1,24,14]:Integer, [-1,24,15]:Integer, [-1,24,16]:Integer, [-1,24,17]:Integer, [-1,24,18]:Integer, [-1,24,19]:Integer, [-1,24,20]:Integer, [-1,24,21]:Integer, [-1,24,22]:Integer, [-1,24,23]:Integer, [-1,24,24]:Integer, [-1,24,25]:Integer, [-1,24,26]:Integer, [-1,24,27]:Integer, [-1,24,28]:Integer, [-1,24,29]:Integer, [-1,24,30]:Integer, [-1,24,31]:Integer, [-1,24,32]:Integer, [-1,24,33]:Integer, [-1,24,34]:Integer, [-1,24,35]:Integer, [-1,24,36]:Integer, [-1,24,37]:Integer, [-1,24,38]:Integer, [-1,24,39]:Integer, [-1,32]:Pointer, [-1,32,0]:Pointer, [-1,32,0,-1]:Integer, [-1,32,8]:Integer, [-1,32,9]:Integer, [-1,32,10]:Integer, [-1,32,11]:Integer, [-1,32,12]:Integer, [-1,32,13]:Integer, [-1,32,14]:Integer, [-1,32,15]:Integer, [-1,32,16]:Integer, [-1,32,17]:Integer, [-1,32,18]:Integer, [-1,32,19]:Integer, [-1,32,20]:Integer, [-1,32,21]:Integer, [-1,32,22]:Integer, [-1,32,23]:Integer, [-1,32,24]:Integer, [-1,32,25]:Integer, [-1,32,26]:Integer, [-1,32,27]:Integer, [-1,32,28]:Integer, [-1,32,29]:Integer, [-1,32,30]:Integer, [-1,32,31]:Integer, [-1,32,32]:Integer, [-1,32,33]:Integer, [-1,32,34]:Integer, [-1,32,35]:Integer, [-1,32,36]:Integer, [-1,32,37]:Integer, [-1,32,38]:Integer, [-1,32,39]:Integer, [-1,40]:Pointer, [-1,40,0]:Pointer, [-1,40,0,0]:Pointer, [-1,40,0,0,-1]:Integer, [-1,40,0,8]:Integer, [-1,40,0,9]:Integer, [-1,40,0,10]:Integer, [-1,40,0,11]:Integer, [-1,40,0,12]:Integer, [-1,40,0,13]:Integer, [-1,40,0,14]:Integer, [-1,40,0,15]:Integer, [-1,40,0,16]:Integer, [-1,40,0,17]:Integer, [-1,40,0,18]:Integer, [-1,40,0,19]:Integer, [-1,40,0,20]:Integer, [-1,40,0,21]:Integer, [-1,40,0,22]:Integer, [-1,40,0,23]:Integer, [-1,40,0,24]:Integer, [-1,40,0,25]:Integer, [-1,40,0,26]:Integer, [-1,40,0,27]:Integer, [-1,40,0,28]:Integer, [-1,40,0,29]:Integer, [-1,40,0,30]:Integer, [-1,40,0,31]:Integer, [-1,40,0,32]:Integer, [-1,40,0,33]:Integer, [-1,40,0,34]:Integer, [-1,40,0,35]:Integer, [-1,40,0,36]:Integer, [-1,40,0,37]:Integer, [-1,40,0,38]:Integer, [-1,40,0,39]:Integer, [-1,40,8]:Pointer, [-1,40,8,0]:Pointer, [-1,40,8,0,-1]:Integer, [-1,40,8,8]:Integer, [-1,40,8,9]:Integer, [-1,40,8,10]:Integer, [-1,40,8,11]:Integer, [-1,40,8,12]:Integer, [-1,40,8,13]:Integer, [-1,40,8,14]:Integer, [-1,40,8,15]:Integer, [-1,40,8,16]:Integer, [-1,40,8,17]:Integer, [-1,40,8,18]:Integer, [-1,40,8,19]:Integer, [-1,40,8,20]:Integer, [-1,40,8,21]:Integer, [-1,40,8,22]:Integer, [-1,40,8,23]:Integer, [-1,40,8,24]:Integer, [-1,40,8,25]:Integer, [-1,40,8,26]:Integer, [-1,40,8,27]:Integer, [-1,40,8,28]:Integer, [-1,40,8,29]:Integer, [-1,40,8,30]:Integer, [-1,40,8,31]:Integer, [-1,40,8,32]:Integer, [-1,40,8,33]:Integer, [-1,40,8,34]:Integer, [-1,40,8,35]:Integer, [-1,40,8,36]:Integer, [-1,40,8,37]:Integer, [-1,40,8,38]:Integer, [-1,40,8,39]:Integer, [-1,40,16]:Pointer, [-1,40,16,0]:Pointer, [-1,40,16,0,-1]:Integer, [-1,40,16,8]:Integer, [-1,40,16,9]:Integer, [-1,40,16,10]:Integer, [-1,40,16,11]:Integer, [-1,40,16,12]:Integer, [-1,40,16,13]:Integer, [-1,40,16,14]:Integer, [-1,40,16,15]:Integer, [-1,40,16,16]:Integer, [-1,40,16,17]:Integer, [-1,40,16,18]:Integer, [-1,40,16,19]:Integer, [-1,40,16,20]:Integer, [-1,40,16,21]:Integer, [-1,40,16,22]:Integer, [-1,40,16,23]:Integer, [-1,40,16,24]:Integer, [-1,40,16,25]:Integer, [-1,40,16,26]:Integer, [-1,40,16,27]:Integer, [-1,40,16,28]:Integer, [-1,40,16,29]:Integer, [-1,40,16,30]:Integer, [-1,40,16,31]:Integer, [-1,40,16,32]:Integer, [-1,40,16,33]:Integer, [-1,40,16,34]:Integer, [-1,40,16,35]:Integer, [-1,40,16,36]:Integer, [-1,40,16,37]:Integer, [-1,40,16,38]:Integer, [-1,40,16,39]:Integer, [-1,40,24]:Integer, [-1,40,25]:Integer, [-1,40,26]:Integer, [-1,40,27]:Integer, [-1,40,28]:Integer, [-1,40,29]:Integer, [-1,40,30]:Integer, [-1,40,31]:Integer, [-1,40,32]:Integer, [-1,40,33]:Integer, [-1,40,34]:Integer, [-1,40,35]:Integer, [-1,40,36]:Integer, [-1,40,37]:Integer, [-1,40,38]:Integer, [-1,40,39]:Integer, [-1,40,40]:Integer, [-1,48]:Pointer, [-1,48,0]:Pointer, [-1,48,0,0]:Pointer, [-1,48,0,0,-1]:Integer, [-1,48,0,8]:Integer, [-1,48,0,9]:Integer, [-1,48,0,10]:Integer, [-1,48,0,11]:Integer, [-1,48,0,12]:Integer, [-1,48,0,13]:Integer, [-1,48,0,14]:Integer, [-1,48,0,15]:Integer, [-1,48,0,16]:Integer, [-1,48,0,17]:Integer, [-1,48,0,18]:Integer, [-1,48,0,19]:Integer, [-1,48,0,20]:Integer, [-1,48,0,21]:Integer, [-1,48,0,22]:Integer, [-1,48,0,23]:Integer, [-1,48,0,24]:Integer, [-1,48,0,25]:Integer, [-1,48,0,26]:Integer, [-1,48,0,27]:Integer, [-1,48,0,28]:Integer, [-1,48,0,29]:Integer, [-1,48,0,30]:Integer, [-1,48,0,31]:Integer, [-1,48,0,32]:Integer, [-1,48,0,33]:Integer, [-1,48,0,34]:Integer, [-1,48,0,35]:Integer, [-1,48,0,36]:Integer, [-1,48,0,37]:Integer, [-1,48,0,38]:Integer, [-1,48,0,39]:Integer, [-1,48,8]:Pointer, [-1,48,8,0]:Pointer, [-1,48,8,0,0]:Pointer, [-1,48,8,8]:Integer, [-1,48,8,9]:Integer, [-1,48,8,10]:Integer, [-1,48,8,11]:Integer, [-1,48,8,12]:Integer, [-1,48,8,13]:Integer, [-1,48,8,14]:Integer, [-1,48,8,15]:Integer, [-1,48,8,16]:Integer, [-1,48,8,17]:Integer, [-1,48,8,18]:Integer, [-1,48,8,19]:Integer, [-1,48,8,20]:Integer, [-1,48,8,21]:Integer, [-1,48,8,22]:Integer, [-1,48,8,23]:Integer, [-1,48,8,24]:Integer, [-1,48,8,25]:Integer, [-1,48,8,26]:Integer, [-1,48,8,27]:Integer, [-1,48,8,28]:Integer, [-1,48,8,29]:Integer, [-1,48,8,30]:Integer, [-1,48,8,31]:Integer, [-1,48,8,32]:Integer, [-1,48,8,33]:Integer, [-1,48,8,34]:Integer, [-1,48,8,35]:Integer, [-1,48,8,36]:Integer, [-1,48,8,37]:Integer, [-1,48,8,38]:Integer, [-1,48,8,39]:Integer, [-1,48,16]:Pointer, [-1,48,16,0]:Pointer, [-1,48,16,0,-1]:Integer, [-1,48,16,8]:Integer, [-1,48,16,9]:Integer, [-1,48,16,10]:Integer, [-1,48,16,11]:Integer, [-1,48,16,12]:Integer, [-1,48,16,13]:Integer, [-1,48,16,14]:Integer, [-1,48,16,15]:Integer, [-1,48,16,16]:Integer, [-1,48,16,17]:Integer, [-1,48,16,18]:Integer, [-1,48,16,19]:Integer, [-1,48,16,20]:Integer, [-1,48,16,21]:Integer, [-1,48,16,22]:Integer, [-1,48,16,23]:Integer, [-1,48,16,24]:Integer, [-1,48,16,25]:Integer, [-1,48,16,26]:Integer, [-1,48,16,27]:Integer, [-1,48,16,28]:Integer, [-1,48,16,29]:Integer, [-1,48,16,30]:Integer, [-1,48,16,31]:Integer, [-1,48,16,32]:Integer, [-1,48,16,33]:Integer, [-1,48,16,34]:Integer, [-1,48,16,35]:Integer, [-1,48,16,36]:Integer, [-1,48,16,37]:Integer, [-1,48,16,38]:Integer, [-1,48,16,39]:Integer, [-1,48,24]:Integer, [-1,48,25]:Integer, [-1,48,26]:Integer, [-1,48,27]:Integer, [-1,48,28]:Integer, [-1,48,29]:Integer, [-1,48,30]:Integer, [-1,48,31]:Integer, [-1,48,32]:Integer, [-1,48,33]:Integer, [-1,48,34]:Integer, [-1,48,35]:Integer, [-1,48,36]:Integer, [-1,48,37]:Integer, [-1,48,38]:Integer, [-1,48,39]:Integer, [-1,48,40]:Integer, [-1,56]:Pointer, [-1,56,-1]:Pointer}" "enzymejl_parmtype"="4474993040" "enzymejl_parmtype_ref"="2" %1) local_unnamed_addr #60 !dbg !1784 {
│ top:
│ %newstruct18 = alloca [2 x [1 x i64]], align 8
│ %2 = alloca { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, align 8
│ %3 = alloca [3 x {} addrspace(10)], align 8
│ %4 = alloca { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, align 8
│ %5 = alloca [3 x {} addrspace(10)], align 8
│ %6 = alloca { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, align 8
│ %newstruct136 = alloca [1 x [2 x i64]], align 8
│ %7 = alloca { {} addrspace(10), [1 x [2 x i64]], i64, i64 }, align 8
│ %newstruct150 = alloca [2 x [1 x i64]], align 8
│ %8 = call {}
** @julia.get_pgcstack() #64
│ %current_task1258 = getelementptr inbounds {}, {}* %8, i64 -14
│ %current_task1 = bitcast {}*** %current_task1258 to {}**
│ %ptls_field259 = getelementptr inbounds {}, {}* %8, i64 2
│ %9 = bitcast {}*** %ptls_field259 to i64***
│ %ptls_load260261 = load i64**, i64*** %9, align 8, !tbaa !49
│ %10 = getelementptr inbounds i64*, i64** %ptls_load260261, i64 2
│ %safepoint = load i64*, i64** %10, align 8, !tbaa !53
│ fence syncscope("singlethread") seq_cst
│ call void @julia.safepoint(i64* %safepoint) #64, !dbg !1785
│ fence syncscope("singlethread") seq_cst
│ %11 = addrspacecast {} addrspace(10)* %0 to {} addrspace(11), !dbg !1786
│ %12 = addrspacecast {} addrspace(10)
%0 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1786
│ %.elt = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %12, i64 0, i32 0, !dbg !1786
│ %.unpack = load i64, i64 addrspace(11)* %.elt, align 8, !dbg !1786, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt262 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %12, i64 0, i32 1, !dbg !1786
│ %.unpack263 = load i64, i64 addrspace(11)* %.elt262, align 8, !dbg !1786, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt264 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %12, i64 0, i32 2, !dbg !1786
│ %.unpack265 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt264, align 8, !dbg !1786, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt266 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %12, i64 0, i32 3, !dbg !1786
│ %.unpack267 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt266, align 8, !dbg !1786, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt268 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %12, i64 0, i32 4, !dbg !1786
│ %.unpack269 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt268, align 8, !dbg !1786, !tbaa !88, !alias.scope !69, !noalias !90
│ %13 = call i64 @llvm.smax.i64(i64 %.unpack, i64 noundef 0) #64, !dbg !1792
│ %14 = call i64 @llvm.smax.i64(i64 %.unpack263, i64 noundef 0) #64, !dbg !1792
│ %15 = addrspacecast {} addrspace(10)* %1 to {} addrspace(11), !dbg !1786
│ %16 = addrspacecast {} addrspace(10)
%1 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1786
│ %.elt270 = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %16, i64 0, i32 0, !dbg !1786
│ %.unpack271 = load i64, i64 addrspace(11)* %.elt270, align 8, !dbg !1786, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt272 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %16, i64 0, i32 1, !dbg !1786
│ %.unpack273 = load i64, i64 addrspace(11)* %.elt272, align 8, !dbg !1786, !tbaa !88, !alias.scope !69, !noalias !90
│ %17 = call i64 @llvm.smax.i64(i64 %.unpack271, i64 noundef 0) #64, !dbg !1792
│ %18 = call i64 @llvm.smax.i64(i64 %.unpack273, i64 noundef 0) #64, !dbg !1792
│ %19 = icmp eq i64 %17, %13, !dbg !1798
│ %20 = icmp eq i64 %13, 1, !dbg !1800
│ %value_phi = or i1 %20, %19, !dbg !1800
│ br i1 %value_phi, label %L39, label %L27, !dbg !1801

│ L27: ; preds = %top
│ %.not396 = icmp eq i64 %17, 1, !dbg !1800
│ br i1 %.not396, label %L39, label %L35, !dbg !1801

│ L35: ; preds = %L27
│ %21 = call noalias nonnull "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @ijl_box_int64(i64 signext %13) #65, !dbg !1801
│ %22 = call noalias nonnull "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @ijl_box_int64(i64 signext %17) #65, !dbg !1801
│ %23 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10), {} addrspace(10)**, i32, {} addrspace(10)), {} addrspace(10), {} addrspace(10), ...) @julia.call2({} addrspace(10) ({} addrspace(10), {} addrspace(10)**, i32, {} addrspace(10))* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5201690160 to {}) to {} addrspace(10)), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5153875472 to {}) to {} addrspace(10)), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 5278343696 to {}) to {} addrspace(10)), {} addrspace(10)* nonnull %21, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 5278343664 to {}) to {} addrspace(10)), {} addrspace(10)* nonnull %22) #66, !dbg !1801
│ %box179 = call noalias nonnull dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Pointer}" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5202092656 to {}) to {} addrspace(10))) #67, !dbg !1801
│ %24 = bitcast {} addrspace(10)* %box179 to [1 x {} addrspace(10)] addrspace(10), !dbg !1801
│ %25 = getelementptr [1 x {} addrspace(10)], [1 x {} addrspace(10)] addrspace(10)* %24, i64 0, i64 0, !dbg !1801
│ store {} addrspace(10)* %23, {} addrspace(10)* addrspace(10)* %25, align 8, !dbg !1801, !tbaa !65, !alias.scope !69, !noalias !1804
│ %26 = addrspacecast {} addrspace(10)* %box179 to {} addrspace(12), !dbg !1801
│ call void @ijl_throw({} addrspace(12)
%26) #68, !dbg !1801
│ unreachable, !dbg !1801

│ L39: ; preds = %L27, %top
│ %.sroa.0234.0 = phi i64 [ %17, %top ], [ %13, %L27 ]
│ %27 = icmp eq i64 %18, %14, !dbg !1807
│ %28 = icmp eq i64 %14, 1, !dbg !1809
│ %value_phi12 = or i1 %28, %27, !dbg !1809
│ br i1 %value_phi12, label %L64, label %L52, !dbg !1810

│ L52: ; preds = %L39
│ %.not395 = icmp eq i64 %18, 1, !dbg !1809
│ br i1 %.not395, label %L64, label %L60, !dbg !1810

│ L60: ; preds = %L52
│ %29 = call noalias nonnull "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @ijl_box_int64(i64 signext %14) #65, !dbg !1810
│ %30 = call noalias nonnull "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @ijl_box_int64(i64 signext %18) #65, !dbg !1810
│ %31 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10), {} addrspace(10)**, i32, {} addrspace(10)), {} addrspace(10), {} addrspace(10), ...) @julia.call2({} addrspace(10) ({} addrspace(10), {} addrspace(10)**, i32, {} addrspace(10))* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5201690160 to {}) to {} addrspace(10)), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5153875472 to {}) to {} addrspace(10)), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 5278343696 to {}) to {} addrspace(10)), {} addrspace(10)* nonnull %29, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 5278343664 to {}) to {} addrspace(10)), {} addrspace(10)* nonnull %30) #66, !dbg !1810
│ %box = call noalias nonnull dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Pointer}" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5202092656 to {}) to {} addrspace(10))) #67, !dbg !1810
│ %32 = bitcast {} addrspace(10)* %box to [1 x {} addrspace(10)] addrspace(10), !dbg !1810
│ %33 = getelementptr [1 x {} addrspace(10)], [1 x {} addrspace(10)] addrspace(10)* %32, i64 0, i64 0, !dbg !1810
│ store {} addrspace(10)* %31, {} addrspace(10)* addrspace(10)* %33, align 8, !dbg !1810, !tbaa !65, !alias.scope !69, !noalias !1804
│ %34 = addrspacecast {} addrspace(10)* %box to {} addrspace(12), !dbg !1810
│ call void @ijl_throw({} addrspace(12)
%34) #68, !dbg !1810
│ unreachable, !dbg !1810

│ L64: ; preds = %L52, %L39
│ %.sroa.0230.0 = phi i64 [ %18, %L39 ], [ %14, %L52 ]
│ %memcpy_refined_dst = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct18, i64 0, i64 0, i64 0, !dbg !1802
│ store i64 %.sroa.0234.0, i64* %memcpy_refined_dst, align 8, !dbg !1802, !tbaa !278, !alias.scope !280, !noalias !1812
│ %memcpy_refined_dst20 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct18, i64 0, i64 1, i64 0, !dbg !1802
│ store i64 %.sroa.0230.0, i64* %memcpy_refined_dst20, align 8, !dbg !1802, !tbaa !278, !alias.scope !280, !noalias !1812
│ %.fca.0.gep221 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %4, i64 0, i32 0, !dbg !1813
│ store i64 %.unpack, i64* %.fca.0.gep221, align 8, !dbg !1813, !noalias !1817
│ %.fca.1.gep223 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %4, i64 0, i32 1, !dbg !1813
│ store i64 %.unpack263, i64* %.fca.1.gep223, align 8, !dbg !1813, !noalias !1817
│ %.fca.2.gep225 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %4, i64 0, i32 2, !dbg !1813
│ store {} addrspace(10)* %.unpack265, {} addrspace(10)** %.fca.2.gep225, align 8, !dbg !1813, !noalias !1817
│ %.fca.3.gep227 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %4, i64 0, i32 3, !dbg !1813
│ store {} addrspace(10)* %.unpack267, {} addrspace(10)** %.fca.3.gep227, align 8, !dbg !1813, !noalias !1817
│ %.fca.4.gep229 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %4, i64 0, i32 4, !dbg !1813
│ store {} addrspace(10)* %.unpack269, {} addrspace(10)** %.fca.4.gep229, align 8, !dbg !1813, !noalias !1817
│ %35 = addrspacecast { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %4 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1813
│ call fastcc void @julia__sparsesimilar_2601({ i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }* noalias nocapture nofree noundef nonnull writeonly sret({ i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }) align 8 dereferenceable(40) %2, [3 x {} addrspace(10)] noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(24) "enzymejl_returnRoots" %3, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %35) #64, !dbg !1813
│ %36 = addrspacecast {} addrspace(10)* %0 to i8 addrspace(11), !dbg !1818
│ %37 = getelementptr inbounds i8, i8 addrspace(11)
%36, i64 40, !dbg !1818
│ %.elt280 = bitcast i8 addrspace(11)* %37 to {} addrspace(10)* addrspace(11), !dbg !1818
│ %.unpack281 = load {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %.elt280, align 8, !dbg !1818, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt282 = getelementptr inbounds i8, i8 addrspace(11)* %36, i64 48, !dbg !1818
│ %38 = bitcast i8 addrspace(11)* %.elt282 to {} addrspace(10)* addrspace(11), !dbg !1818
│ %.unpack283 = load {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %38, align 8, !dbg !1818, !tbaa !88, !alias.scope !69, !noalias !90
│ %getfield_addr = getelementptr inbounds i8, i8 addrspace(11)* %36, i64 56, !dbg !1818
│ %39 = bitcast i8 addrspace(11)* %getfield_addr to {} addrspace(10)* addrspace(11), !dbg !1818
│ %getfield25 = load atomic {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %39 unordered, align 8, !dbg !1818, !tbaa !88, !alias.scope !69, !noalias !90, !nonnull !48
│ %typeof = call "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* @julia.typeof({} addrspace(10)* nonnull %getfield25) #69, !dbg !1814
│ %40 = call i32 @ijl_subtype({} addrspace(10)* nonnull %typeof, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 4522025360 to {}) to {} addrspace(10))) #64, !dbg !1814
│ %.not = icmp eq i32 %40, 0, !dbg !1814
│ br i1 %.not, label %L139, label %L105, !dbg !1814

│ L105: ; preds = %L64
│ %41 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 0, !dbg !1819
│ %42 = addrspacecast {} addrspace(10)* %.unpack281 to i8 addrspace(11), !dbg !1822
│ %getfield_addr26 = getelementptr inbounds i8, i8 addrspace(11)
%42, i64 8, !dbg !1822
│ %43 = bitcast i8 addrspace(11)* %getfield_addr26 to {} addrspace(10)* addrspace(11), !dbg !1822
│ %getfield27 = load atomic {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %43 unordered, align 8, !dbg !1822, !tbaa !88, !alias.scope !69, !noalias !90, !nonnull !48, !dereferenceable !237, !align !238
│ %44 = addrspacecast {} addrspace(10)* %getfield27 to { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11), !dbg !1825
│ %arraylen_ptr = getelementptr inbounds { i8 addrspace(13), i64, i16, i16, i32 }, { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11)* %44, i64 0, i32 1, !dbg !1825
│ %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !1825, !tbaa !170, !range !173, !alias.scope !174, !noalias !175
│ %45 = getelementptr inbounds i8, i8 addrspace(11)* %42, i64 24, !dbg !1822
│ %46 = bitcast i8 addrspace(11)* %45 to i64 addrspace(11), !dbg !1822
│ %47 = load i64, i64 addrspace(11)
%46, align 8, !dbg !1822, !tbaa !88, !alias.scope !69, !noalias !90
│ %48 = sub i64 %arraylen, %47, !dbg !1826
│ %unbox = load i64, i64* %41, align 8, !dbg !1827, !tbaa !278, !alias.scope !280, !noalias !281
│ %.not284 = icmp eq i64 %unbox, %48, !dbg !1827
│ br i1 %.not284, label %L122, label %L134, !dbg !1830

│ L122: ; preds = %L105
│ %49 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 1, !dbg !1819
│ %50 = addrspacecast {} addrspace(10)* %.unpack283 to i8 addrspace(11), !dbg !1822
│ %getfield_addr28 = getelementptr inbounds i8, i8 addrspace(11)
%50, i64 8, !dbg !1822
│ %51 = bitcast i8 addrspace(11)* %getfield_addr28 to {} addrspace(10)* addrspace(11), !dbg !1822
│ %getfield29 = load atomic {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %51 unordered, align 8, !dbg !1822, !tbaa !88, !alias.scope !69, !noalias !90, !nonnull !48, !dereferenceable !237, !align !238
│ %52 = addrspacecast {} addrspace(10)* %getfield29 to { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11), !dbg !1825
│ %arraylen_ptr30 = getelementptr inbounds { i8 addrspace(13), i64, i16, i16, i32 }, { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11)* %52, i64 0, i32 1, !dbg !1825
│ %arraylen31 = load i64, i64 addrspace(11)* %arraylen_ptr30, align 8, !dbg !1825, !tbaa !170, !range !173, !alias.scope !174, !noalias !175
│ %53 = getelementptr inbounds i8, i8 addrspace(11)* %50, i64 24, !dbg !1822
│ %54 = bitcast i8 addrspace(11)* %53 to i64 addrspace(11), !dbg !1822
│ %55 = load i64, i64 addrspace(11)
%54, align 8, !dbg !1822, !tbaa !88, !alias.scope !69, !noalias !90
│ %56 = sub i64 %arraylen31, %55, !dbg !1826
│ %unbox154 = load i64, i64* %49, align 8, !dbg !1831, !tbaa !278, !alias.scope !280, !noalias !281
│ %.not397 = icmp eq i64 %unbox154, %56, !dbg !1831
│ br i1 %.not397, label %L132, label %L134, !dbg !1820

│ L132: ; preds = %L122
│ %newstruct34 = call noalias nonnull dereferenceable(64) "enzyme_type"="{[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,-1]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer, [-1,24]:Pointer, [-1,24,0]:Pointer, [-1,24,0,-1]:Integer, [-1,24,8]:Integer, [-1,24,9]:Integer, [-1,24,10]:Integer, [-1,24,11]:Integer, [-1,24,12]:Integer, [-1,24,13]:Integer, [-1,24,14]:Integer, [-1,24,15]:Integer, [-1,24,16]:Integer, [-1,24,17]:Integer, [-1,24,18]:Integer, [-1,24,19]:Integer, [-1,24,20]:Integer, [-1,24,21]:Integer, [-1,24,22]:Integer, [-1,24,23]:Integer, [-1,24,24]:Integer, [-1,24,25]:Integer, [-1,24,26]:Integer, [-1,24,27]:Integer, [-1,24,28]:Integer, [-1,24,29]:Integer, [-1,24,30]:Integer, [-1,24,31]:Integer, [-1,24,32]:Integer, [-1,24,33]:Integer, [-1,24,34]:Integer, [-1,24,35]:Integer, [-1,24,36]:Integer, [-1,24,37]:Integer, [-1,24,38]:Integer, [-1,24,39]:Integer, [-1,32]:Pointer, [-1,32,0]:Pointer, [-1,32,0,-1]:Integer, [-1,32,8]:Integer, [-1,32,9]:Integer, [-1,32,10]:Integer, [-1,32,11]:Integer, [-1,32,12]:Integer, [-1,32,13]:Integer, [-1,32,14]:Integer, [-1,32,15]:Integer, [-1,32,16]:Integer, [-1,32,17]:Integer, [-1,32,18]:Integer, [-1,32,19]:Integer, [-1,32,20]:Integer, [-1,32,21]:Integer, [-1,32,22]:Integer, [-1,32,23]:Integer, [-1,32,24]:Integer, [-1,32,25]:Integer, [-1,32,26]:Integer, [-1,32,27]:Integer, [-1,32,28]:Integer, [-1,32,29]:Integer, [-1,32,30]:Integer, [-1,32,31]:Integer, [-1,32,32]:Integer, [-1,32,33]:Integer, [-1,32,34]:Integer, [-1,32,35]:Integer, [-1,32,36]:Integer, [-1,32,37]:Integer, [-1,32,38]:Integer, [-1,32,39]:Integer, [-1,40]:Pointer, [-1,40,0]:Pointer, [-1,40,0,0]:Pointer, [-1,40,0,0,-1]:Integer, [-1,40,0,8]:Integer, [-1,40,0,9]:Integer, [-1,40,0,10]:Integer, [-1,40,0,11]:Integer, [-1,40,0,12]:Integer, [-1,40,0,13]:Integer, [-1,40,0,14]:Integer, [-1,40,0,15]:Integer, [-1,40,0,16]:Integer, [-1,40,0,17]:Integer, [-1,40,0,18]:Integer, [-1,40,0,19]:Integer, [-1,40,0,20]:Integer, [-1,40,0,21]:Integer, [-1,40,0,22]:Integer, [-1,40,0,23]:Integer, [-1,40,0,24]:Integer, [-1,40,0,25]:Integer, [-1,40,0,26]:Integer, [-1,40,0,27]:Integer, [-1,40,0,28]:Integer, [-1,40,0,29]:Integer, [-1,40,0,30]:Integer, [-1,40,0,31]:Integer, [-1,40,0,32]:Integer, [-1,40,0,33]:Integer, [-1,40,0,34]:Integer, [-1,40,0,35]:Integer, [-1,40,0,36]:Integer, [-1,40,0,37]:Integer, [-1,40,0,38]:Integer, [-1,40,0,39]:Integer, [-1,40,8]:Pointer, [-1,40,8,0]:Pointer, [-1,40,8,0,-1]:Integer, [-1,40,8,8]:Integer, [-1,40,8,9]:Integer, [-1,40,8,10]:Integer, [-1,40,8,11]:Integer, [-1,40,8,12]:Integer, [-1,40,8,13]:Integer, [-1,40,8,14]:Integer, [-1,40,8,15]:Integer, [-1,40,8,16]:Integer, [-1,40,8,17]:Integer, [-1,40,8,18]:Integer, [-1,40,8,19]:Integer, [-1,40,8,20]:Integer, [-1,40,8,21]:Integer, [-1,40,8,22]:Integer, [-1,40,8,23]:Integer, [-1,40,8,24]:Integer, [-1,40,8,25]:Integer, [-1,40,8,26]:Integer, [-1,40,8,27]:Integer, [-1,40,8,28]:Integer, [-1,40,8,29]:Integer, [-1,40,8,30]:Integer, [-1,40,8,31]:Integer, [-1,40,8,32]:Integer, [-1,40,8,33]:Integer, [-1,40,8,34]:Integer, [-1,40,8,35]:Integer, [-1,40,8,36]:Integer, [-1,40,8,37]:Integer, [-1,40,8,38]:Integer, [-1,40,8,39]:Integer, [-1,40,16]:Pointer, [-1,40,16,0]:Pointer, [-1,40,16,0,-1]:Integer, [-1,40,16,8]:Integer, [-1,40,16,9]:Integer, [-1,40,16,10]:Integer, [-1,40,16,11]:Integer, [-1,40,16,12]:Integer, [-1,40,16,13]:Integer, [-1,40,16,14]:Integer, [-1,40,16,15]:Integer, [-1,40,16,16]:Integer, [-1,40,16,17]:Integer, [-1,40,16,18]:Integer, [-1,40,16,19]:Integer, [-1,40,16,20]:Integer, [-1,40,16,21]:Integer, [-1,40,16,22]:Integer, [-1,40,16,23]:Integer, [-1,40,16,24]:Integer, [-1,40,16,25]:Integer, [-1,40,16,26]:Integer, [-1,40,16,27]:Integer, [-1,40,16,28]:Integer, [-1,40,16,29]:Integer, [-1,40,16,30]:Integer, [-1,40,16,31]:Integer, [-1,40,16,32]:Integer, [-1,40,16,33]:Integer, [-1,40,16,34]:Integer, [-1,40,16,35]:Integer, [-1,40,16,36]:Integer, [-1,40,16,37]:Integer, [-1,40,16,38]:Integer, [-1,40,16,39]:Integer, [-1,40,24]:Integer, [-1,40,25]:Integer, [-1,40,26]:Integer, [-1,40,27]:Integer, [-1,40,28]:Integer, [-1,40,29]:Integer, [-1,40,30]:Integer, [-1,40,31]:Integer, [-1,40,32]:Integer, [-1,40,33]:Integer, [-1,40,34]:Integer, [-1,40,35]:Integer, [-1,40,36]:Integer, [-1,40,37]:Integer, [-1,40,38]:Integer, [-1,40,39]:Integer, [-1,40,40]:Integer, [-1,48]:Pointer, [-1,48,0]:Pointer, [-1,48,0,0]:Pointer, [-1,48,0,0,-1]:Integer, [-1,48,0,8]:Integer, [-1,48,0,9]:Integer, [-1,48,0,10]:Integer, [-1,48,0,11]:Integer, [-1,48,0,12]:Integer, [-1,48,0,13]:Integer, [-1,48,0,14]:Integer, [-1,48,0,15]:Integer, [-1,48,0,16]:Integer, [-1,48,0,17]:Integer, [-1,48,0,18]:Integer, [-1,48,0,19]:Integer, [-1,48,0,20]:Integer, [-1,48,0,21]:Integer, [-1,48,0,22]:Integer, [-1,48,0,23]:Integer, [-1,48,0,24]:Integer, [-1,48,0,25]:Integer, [-1,48,0,26]:Integer, [-1,48,0,27]:Integer, [-1,48,0,28]:Integer, [-1,48,0,29]:Integer, [-1,48,0,30]:Integer, [-1,48,0,31]:Integer, [-1,48,0,32]:Integer, [-1,48,0,33]:Integer, [-1,48,0,34]:Integer, [-1,48,0,35]:Integer, [-1,48,0,36]:Integer, [-1,48,0,37]:Integer, [-1,48,0,38]:Integer, [-1,48,0,39]:Integer, [-1,48,8]:Pointer, [-1,48,8,0]:Pointer, [-1,48,8,0,0]:Pointer, [-1,48,8,8]:Integer, [-1,48,8,9]:Integer, [-1,48,8,10]:Integer, [-1,48,8,11]:Integer, [-1,48,8,12]:Integer, [-1,48,8,13]:Integer, [-1,48,8,14]:Integer, [-1,48,8,15]:Integer, [-1,48,8,16]:Integer, [-1,48,8,17]:Integer, [-1,48,8,18]:Integer, [-1,48,8,19]:Integer, [-1,48,8,20]:Integer, [-1,48,8,21]:Integer, [-1,48,8,22]:Integer, [-1,48,8,23]:Integer, [-1,48,8,24]:Integer, [-1,48,8,25]:Integer, [-1,48,8,26]:Integer, [-1,48,8,27]:Integer, [-1,48,8,28]:Integer, [-1,48,8,29]:Integer, [-1,48,8,30]:Integer, [-1,48,8,31]:Integer, [-1,48,8,32]:Integer, [-1,48,8,33]:Integer, [-1,48,8,34]:Integer, [-1,48,8,35]:Integer, [-1,48,8,36]:Integer, [-1,48,8,37]:Integer, [-1,48,8,38]:Integer, [-1,48,8,39]:Integer, [-1,48,16]:Pointer, [-1,48,16,0]:Pointer, [-1,48,16,0,-1]:Integer, [-1,48,16,8]:Integer, [-1,48,16,9]:Integer, [-1,48,16,10]:Integer, [-1,48,16,11]:Integer, [-1,48,16,12]:Integer, [-1,48,16,13]:Integer, [-1,48,16,14]:Integer, [-1,48,16,15]:Integer, [-1,48,16,16]:Integer, [-1,48,16,17]:Integer, [-1,48,16,18]:Integer, [-1,48,16,19]:Integer, [-1,48,16,20]:Integer, [-1,48,16,21]:Integer, [-1,48,16,22]:Integer, [-1,48,16,23]:Integer, [-1,48,16,24]:Integer, [-1,48,16,25]:Integer, [-1,48,16,26]:Integer, [-1,48,16,27]:Integer, [-1,48,16,28]:Integer, [-1,48,16,29]:Integer, [-1,48,16,30]:Integer, [-1,48,16,31]:Integer, [-1,48,16,32]:Integer, [-1,48,16,33]:Integer, [-1,48,16,34]:Integer, [-1,48,16,35]:Integer, [-1,48,16,36]:Integer, [-1,48,16,37]:Integer, [-1,48,16,38]:Integer, [-1,48,16,39]:Integer, [-1,48,24]:Integer, [-1,48,25]:Integer, [-1,48,26]:Integer, [-1,48,27]:Integer, [-1,48,28]:Integer, [-1,48,29]:Integer, [-1,48,30]:Integer, [-1,48,31]:Integer, [-1,48,32]:Integer, [-1,48,33]:Integer, [-1,48,34]:Integer, [-1,48,35]:Integer, [-1,48,36]:Integer, [-1,48,37]:Integer, [-1,48,38]:Integer, [-1,48,39]:Integer, [-1,48,40]:Integer, [-1,56]:Pointer, [-1,56,-1]:Pointer}" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 64, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 4474993040 to {}) to {} addrspace(10))) #67, !dbg !1834
│ %57 = addrspacecast {} addrspace(10)* %newstruct34 to {} addrspace(10)* addrspace(11), !dbg !1834
│ %58 = getelementptr inbounds {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %57, i64 7, !dbg !1834
│ store {} addrspace(10)* null, {} addrspace(10)* addrspace(11)* %58, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %unbox35.fca.2.gep = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 2, !dbg !1834
│ %unbox35.fca.2.load = load {} addrspace(10), {} addrspace(10)** %unbox35.fca.2.gep, align 8, !dbg !1834, !tbaa !278, !alias.scope !280, !noalias !281
│ %unbox35.fca.3.gep = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 3, !dbg !1834
│ %unbox35.fca.3.load = load {} addrspace(10), {} addrspace(10)** %unbox35.fca.3.gep, align 8, !dbg !1834, !tbaa !278, !alias.scope !280, !noalias !281
│ %unbox35.fca.4.gep = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 4, !dbg !1834
│ %unbox35.fca.4.load = load {} addrspace(10), {} addrspace(10)** %unbox35.fca.4.gep, align 8, !dbg !1834, !tbaa !278, !alias.scope !280, !noalias !281
│ %59 = addrspacecast {} addrspace(10)
%newstruct34 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1834
│ %.repack = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %59, i64 0, i32 0, !dbg !1834
│ store i64 %48, i64 addrspace(11)* %.repack, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack285 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %59, i64 0, i32 1, !dbg !1834
│ store i64 %56, i64 addrspace(11)* %.repack285, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack287 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %59, i64 0, i32 2, !dbg !1834
│ store {} addrspace(10)* %unbox35.fca.2.load, {} addrspace(10)* addrspace(11)* %.repack287, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack289 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %59, i64 0, i32 3, !dbg !1834
│ store {} addrspace(10)* %unbox35.fca.3.load, {} addrspace(10)* addrspace(11)* %.repack289, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack291 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %59, i64 0, i32 4, !dbg !1834
│ store {} addrspace(10)* %unbox35.fca.4.load, {} addrspace(10)* addrspace(11)* %.repack291, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %60 = addrspacecast {} addrspace(10)* %newstruct34 to i8 addrspace(11), !dbg !1834
│ %61 = getelementptr inbounds i8, i8 addrspace(11)
%60, i64 40, !dbg !1834
│ %.repack293 = bitcast i8 addrspace(11)* %61 to {} addrspace(10)* addrspace(11), !dbg !1834
│ store {} addrspace(10)
%.unpack281, {} addrspace(10)* addrspace(11)* %.repack293, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack295 = getelementptr inbounds i8, i8 addrspace(11)* %60, i64 48, !dbg !1834
│ %62 = bitcast i8 addrspace(11)* %.repack295 to {} addrspace(10)* addrspace(11), !dbg !1834
│ store {} addrspace(10)
%.unpack283, {} addrspace(10)* addrspace(11)* %62, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %63 = getelementptr inbounds i8, i8 addrspace(11)* %60, i64 56, !dbg !1834
│ %64 = bitcast i8 addrspace(11)* %63 to {} addrspace(10)* addrspace(11), !dbg !1834
│ store atomic {} addrspace(10)
%getfield25, {} addrspace(10)* addrspace(11)* %64 release, align 8, !dbg !1834, !tbaa !88, !alias.scope !69, !noalias !1804
│ %65 = bitcast {} addrspace(10)* %newstruct34 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10), !dbg !1835
│ br label %L175, !dbg !1835

│ L134: ; preds = %L122, %L105
│ call fastcc void @julia_error_2478() #68, !dbg !1820
│ unreachable, !dbg !1820

│ L139: ; preds = %L64
│ %66 = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 0, !dbg !1842
│ %67 = addrspacecast {} addrspace(10)* %.unpack281 to i8 addrspace(11), !dbg !1844
│ %getfield_addr156 = getelementptr inbounds i8, i8 addrspace(11)
%67, i64 8, !dbg !1844
│ %68 = bitcast i8 addrspace(11)* %getfield_addr156 to {} addrspace(10)* addrspace(11), !dbg !1844
│ %getfield157 = load atomic {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %68 unordered, align 8, !dbg !1844, !tbaa !88, !alias.scope !69, !noalias !90, !nonnull !48, !dereferenceable !237, !align !238
│ %69 = addrspacecast {} addrspace(10)* %getfield157 to { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11), !dbg !1847
│ %arraylen_ptr158 = getelementptr inbounds { i8 addrspace(13), i64, i16, i16, i32 }, { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11)* %69, i64 0, i32 1, !dbg !1847
│ %arraylen159 = load i64, i64 addrspace(11)* %arraylen_ptr158, align 8, !dbg !1847, !tbaa !170, !range !173, !alias.scope !174, !noalias !175
│ %70 = getelementptr inbounds i8, i8 addrspace(11)* %67, i64 24, !dbg !1844
│ %71 = bitcast i8 addrspace(11)* %70 to i64 addrspace(11), !dbg !1844
│ %72 = load i64, i64 addrspace(11)
%71, align 8, !dbg !1844, !tbaa !88, !alias.scope !69, !noalias !90
│ %73 = sub i64 %arraylen159, %72, !dbg !1848
│ %unbox164 = load i64, i64* %66, align 8, !dbg !1849, !tbaa !278, !alias.scope !280, !noalias !281
│ %.not381 = icmp eq i64 %unbox164, %73, !dbg !1849
│ br i1 %.not381, label %L155, label %L167, !dbg !1852

│ L155: ; preds = %L139
│ %74 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 1, !dbg !1842
│ %75 = addrspacecast {} addrspace(10)* %.unpack283 to i8 addrspace(11), !dbg !1844
│ %getfield_addr160 = getelementptr inbounds i8, i8 addrspace(11)
%75, i64 8, !dbg !1844
│ %76 = bitcast i8 addrspace(11)* %getfield_addr160 to {} addrspace(10)* addrspace(11), !dbg !1844
│ %getfield161 = load atomic {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %76 unordered, align 8, !dbg !1844, !tbaa !88, !alias.scope !69, !noalias !90, !nonnull !48, !dereferenceable !237, !align !238
│ %77 = addrspacecast {} addrspace(10)* %getfield161 to { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11), !dbg !1847
│ %arraylen_ptr162 = getelementptr inbounds { i8 addrspace(13), i64, i16, i16, i32 }, { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11)* %77, i64 0, i32 1, !dbg !1847
│ %arraylen163 = load i64, i64 addrspace(11)* %arraylen_ptr162, align 8, !dbg !1847, !tbaa !170, !range !173, !alias.scope !174, !noalias !175
│ %78 = getelementptr inbounds i8, i8 addrspace(11)* %75, i64 24, !dbg !1844
│ %79 = bitcast i8 addrspace(11)* %78 to i64 addrspace(11), !dbg !1844
│ %80 = load i64, i64 addrspace(11)
%79, align 8, !dbg !1844, !tbaa !88, !alias.scope !69, !noalias !90
│ %81 = sub i64 %arraylen163, %80, !dbg !1848
│ %unbox170 = load i64, i64* %74, align 8, !dbg !1853, !tbaa !278, !alias.scope !280, !noalias !281
│ %.not398 = icmp eq i64 %unbox170, %81, !dbg !1853
│ br i1 %.not398, label %L165, label %L167, !dbg !1843

│ L165: ; preds = %L155
│ %newstruct167 = call noalias nonnull dereferenceable(64) "enzyme_type"="{[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,-1]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer, [-1,24]:Pointer, [-1,24,0]:Pointer, [-1,24,0,-1]:Integer, [-1,24,8]:Integer, [-1,24,9]:Integer, [-1,24,10]:Integer, [-1,24,11]:Integer, [-1,24,12]:Integer, [-1,24,13]:Integer, [-1,24,14]:Integer, [-1,24,15]:Integer, [-1,24,16]:Integer, [-1,24,17]:Integer, [-1,24,18]:Integer, [-1,24,19]:Integer, [-1,24,20]:Integer, [-1,24,21]:Integer, [-1,24,22]:Integer, [-1,24,23]:Integer, [-1,24,24]:Integer, [-1,24,25]:Integer, [-1,24,26]:Integer, [-1,24,27]:Integer, [-1,24,28]:Integer, [-1,24,29]:Integer, [-1,24,30]:Integer, [-1,24,31]:Integer, [-1,24,32]:Integer, [-1,24,33]:Integer, [-1,24,34]:Integer, [-1,24,35]:Integer, [-1,24,36]:Integer, [-1,24,37]:Integer, [-1,24,38]:Integer, [-1,24,39]:Integer, [-1,32]:Pointer, [-1,32,0]:Pointer, [-1,32,0,-1]:Integer, [-1,32,8]:Integer, [-1,32,9]:Integer, [-1,32,10]:Integer, [-1,32,11]:Integer, [-1,32,12]:Integer, [-1,32,13]:Integer, [-1,32,14]:Integer, [-1,32,15]:Integer, [-1,32,16]:Integer, [-1,32,17]:Integer, [-1,32,18]:Integer, [-1,32,19]:Integer, [-1,32,20]:Integer, [-1,32,21]:Integer, [-1,32,22]:Integer, [-1,32,23]:Integer, [-1,32,24]:Integer, [-1,32,25]:Integer, [-1,32,26]:Integer, [-1,32,27]:Integer, [-1,32,28]:Integer, [-1,32,29]:Integer, [-1,32,30]:Integer, [-1,32,31]:Integer, [-1,32,32]:Integer, [-1,32,33]:Integer, [-1,32,34]:Integer, [-1,32,35]:Integer, [-1,32,36]:Integer, [-1,32,37]:Integer, [-1,32,38]:Integer, [-1,32,39]:Integer, [-1,40]:Pointer, [-1,40,0]:Pointer, [-1,40,0,0]:Pointer, [-1,40,0,0,-1]:Integer, [-1,40,0,8]:Integer, [-1,40,0,9]:Integer, [-1,40,0,10]:Integer, [-1,40,0,11]:Integer, [-1,40,0,12]:Integer, [-1,40,0,13]:Integer, [-1,40,0,14]:Integer, [-1,40,0,15]:Integer, [-1,40,0,16]:Integer, [-1,40,0,17]:Integer, [-1,40,0,18]:Integer, [-1,40,0,19]:Integer, [-1,40,0,20]:Integer, [-1,40,0,21]:Integer, [-1,40,0,22]:Integer, [-1,40,0,23]:Integer, [-1,40,0,24]:Integer, [-1,40,0,25]:Integer, [-1,40,0,26]:Integer, [-1,40,0,27]:Integer, [-1,40,0,28]:Integer, [-1,40,0,29]:Integer, [-1,40,0,30]:Integer, [-1,40,0,31]:Integer, [-1,40,0,32]:Integer, [-1,40,0,33]:Integer, [-1,40,0,34]:Integer, [-1,40,0,35]:Integer, [-1,40,0,36]:Integer, [-1,40,0,37]:Integer, [-1,40,0,38]:Integer, [-1,40,0,39]:Integer, [-1,40,8]:Pointer, [-1,40,8,0]:Pointer, [-1,40,8,0,-1]:Integer, [-1,40,8,8]:Integer, [-1,40,8,9]:Integer, [-1,40,8,10]:Integer, [-1,40,8,11]:Integer, [-1,40,8,12]:Integer, [-1,40,8,13]:Integer, [-1,40,8,14]:Integer, [-1,40,8,15]:Integer, [-1,40,8,16]:Integer, [-1,40,8,17]:Integer, [-1,40,8,18]:Integer, [-1,40,8,19]:Integer, [-1,40,8,20]:Integer, [-1,40,8,21]:Integer, [-1,40,8,22]:Integer, [-1,40,8,23]:Integer, [-1,40,8,24]:Integer, [-1,40,8,25]:Integer, [-1,40,8,26]:Integer, [-1,40,8,27]:Integer, [-1,40,8,28]:Integer, [-1,40,8,29]:Integer, [-1,40,8,30]:Integer, [-1,40,8,31]:Integer, [-1,40,8,32]:Integer, [-1,40,8,33]:Integer, [-1,40,8,34]:Integer, [-1,40,8,35]:Integer, [-1,40,8,36]:Integer, [-1,40,8,37]:Integer, [-1,40,8,38]:Integer, [-1,40,8,39]:Integer, [-1,40,16]:Pointer, [-1,40,16,0]:Pointer, [-1,40,16,0,-1]:Integer, [-1,40,16,8]:Integer, [-1,40,16,9]:Integer, [-1,40,16,10]:Integer, [-1,40,16,11]:Integer, [-1,40,16,12]:Integer, [-1,40,16,13]:Integer, [-1,40,16,14]:Integer, [-1,40,16,15]:Integer, [-1,40,16,16]:Integer, [-1,40,16,17]:Integer, [-1,40,16,18]:Integer, [-1,40,16,19]:Integer, [-1,40,16,20]:Integer, [-1,40,16,21]:Integer, [-1,40,16,22]:Integer, [-1,40,16,23]:Integer, [-1,40,16,24]:Integer, [-1,40,16,25]:Integer, [-1,40,16,26]:Integer, [-1,40,16,27]:Integer, [-1,40,16,28]:Integer, [-1,40,16,29]:Integer, [-1,40,16,30]:Integer, [-1,40,16,31]:Integer, [-1,40,16,32]:Integer, [-1,40,16,33]:Integer, [-1,40,16,34]:Integer, [-1,40,16,35]:Integer, [-1,40,16,36]:Integer, [-1,40,16,37]:Integer, [-1,40,16,38]:Integer, [-1,40,16,39]:Integer, [-1,40,24]:Integer, [-1,40,25]:Integer, [-1,40,26]:Integer, [-1,40,27]:Integer, [-1,40,28]:Integer, [-1,40,29]:Integer, [-1,40,30]:Integer, [-1,40,31]:Integer, [-1,40,32]:Integer, [-1,40,33]:Integer, [-1,40,34]:Integer, [-1,40,35]:Integer, [-1,40,36]:Integer, [-1,40,37]:Integer, [-1,40,38]:Integer, [-1,40,39]:Integer, [-1,40,40]:Integer, [-1,48]:Pointer, [-1,48,0]:Pointer, [-1,48,0,0]:Pointer, [-1,48,0,0,-1]:Integer, [-1,48,0,8]:Integer, [-1,48,0,9]:Integer, [-1,48,0,10]:Integer, [-1,48,0,11]:Integer, [-1,48,0,12]:Integer, [-1,48,0,13]:Integer, [-1,48,0,14]:Integer, [-1,48,0,15]:Integer, [-1,48,0,16]:Integer, [-1,48,0,17]:Integer, [-1,48,0,18]:Integer, [-1,48,0,19]:Integer, [-1,48,0,20]:Integer, [-1,48,0,21]:Integer, [-1,48,0,22]:Integer, [-1,48,0,23]:Integer, [-1,48,0,24]:Integer, [-1,48,0,25]:Integer, [-1,48,0,26]:Integer, [-1,48,0,27]:Integer, [-1,48,0,28]:Integer, [-1,48,0,29]:Integer, [-1,48,0,30]:Integer, [-1,48,0,31]:Integer, [-1,48,0,32]:Integer, [-1,48,0,33]:Integer, [-1,48,0,34]:Integer, [-1,48,0,35]:Integer, [-1,48,0,36]:Integer, [-1,48,0,37]:Integer, [-1,48,0,38]:Integer, [-1,48,0,39]:Integer, [-1,48,8]:Pointer, [-1,48,8,0]:Pointer, [-1,48,8,0,0]:Pointer, [-1,48,8,8]:Integer, [-1,48,8,9]:Integer, [-1,48,8,10]:Integer, [-1,48,8,11]:Integer, [-1,48,8,12]:Integer, [-1,48,8,13]:Integer, [-1,48,8,14]:Integer, [-1,48,8,15]:Integer, [-1,48,8,16]:Integer, [-1,48,8,17]:Integer, [-1,48,8,18]:Integer, [-1,48,8,19]:Integer, [-1,48,8,20]:Integer, [-1,48,8,21]:Integer, [-1,48,8,22]:Integer, [-1,48,8,23]:Integer, [-1,48,8,24]:Integer, [-1,48,8,25]:Integer, [-1,48,8,26]:Integer, [-1,48,8,27]:Integer, [-1,48,8,28]:Integer, [-1,48,8,29]:Integer, [-1,48,8,30]:Integer, [-1,48,8,31]:Integer, [-1,48,8,32]:Integer, [-1,48,8,33]:Integer, [-1,48,8,34]:Integer, [-1,48,8,35]:Integer, [-1,48,8,36]:Integer, [-1,48,8,37]:Integer, [-1,48,8,38]:Integer, [-1,48,8,39]:Integer, [-1,48,16]:Pointer, [-1,48,16,0]:Pointer, [-1,48,16,0,-1]:Integer, [-1,48,16,8]:Integer, [-1,48,16,9]:Integer, [-1,48,16,10]:Integer, [-1,48,16,11]:Integer, [-1,48,16,12]:Integer, [-1,48,16,13]:Integer, [-1,48,16,14]:Integer, [-1,48,16,15]:Integer, [-1,48,16,16]:Integer, [-1,48,16,17]:Integer, [-1,48,16,18]:Integer, [-1,48,16,19]:Integer, [-1,48,16,20]:Integer, [-1,48,16,21]:Integer, [-1,48,16,22]:Integer, [-1,48,16,23]:Integer, [-1,48,16,24]:Integer, [-1,48,16,25]:Integer, [-1,48,16,26]:Integer, [-1,48,16,27]:Integer, [-1,48,16,28]:Integer, [-1,48,16,29]:Integer, [-1,48,16,30]:Integer, [-1,48,16,31]:Integer, [-1,48,16,32]:Integer, [-1,48,16,33]:Integer, [-1,48,16,34]:Integer, [-1,48,16,35]:Integer, [-1,48,16,36]:Integer, [-1,48,16,37]:Integer, [-1,48,16,38]:Integer, [-1,48,16,39]:Integer, [-1,48,24]:Integer, [-1,48,25]:Integer, [-1,48,26]:Integer, [-1,48,27]:Integer, [-1,48,28]:Integer, [-1,48,29]:Integer, [-1,48,30]:Integer, [-1,48,31]:Integer, [-1,48,32]:Integer, [-1,48,33]:Integer, [-1,48,34]:Integer, [-1,48,35]:Integer, [-1,48,36]:Integer, [-1,48,37]:Integer, [-1,48,38]:Integer, [-1,48,39]:Integer, [-1,48,40]:Integer, [-1,56]:Pointer, [-1,56,-1]:Pointer}" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 64, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 4474993040 to {}) to {} addrspace(10))) #67, !dbg !1856
│ %82 = addrspacecast {} addrspace(10)* %newstruct167 to {} addrspace(10)* addrspace(11), !dbg !1856
│ %83 = getelementptr inbounds {} addrspace(10)
, {} addrspace(10)* addrspace(11)* %82, i64 7, !dbg !1856
│ store {} addrspace(10)* null, {} addrspace(10)* addrspace(11)* %83, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %unbox168.fca.2.gep = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 2, !dbg !1856
│ %unbox168.fca.2.load = load {} addrspace(10), {} addrspace(10)** %unbox168.fca.2.gep, align 8, !dbg !1856, !tbaa !278, !alias.scope !280, !noalias !281
│ %unbox168.fca.3.gep = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 3, !dbg !1856
│ %unbox168.fca.3.load = load {} addrspace(10), {} addrspace(10)** %unbox168.fca.3.gep, align 8, !dbg !1856, !tbaa !278, !alias.scope !280, !noalias !281
│ %unbox168.fca.4.gep = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %2, i64 0, i32 4, !dbg !1856
│ %unbox168.fca.4.load = load {} addrspace(10), {} addrspace(10)** %unbox168.fca.4.gep, align 8, !dbg !1856, !tbaa !278, !alias.scope !280, !noalias !281
│ %84 = addrspacecast {} addrspace(10)
%newstruct167 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1856
│ %.repack382 = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %84, i64 0, i32 0, !dbg !1856
│ store i64 %73, i64 addrspace(11)* %.repack382, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack383 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %84, i64 0, i32 1, !dbg !1856
│ store i64 %81, i64 addrspace(11)* %.repack383, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack385 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %84, i64 0, i32 2, !dbg !1856
│ store {} addrspace(10)* %unbox168.fca.2.load, {} addrspace(10)* addrspace(11)* %.repack385, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack387 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %84, i64 0, i32 3, !dbg !1856
│ store {} addrspace(10)* %unbox168.fca.3.load, {} addrspace(10)* addrspace(11)* %.repack387, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack389 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %84, i64 0, i32 4, !dbg !1856
│ store {} addrspace(10)* %unbox168.fca.4.load, {} addrspace(10)* addrspace(11)* %.repack389, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %85 = addrspacecast {} addrspace(10)* %newstruct167 to i8 addrspace(11), !dbg !1856
│ %86 = getelementptr inbounds i8, i8 addrspace(11)
%85, i64 40, !dbg !1856
│ %.repack391 = bitcast i8 addrspace(11)* %86 to {} addrspace(10)* addrspace(11), !dbg !1856
│ store {} addrspace(10)
%.unpack281, {} addrspace(10)* addrspace(11)* %.repack391, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %.repack393 = getelementptr inbounds i8, i8 addrspace(11)* %85, i64 48, !dbg !1856
│ %87 = bitcast i8 addrspace(11)* %.repack393 to {} addrspace(10)* addrspace(11), !dbg !1856
│ store {} addrspace(10)
%.unpack283, {} addrspace(10)* addrspace(11)* %87, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %88 = getelementptr inbounds i8, i8 addrspace(11)* %85, i64 56, !dbg !1856
│ %89 = bitcast i8 addrspace(11)* %88 to {} addrspace(10)* addrspace(11), !dbg !1856
│ store atomic {} addrspace(10)
%getfield25, {} addrspace(10)* addrspace(11)* %89 release, align 8, !dbg !1856, !tbaa !88, !alias.scope !69, !noalias !1804
│ %90 = bitcast {} addrspace(10)* %newstruct167 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10), !dbg !1835
│ br label %L175, !dbg !1835

│ L167: ; preds = %L155, %L139
│ call fastcc void @julia_error_2478() #68, !dbg !1843
│ unreachable, !dbg !1843

│ L175: ; preds = %L165, %L132
│ %nodecayed..pre-phi250 = phi { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) } addrspace(10)* [ %90, %L165 ], [ %65, %L132 ], !dbg !1857
│ %unbox164.pn = phi i64 [ %73, %L165 ], [ %48, %L132 ]
│ %unbox168.fca.1.load.pn = phi i64 [ %81, %L165 ], [ %56, %L132 ]
│ %value_phi36 = phi {} addrspace(10)* [ %newstruct167, %L165 ], [ %newstruct34, %L132 ]
│ %91 = addrspacecast { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10)* %nodecayed..pre-phi250 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1857
│ %.pre-phi = addrspacecast {} addrspace(10)
%value_phi36 to {} addrspace(11), !dbg !1857
│ %92 = call i64 @llvm.smax.i64(i64 %unbox164.pn, i64 noundef 0) #64, !dbg !1862
│ %93 = call i64 @llvm.smax.i64(i64 %unbox168.fca.1.load.pn, i64 noundef 0) #64, !dbg !1862
│ %.not297 = icmp ne i64 %92, %.sroa.0234.0, !dbg !1868
│ %94 = icmp ne i64 %93, %.sroa.0230.0
│ %spec.select = select i1 %.not297, i1 true, i1 %94, !dbg !1872
│ br i1 %spec.select, label %L492, label %L196, !dbg !1860

│ L196: ; preds = %L175
│ %.not298 = icmp eq {} addrspace(11)
%.pre-phi, %11, !dbg !1873
│ %95 = bitcast {} addrspace(10)* %0 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10), !dbg !1873
│ br i1 %.not298, label %L210, label %L199, !dbg !1873

│ L199: ; preds = %L196
│ %96 = call i64 @ijl_object_id({} addrspace(10)
nofree nonnull %value_phi36) #64, !dbg !1878
│ %97 = call i64 @ijl_object_id({} addrspace(10)* noundef nonnull align 8 dereferenceable(64) %0) #64, !dbg !1878
│ %.not380 = icmp eq i64 %96, %97, !dbg !1883
│ %98 = bitcast {} addrspace(10)* %0 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10), !dbg !1882
│ br i1 %.not380, label %L205, label %L210, !dbg !1882

│ L205: ; preds = %L199
│ %99 = call fastcc nonnull {} addrspace(10)
@julia_unaliascopy_2482({} addrspace(10)* noundef nonnull align 8 dereferenceable(64) %0) #64, !dbg !1882
│ %.pre252 = addrspacecast {} addrspace(10)* %99 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1886
│ %100 = bitcast {} addrspace(10)
%99 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10), !dbg !1891
│ br label %L210, !dbg !1891

│ L210: ; preds = %L205, %L199, %L196
│ %nodecayed..pre-phi253 = phi { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) } addrspace(10)* [ %100, %L205 ], [ %95, %L196 ], [ %98, %L199 ], !dbg !1886
│ %101 = addrspacecast { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10)* %nodecayed..pre-phi253 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1886
│ %.elt299 = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %101, i64 0, i32 0, !dbg !1886
│ %.unpack300 = load i64, i64 addrspace(11)* %.elt299, align 8, !dbg !1886, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt301 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %101, i64 0, i32 1, !dbg !1886
│ %.unpack302 = load i64, i64 addrspace(11)* %.elt301, align 8, !dbg !1886, !tbaa !88, !alias.scope !69, !noalias !90
│ %102 = call i64 @llvm.smax.i64(i64 %.unpack300, i64 noundef 0) #64, !dbg !1894
│ %103 = call i64 @llvm.smax.i64(i64 %.unpack302, i64 noundef 0) #64, !dbg !1894
│ %104 = icmp eq i64 %103, 1, !dbg !1900
│ %105 = icmp eq i64 %102, 1, !dbg !1905
│ %.not309 = icmp eq {} addrspace(11)* %.pre-phi, %15, !dbg !1908
│ %106 = bitcast {} addrspace(10)* %1 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10), !dbg !1908
│ br i1 %.not309, label %L239, label %L228, !dbg !1908

│ L228: ; preds = %L210
│ %107 = call i64 @ijl_object_id({} addrspace(10)
nofree nonnull %value_phi36) #64, !dbg !1911
│ %108 = call i64 @ijl_object_id({} addrspace(10)* noundef nonnull align 8 dereferenceable(64) %1) #64, !dbg !1911
│ %.not379 = icmp eq i64 %107, %108, !dbg !1916
│ %109 = bitcast {} addrspace(10)* %1 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10), !dbg !1915
│ br i1 %.not379, label %L234, label %L239, !dbg !1915

│ L234: ; preds = %L228
│ %110 = call fastcc nonnull {} addrspace(10)
@julia_unaliascopy_2482({} addrspace(10)* noundef nonnull align 8 dereferenceable(64) %1) #64, !dbg !1915
│ %.pre256 = addrspacecast {} addrspace(10)* %110 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1919
│ %111 = bitcast {} addrspace(10)
%110 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10), !dbg !1891
│ br label %L239, !dbg !1891

│ L239: ; preds = %L234, %L228, %L210
│ %nodecayed..pre-phi257 = phi { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) } addrspace(10)* [ %111, %L234 ], [ %106, %L210 ], [ %109, %L228 ], !dbg !1919
│ %112 = addrspacecast { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(10)* %nodecayed..pre-phi257 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11), !dbg !1919
│ %.elt310 = getelementptr inbounds { i64, i64, {} addrspace(10)
, {} addrspace(10), {} addrspace(10) }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %112, i64 0, i32 0, !dbg !1919
│ %.unpack311 = load i64, i64 addrspace(11)* %.elt310, align 8, !dbg !1919, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt312 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %112, i64 0, i32 1, !dbg !1919
│ %.unpack313 = load i64, i64 addrspace(11)* %.elt312, align 8, !dbg !1919, !tbaa !88, !alias.scope !69, !noalias !90
│ %113 = call i64 @llvm.smax.i64(i64 %.unpack311, i64 noundef 0) #64, !dbg !1924
│ %114 = call i64 @llvm.smax.i64(i64 %.unpack313, i64 noundef 0) #64, !dbg !1924
│ %115 = icmp eq i64 %114, 1, !dbg !1930
│ %116 = icmp eq i64 %113, 1, !dbg !1935
│ %117 = icmp eq i64 %.sroa.0230.0, 0, !dbg !1938
│ br i1 %117, label %L507, label %L271.preheader, !dbg !1942

│ L271.preheader: ; preds = %L239
│ %118 = icmp eq i64 %.sroa.0234.0, 0
│ %.elt325 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %101, i64 0, i32 2
│ %.elt327 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %101, i64 0, i32 3
│ %.elt329 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %101, i64 0, i32 4
│ %.elt337 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %112, i64 0, i32 2
│ %.elt339 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %112, i64 0, i32 3
│ %.elt341 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %112, i64 0, i32 4
│ %.elt345 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %91, i64 0, i32 0
│ %.elt347 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %91, i64 0, i32 1
│ %.elt349 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %91, i64 0, i32 2
│ %.elt351 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %91, i64 0, i32 3
│ %.elt353 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %91, i64 0, i32 4
│ %.fca.0.gep215 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %6, i64 0, i32 0
│ %.fca.1.gep = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %6, i64 0, i32 1
│ %.fca.2.gep217 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %6, i64 0, i32 2
│ %.fca.3.gep219 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %6, i64 0, i32 3
│ %.fca.4.gep = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %6, i64 0, i32 4
│ %119 = addrspacecast { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }* %6 to { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)*
│ br label %L271, !dbg !1943

│ L271: ; preds = %L470, %L271.preheader
│ %iv = phi i64 [ %iv.next, %L470 ], [ 0, %L271.preheader ]
│ %iv.next = add nuw nsw i64 %iv, 1, !dbg !1943
│ br i1 %118, label %L470, label %L280.lr.ph, !dbg !1943

│ L280.lr.ph: ; preds = %L271
│ %120 = select i1 %104, i64 1, i64 %iv.next
│ %121 = add nsw i64 %120, -1
│ %122 = select i1 %115, i64 1, i64 %iv.next
│ %123 = add nsw i64 %122, -1
│ br label %L280, !dbg !1944

│ L280: ; preds = %L462, %L280.lr.ph
│ %iv1 = phi i64 [ %iv.next2, %L462 ], [ 0, %L280.lr.ph ]
│ %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !1945
│ %124 = select i1 %105, i64 1, i64 %iv.next2, !dbg !1948
│ %.unpack326 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt325, align 8, !dbg !1957, !tbaa !88, !alias.scope !69, !noalias !90
│ %.unpack328 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt327, align 8, !dbg !1957, !tbaa !88, !alias.scope !69, !noalias !90
│ %.unpack330 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt329, align 8, !dbg !1957, !tbaa !88, !alias.scope !69, !noalias !90
│ %125 = addrspacecast {} addrspace(10)* %.unpack326 to i64 addrspace(13)* addrspace(11), !dbg !1959
│ %arrayptr331 = load i64 addrspace(13)
, i64 addrspace(13)* addrspace(11)* %125, align 8, !dbg !1959, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ %126 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr331, i64 %121, !dbg !1959
│ %arrayref = load i64, i64 addrspace(13)* %126, align 8, !dbg !1959, !tbaa !187, !alias.scope !69, !noalias !90
│ %127 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr331, i64 %120, !dbg !1964
│ %arrayref68 = load i64, i64 addrspace(13)* %127, align 8, !dbg !1964, !tbaa !187, !alias.scope !69, !noalias !90
│ %128 = add i64 %arrayref68, -1, !dbg !1966
│ %.not332 = icmp slt i64 %128, %arrayref, !dbg !1967
│ br i1 %.not332, label %L385, label %L345, !dbg !1969

│ L345: ; preds = %L280
│ %129 = sub i64 %arrayref68, %arrayref, !dbg !1970
│ %130 = icmp eq i64 %129, 0, !dbg !1973
│ br i1 %130, label %L367, label %L353.lr.ph, !dbg !1975

│ L353.lr.ph: ; preds = %L345
│ %131 = addrspacecast {} addrspace(10)* %.unpack328 to i64 addrspace(13)* addrspace(11)*
│ %arrayptr98360 = load i64 addrspace(13), i64 addrspace(13) addrspace(11)* %131, align 8, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ br label %L353, !dbg !1975

│ L353: ; preds = %L353, %L353.lr.ph
│ %iv3 = phi i64 [ %iv.next4, %L353 ], [ 0, %L353.lr.ph ]
│ %value_phi96401 = phi i64 [ %arrayref, %L353.lr.ph ], [ %value_phi101, %L353 ]
│ %value_phi95400 = phi i64 [ %129, %L353.lr.ph ], [ %value_phi100, %L353 ]
│ %iv.next4 = add nuw nsw i64 %iv3, 1, !dbg !1976
│ %132 = lshr i64 %value_phi95400, 1, !dbg !1976
│ %133 = add i64 %132, %value_phi96401, !dbg !1978
│ %134 = add i64 %133, -1, !dbg !1980
│ %135 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr98360, i64 %134, !dbg !1980
│ %arrayref99 = load i64, i64 addrspace(13)* %135, align 8, !dbg !1980, !tbaa !187, !alias.scope !69, !noalias !90
│ %.not361 = icmp slt i64 %arrayref99, %124, !dbg !1982
│ %136 = add i64 %133, 1, !dbg !1981
│ %.neg362 = xor i64 %132, -1, !dbg !1981
│ %137 = add i64 %value_phi95400, %.neg362, !dbg !1981
│ %value_phi100 = select i1 %.not361, i64 %137, i64 %132, !dbg !1981
│ %value_phi101 = select i1 %.not361, i64 %136, i64 %value_phi96401, !dbg !1981
│ %138 = icmp eq i64 %value_phi100, 0, !dbg !1973
│ br i1 %138, label %L367.loopexit, label %L353, !dbg !1975

│ L367.loopexit: ; preds = %L353
│ br label %L367, !dbg !1985

│ L367: ; preds = %L367.loopexit, %L345
│ %value_phi96.lcssa = phi i64 [ %arrayref, %L345 ], [ %value_phi101, %L367.loopexit ]
│ %.not363 = icmp slt i64 %128, %value_phi96.lcssa, !dbg !1985
│ br i1 %.not363, label %L385, label %L370, !dbg !1987

│ L370: ; preds = %L367
│ %139 = add i64 %value_phi96.lcssa, -1, !dbg !1988
│ %140 = addrspacecast {} addrspace(10)* %.unpack328 to i64 addrspace(13)* addrspace(11), !dbg !1988
│ %arrayptr103364 = load i64 addrspace(13)
, i64 addrspace(13)* addrspace(11)* %140, align 8, !dbg !1988, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ %141 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr103364, i64 %139, !dbg !1988
│ %arrayref104 = load i64, i64 addrspace(13)* %141, align 8, !dbg !1988, !tbaa !187, !alias.scope !69, !noalias !90
│ %142 = icmp eq i64 %arrayref104, %124, !dbg !1989
│ br i1 %142, label %L376, label %L385, !dbg !1987

│ L376: ; preds = %L370
│ %143 = addrspacecast {} addrspace(10)* %.unpack330 to i64 addrspace(13)* addrspace(11), !dbg !1988
│ %arrayptr106365 = load i64 addrspace(13)
, i64 addrspace(13)* addrspace(11)* %143, align 8, !dbg !1988, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ %144 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr106365, i64 %139, !dbg !1988
│ %arrayref107 = load i64, i64 addrspace(13)* %144, align 8, !dbg !1988, !tbaa !187, !alias.scope !69, !noalias !90
│ br label %L385, !dbg !1835

│ L385: ; preds = %L376, %L370, %L367, %L280
│ %value_phi69 = phi i64 [ %arrayref107, %L376 ], [ 0, %L280 ], [ 0, %L370 ], [ 0, %L367 ]
│ %145 = select i1 %116, i64 1, i64 %iv.next2, !dbg !1991
│ %.unpack338 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt337, align 8, !dbg !1996, !tbaa !88, !alias.scope !69, !noalias !90
│ %.unpack340 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt339, align 8, !dbg !1996, !tbaa !88, !alias.scope !69, !noalias !90
│ %.unpack342 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt341, align 8, !dbg !1996, !tbaa !88, !alias.scope !69, !noalias !90
│ %146 = addrspacecast {} addrspace(10)* %.unpack338 to i64 addrspace(13)* addrspace(11), !dbg !1998
│ %arrayptr76343 = load i64 addrspace(13)
, i64 addrspace(13)* addrspace(11)* %146, align 8, !dbg !1998, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ %147 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr76343, i64 %123, !dbg !1998
│ %arrayref77 = load i64, i64 addrspace(13)* %147, align 8, !dbg !1998, !tbaa !187, !alias.scope !69, !noalias !90
│ %148 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr76343, i64 %122, !dbg !2002
│ %arrayref80 = load i64, i64 addrspace(13)* %148, align 8, !dbg !2002, !tbaa !187, !alias.scope !69, !noalias !90
│ %149 = add i64 %arrayref80, -1, !dbg !2004
│ %.not344 = icmp slt i64 %149, %arrayref77, !dbg !2005
│ br i1 %.not344, label %L462, label %L420, !dbg !2007

│ L420: ; preds = %L385
│ %150 = sub i64 %arrayref80, %arrayref77, !dbg !2008
│ %151 = icmp eq i64 %150, 0, !dbg !2011
│ br i1 %151, label %L442, label %L428.lr.ph, !dbg !2013

│ L428.lr.ph: ; preds = %L420
│ %152 = addrspacecast {} addrspace(10)* %.unpack340 to i64 addrspace(13)* addrspace(11)*
│ %arrayptr85355 = load i64 addrspace(13), i64 addrspace(13) addrspace(11)* %152, align 8, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ br label %L428, !dbg !2013

│ L428: ; preds = %L428, %L428.lr.ph
│ %iv5 = phi i64 [ %iv.next6, %L428 ], [ 0, %L428.lr.ph ]
│ %value_phi83403 = phi i64 [ %arrayref77, %L428.lr.ph ], [ %value_phi88, %L428 ]
│ %value_phi82402 = phi i64 [ %150, %L428.lr.ph ], [ %value_phi87, %L428 ]
│ %iv.next6 = add nuw nsw i64 %iv5, 1, !dbg !2014
│ %153 = lshr i64 %value_phi82402, 1, !dbg !2014
│ %154 = add i64 %153, %value_phi83403, !dbg !2016
│ %155 = add i64 %154, -1, !dbg !2018
│ %156 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr85355, i64 %155, !dbg !2018
│ %arrayref86 = load i64, i64 addrspace(13)* %156, align 8, !dbg !2018, !tbaa !187, !alias.scope !69, !noalias !90
│ %.not356 = icmp slt i64 %arrayref86, %145, !dbg !2020
│ %157 = add i64 %154, 1, !dbg !2019
│ %.neg = xor i64 %153, -1, !dbg !2019
│ %158 = add i64 %value_phi82402, %.neg, !dbg !2019
│ %value_phi87 = select i1 %.not356, i64 %158, i64 %153, !dbg !2019
│ %value_phi88 = select i1 %.not356, i64 %157, i64 %value_phi83403, !dbg !2019
│ %159 = icmp eq i64 %value_phi87, 0, !dbg !2011
│ br i1 %159, label %L442.loopexit, label %L428, !dbg !2013

│ L442.loopexit: ; preds = %L428
│ br label %L442, !dbg !2023

│ L442: ; preds = %L442.loopexit, %L420
│ %value_phi83.lcssa = phi i64 [ %arrayref77, %L420 ], [ %value_phi88, %L442.loopexit ]
│ %.not357 = icmp slt i64 %149, %value_phi83.lcssa, !dbg !2023
│ br i1 %.not357, label %L462, label %L445, !dbg !2025

│ L445: ; preds = %L442
│ %160 = add i64 %value_phi83.lcssa, -1, !dbg !2026
│ %161 = addrspacecast {} addrspace(10)* %.unpack340 to i64 addrspace(13)* addrspace(11), !dbg !2026
│ %arrayptr90358 = load i64 addrspace(13)
, i64 addrspace(13)* addrspace(11)* %161, align 8, !dbg !2026, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ %162 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr90358, i64 %160, !dbg !2026
│ %arrayref91 = load i64, i64 addrspace(13)* %162, align 8, !dbg !2026, !tbaa !187, !alias.scope !69, !noalias !90
│ %163 = icmp eq i64 %arrayref91, %145, !dbg !2027
│ br i1 %163, label %L451, label %L462, !dbg !2025

│ L451: ; preds = %L445
│ %164 = addrspacecast {} addrspace(10)* %.unpack342 to i64 addrspace(13)* addrspace(11), !dbg !2026
│ %arrayptr93359 = load i64 addrspace(13)
, i64 addrspace(13)* addrspace(11)* %164, align 8, !dbg !2026, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ %165 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr93359, i64 %160, !dbg !2026
│ %arrayref94 = load i64, i64 addrspace(13)* %165, align 8, !dbg !2026, !tbaa !187, !alias.scope !69, !noalias !90
│ br label %L462, !dbg !1835

│ L462: ; preds = %L451, %L445, %L442, %L385
│ %value_phi81 = phi i64 [ %arrayref94, %L451 ], [ 0, %L385 ], [ 0, %L445 ], [ 0, %L442 ]
│ %166 = mul i64 %value_phi81, %value_phi69, !dbg !2029
│ %.unpack346 = load i64, i64 addrspace(11)* %.elt345, align 8, !dbg !2032, !tbaa !88, !alias.scope !69, !noalias !90
│ %.unpack348 = load i64, i64 addrspace(11)* %.elt347, align 8, !dbg !2032, !tbaa !88, !alias.scope !69, !noalias !90
│ %.unpack350 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt349, align 8, !dbg !2032, !tbaa !88, !alias.scope !69, !noalias !90
│ %.unpack352 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt351, align 8, !dbg !2032, !tbaa !88, !alias.scope !69, !noalias !90
│ %.unpack354 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt353, align 8, !dbg !2032, !tbaa !88, !alias.scope !69, !noalias !90
│ store i64 %.unpack346, i64* %.fca.0.gep215, align 8, !dbg !2036, !noalias !1817
│ store i64 %.unpack348, i64* %.fca.1.gep, align 8, !dbg !2036, !noalias !1817
│ store {} addrspace(10)* %.unpack350, {} addrspace(10)** %.fca.2.gep217, align 8, !dbg !2036, !noalias !1817
│ store {} addrspace(10)* %.unpack352, {} addrspace(10)** %.fca.3.gep219, align 8, !dbg !2036, !noalias !1817
│ store {} addrspace(10)* %.unpack354, {} addrspace(10)** %.fca.4.gep, align 8, !dbg !2036, !noalias !1817
│ call fastcc void @julia__setindex_scalar__2591([3 x {} addrspace(10)] noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(24) "enzymejl_returnRoots" %5, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %119, i64 signext %166, i64 signext %iv.next2, i64 signext %iv.next) #64, !dbg !2036
│ %exitcond.not = icmp eq i64 %iv.next2, %.sroa.0234.0, !dbg !2037
│ br i1 %exitcond.not, label %L470.loopexit, label %L280, !dbg !1944, !llvm.loop !2038

│ L470.loopexit: ; preds = %L462
│ br label %L470, !dbg !2039

│ L470: ; preds = %L470.loopexit, %L271
│ %167 = add nuw i64 %iv.next, 1, !dbg !2039
│ %168 = icmp ult i64 %iv.next, 9223372036854775807, !dbg !2042
│ %169 = icmp sle i64 %167, %.sroa.0230.0, !dbg !2042
│ %170 = icmp ne i64 %iv.next, %.sroa.0230.0, !dbg !2045
│ %not. = and i1 %168, %169, !dbg !2045
│ %narrow = and i1 %170, %not., !dbg !2045
│ br i1 %narrow, label %L271, label %L507.loopexit, !dbg !1892

│ L492: ; preds = %L175
│ %171 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct150, i64 0, i64 0, i64 0, !dbg !1864
│ store i64 %92, i64* %171, align 8, !dbg !1864, !tbaa !278, !alias.scope !280, !noalias !1812
│ %172 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct150, i64 0, i64 1, i64 0, !dbg !1864
│ store i64 %93, i64* %172, align 8, !dbg !1864, !tbaa !278, !alias.scope !280, !noalias !1812
│ %173 = addrspacecast [2 x [1 x i64]]* %newstruct150 to [2 x [1 x i64]] addrspace(11), !dbg !1860
│ %174 = addrspacecast [2 x [1 x i64]]
%newstruct18 to [2 x [1 x i64]] addrspace(11), !dbg !1860
│ call fastcc void @julia_throwdm_2480([2 x [1 x i64]] addrspace(11)
nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %173, [2 x [1 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %174) #68, !dbg !1860
│ unreachable, !dbg !1860

│ L507.loopexit: ; preds = %L470
│ br label %L507, !dbg !2046

│ L507: ; preds = %L507.loopexit, %L239
│ %.elt368 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %91, i64 0, i32 1, !dbg !2046
│ %.unpack369 = load i64, i64 addrspace(11)* %.elt368, align 8, !dbg !2046, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt370 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %91, i64 0, i32 2, !dbg !2046
│ %.unpack371 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt370, align 8, !dbg !2046, !tbaa !88, !alias.scope !69, !noalias !90
│ %.elt374 = getelementptr inbounds { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* }, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* %91, i64 0, i32 4, !dbg !2046
│ %.unpack375 = load {} addrspace(10), {} addrspace(10) addrspace(11)* %.elt374, align 8, !dbg !2046, !tbaa !88, !alias.scope !69, !noalias !90
│ %175 = addrspacecast {} addrspace(10)* %.unpack371 to { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11), !dbg !2049
│ %arraylen_ptr117 = getelementptr inbounds { i8 addrspace(13), i64, i16, i16, i32 }, { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11)* %175, i64 0, i32 1, !dbg !2049
│ %arraylen118 = load i64, i64 addrspace(11)* %arraylen_ptr117, align 8, !dbg !2049, !tbaa !170, !range !173, !alias.scope !174, !noalias !175
│ %inbounds = icmp ult i64 %.unpack369, %arraylen118, !dbg !2049
│ br i1 %inbounds, label %idxend, label %oob, !dbg !2049

│ L570: ; preds = %idxend129
│ %176 = addrspacecast [1 x [2 x i64]]* %newstruct136 to [1 x [2 x i64]] addrspace(11), !dbg !2061
│ call fastcc void @julia_throw_boundserror_2571({} addrspace(10)
nofree noundef nonnull align 16 dereferenceable(40) %.unpack375, [1 x [2 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %176) #68, !dbg !2061
│ unreachable, !dbg !2061

│ L573: ; preds = %idxend129
│ %.fca.0.gep = getelementptr inbounds { {} addrspace(10), [1 x [2 x i64]], i64, i64 }, { {} addrspace(10), [1 x [2 x i64]], i64, i64 }* %7, i64 0, i32 0, !dbg !2065
│ store {} addrspace(10)* %.unpack375, {} addrspace(10)** %.fca.0.gep, align 8, !dbg !2065, !noalias !1817
│ %.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10), [1 x [2 x i64]], i64, i64 }, { {} addrspace(10), [1 x [2 x i64]], i64, i64 }* %7, i64 0, i32 1, i64 0, i64 0, !dbg !2065
│ store i64 1, i64* %.fca.1.0.0.gep, align 8, !dbg !2065, !noalias !1817
│ %.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10), [1 x [2 x i64]], i64, i64 }, { {} addrspace(10), [1 x [2 x i64]], i64, i64 }* %7, i64 0, i32 1, i64 0, i64 1, !dbg !2065
│ store i64 %184, i64* %.fca.1.0.1.gep, align 8, !dbg !2065, !noalias !1817
│ %.fca.2.gep = getelementptr inbounds { {} addrspace(10), [1 x [2 x i64]], i64, i64 }, { {} addrspace(10), [1 x [2 x i64]], i64, i64 }* %7, i64 0, i32 2, !dbg !2065
│ store i64 0, i64* %.fca.2.gep, align 8, !dbg !2065, !noalias !1817
│ %177 = addrspacecast { {} addrspace(10), [1 x [2 x i64]], i64, i64 } %7 to { {} addrspace(10), [1 x [2 x i64]], i64, i64 } addrspace(11), !dbg !2065
│ %178 = call fastcc i64 @julia__mapreduce_2573({ {} addrspace(10), [1 x [2 x i64]], i64, i64 } addrspace(11) nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %177) #64, !dbg !2065
│ br label %L599, !dbg !1891

│ L599: ; preds = %idxend, %L573
│ %value_phi122 = phi i64 [ %178, %L573 ], [ 0, %idxend ]
│ ret i64 %value_phi122, !dbg !2048

│ oob: ; preds = %L507
│ %179 = add i64 %.unpack369, 1, !dbg !2066
│ %errorbox = alloca i64, align 8, !dbg !2049
│ store i64 %179, i64* %errorbox, align 8, !dbg !2049, !noalias !1817
│ %180 = addrspacecast {} addrspace(10)* %.unpack371 to {} addrspace(12), !dbg !2049
│ call void @ijl_bounds_error_ints({} addrspace(12)
%180, i64* noundef nonnull align 8 %errorbox, i64 noundef 1) #68, !dbg !2049
│ unreachable, !dbg !2049

│ idxend: ; preds = %L507
│ %181 = addrspacecast {} addrspace(10)* %.unpack371 to i64 addrspace(13)* addrspace(11), !dbg !2049
│ %arrayptr120376 = load i64 addrspace(13)
, i64 addrspace(13)* addrspace(11)* %181, align 8, !dbg !2049, !tbaa !184, !alias.scope !1963, !noalias !175, !nonnull !48
│ %182 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr120376, i64 %.unpack369, !dbg !2049
│ %arrayref121 = load i64, i64 addrspace(13)* %182, align 8, !dbg !2049, !tbaa !187, !alias.scope !69, !noalias !90
│ %183 = add i64 %arrayref121, -1, !dbg !2067
│ %.not377 = icmp eq i64 %183, 0, !dbg !2068
│ br i1 %.not377, label %L599, label %idxend129, !dbg !2069

│ idxend129: ; preds = %idxend
│ %184 = call i64 @llvm.smax.i64(i64 %183, i64 noundef 0) #64, !dbg !2070
│ %newstruct134.sroa.0.0..sroa_idx = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %newstruct136, i64 0, i64 0, i64 0, !dbg !2073
│ store i64 1, i64* %newstruct134.sroa.0.0..sroa_idx, align 8, !dbg !2073, !tbaa !278, !alias.scope !280, !noalias !1812
│ %newstruct134.sroa.3.0..sroa_idx213 = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %newstruct136, i64 0, i64 0, i64 1, !dbg !2073
│ store i64 %184, i64* %newstruct134.sroa.3.0..sroa_idx213, align 8, !dbg !2073, !tbaa !278, !alias.scope !280, !noalias !1812
│ %185 = addrspacecast {} addrspace(10)* %.unpack375 to { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11), !dbg !2074
│ %arraylen_ptr137 = getelementptr inbounds { i8 addrspace(13), i64, i16, i16, i32 }, { i8 addrspace(13), i64, i16, i16, i32 } addrspace(11)* %185, i64 0, i32 1, !dbg !2074
│ %arraylen138 = load i64, i64 addrspace(11)* %arraylen_ptr137, align 8, !dbg !2074, !tbaa !170, !range !173, !alias.scope !174, !noalias !175
│ %186 = icmp sgt i64 %183, 0, !dbg !2079
│ %187 = add nsw i64 %184, -1, !dbg !2083
│ %188 = icmp uge i64 %187, %arraylen138, !dbg !2085
│ %189 = and i1 %186, %188, !dbg !2061
│ br i1 %189, label %L570, label %L573, !dbg !2061
│ }

│ No create nofree of empty function (ijl_array_grow_at) ijl_array_grow_at)
│ at context: call fastcc void @julia__setindex_scalar__2591([3 x {} addrspace(10)] noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(24) "enzymejl_returnRoots" %5, { i64, i64, {} addrspace(10), {} addrspace(10), {} addrspace(10)* } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %119, i64 signext %166, i64 signext %iv.next2, i64 signext %iv.next) #64, !dbg !436 (julia__setindex_scalar__2591)

│ Stacktrace:
│ [1] setindex!
│ @ ~/.julia/juliaup/julia-1.10.3+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/SparseArrays/src/sparsematrix.jl:3121
│ [2] setindex!
│ @ ~/.julia/packages/NamedArrays/BRaai/src/index.jl:27
│ [3] _setindex!
│ @ ./abstractarray.jl:1426
│ [4] setindex!
│ @ ./abstractarray.jl:1396
│ [5] macro expansion
│ @ ./broadcast.jl:1004
│ [6] macro expansion
│ @ ./simdloop.jl:77
│ [7] copyto!
│ @ ./broadcast.jl:1003
│ [8] copyto!
│ @ ./broadcast.jl:956
│ [9] copy
│ @ ./broadcast.jl:928
│ [10] materialize
│ @ ./broadcast.jl:903
│ [11] foo
│ @ ~/mwe.jl:5


│ Stacktrace:
│ [1] throwerr(cstr::Cstring)
│ @ Enzyme.Compiler ~/.julia/packages/Enzyme/UZsMX/src/compiler.jl:1332
│ [2] setindex!
│ @ ~/.julia/juliaup/julia-1.10.3+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/SparseArrays/src/sparsematrix.jl:3121 [inlined]
│ [3] setindex!
│ @ ~/.julia/packages/NamedArrays/BRaai/src/index.jl:27 [inlined]
│ [4] _setindex!
│ @ ./abstractarray.jl:1426 [inlined]
│ [5] setindex!
│ @ ./abstractarray.jl:1396 [inlined]
│ [6] macro expansion
│ @ ./broadcast.jl:1004 [inlined]
│ [7] macro expansion
│ @ ./simdloop.jl:77 [inlined]
│ [8] copyto!
│ @ ./broadcast.jl:1003 [inlined]
│ [9] copyto!
│ @ ./broadcast.jl:956 [inlined]
│ [10] copy
│ @ ./broadcast.jl:928 [inlined]
│ [11] materialize
│ @ ./broadcast.jl:903 [inlined]
│ [12] foo
│ @ ~/mwe.jl:5 [inlined]
│ [13] diffejulia_foo_2466wrap
│ @ ~/mwe.jl:0
│ [14] macro expansion
│ @ ~/.julia/packages/Enzyme/UZsMX/src/compiler.jl:5855 [inlined]
│ [15] enzyme_call
│ @ ~/.julia/packages/Enzyme/UZsMX/src/compiler.jl:5521 [inlined]
│ [16] CombinedAdjointThunk
│ @ ~/.julia/packages/Enzyme/UZsMX/src/compiler.jl:5400 [inlined]
│ [17] autodiff
│ @ ~/.julia/packages/Enzyme/UZsMX/src/Enzyme.jl:291 [inlined]
│ [18] autodiff
│ @ ~/.julia/packages/Enzyme/UZsMX/src/Enzyme.jl:315 [inlined]
│ [19] autodiff
│ @ ~/.julia/packages/Enzyme/UZsMX/src/Enzyme.jl:300 [inlined]
│ [20] test_gradient()
│ @ Main ~/mwe.jl:18
│ [21] macro expansion
│ @ logging.jl:372 [inlined]
│ [22] top-level scope
│ @ ~/mwe.jl:26
│ [23] eval
│ @ ./boot.jl:385 [inlined]
│ [24] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
│ @ Base ./loading.jl:2076
│ [25] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@kwargs{})
│ @ Base ./essentials.jl:892
│ [26] invokelatest(::Any, ::Any, ::Vararg{Any})
│ @ Base ./essentials.jl:889
│ [27] inlineeval(m::Module, code::String, code_line::Int64, code_column::Int64, file::String; softscope::Bool)
│ @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:271
│ [28] (::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
│ @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:181
│ [29] withpath(f::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, path::String)
│ @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/repl.jl:276
│ [30] (::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
│ @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:179
│ [31] hideprompt(f::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})
│ @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/repl.jl:38
│ [32] (::VSCodeServer.var"#67#72"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
│ @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:150
│ [33] with_logstate(f::Function, logstate::Any)
│ @ Base.CoreLogging ./logging.jl:515
│ [34] with_logger
│ @ ./logging.jl:627 [inlined]
│ [35] (::VSCodeServer.var"#66#71"{VSCodeServer.ReplRunCodeRequestParams})()
│ @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:263
│ [36] #invokelatest#2
│ @ ./essentials.jl:892 [inlined]
│ [37] invokelatest(::Any)
│ @ Base ./essentials.jl:889
│ [38] (::VSCodeServer.var"#64#65")()
│ @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:34
└ @ Main ~/mwe.jl:26

@wsmoses
Copy link
Member

wsmoses commented May 25, 2024 via email

@JohannesNaegele
Copy link
Author

It didn't fit into the initial comment, that's why I added the error seperately...
I upgraded Enzyme.jl now (I was 0.12.6) but this doesn't change the behavior. I will change the error log above to the new version.

(@v1.10) pkg> status Enzyme
Status `~/.julia/environments/v1.10/Project.toml`
  [7da242da] Enzyme v0.12.8
julia> versioninfo()
Julia Version 1.10.3
Commit 0b4590a5507 (2024-04-30 10:59 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: macOS (arm64-apple-darwin22.4.0)
  CPU: 8 × Apple M2
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, apple-m1)
Threads: 12 default, 0 interactive, 4 GC (on 4 virtual cores)
Environment:
  JULIA_EDITOR = code
  JULIA_NUM_THREADS = 12

@wsmoses
Copy link
Member

wsmoses commented May 25, 2024 via email

@JohannesNaegele
Copy link
Author

xd

@wsmoses
Copy link
Member

wsmoses commented May 26, 2024

@JohannesNaegele #1473 should fix the error from the log

@JohannesNaegele
Copy link
Author

@JohannesNaegele #1473 should fix the error from the log

Yes it does!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants