EnzymeAD / Enzyme.jl

Julia bindings for the Enzyme automatic differentiator
https://enzyme.mit.edu
MIT License
443 stars 62 forks source link

Compilation fails with named sparse arrays #1471

Closed JohannesNaegele closed 4 months ago

JohannesNaegele commented 4 months ago

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 commented 4 months ago

┌ 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 @juliasetindex_scalar2591([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 commented 4 months ago

Can you post the error log and version

On Sat, May 25, 2024 at 6:24 PM JohannesNaegele @.***> wrote:

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()

— Reply to this email directly, view it on GitHub https://github.com/EnzymeAD/Enzyme.jl/issues/1471, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAJTUXABRQISJTCZ7SUSLETZEEFR7AVCNFSM6AAAAABIJHHVUWVHI2DSMVQWIX3LMV43ASLTON2WKOZSGMYTOMRXGYYDQNQ . You are receiving this because you are subscribed to this thread.Message ID: @.***>

JohannesNaegele commented 4 months ago

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 commented 4 months ago

Yeah sorry we had a race condition where I was responding asking about a log at the same time that you were uploading the log xD

On Sat, May 25, 2024 at 7:30 PM JohannesNaegele @.***> wrote:

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.

@.***) 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

— Reply to this email directly, view it on GitHub https://github.com/EnzymeAD/Enzyme.jl/issues/1471#issuecomment-2131674115, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAJTUXCBFFNF2CRSIHNJPJLZEENH5AVCNFSM6AAAAABIJHHVUWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZRGY3TIMJRGU . You are receiving this because you commented.Message ID: <EnzymeAD/Enzyme. @.***>

JohannesNaegele commented 4 months ago

xd

wsmoses commented 4 months ago

@JohannesNaegele https://github.com/EnzymeAD/Enzyme.jl/pull/1473 should fix the error from the log

JohannesNaegele commented 4 months ago

@JohannesNaegele #1473 should fix the error from the log

Yes it does!