Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Type inference fails on LinearAlgebra.mul! #91

Closed
vchuravy opened this issue Jul 19, 2021 · 2 comments · Fixed by EnzymeAD/Enzyme#239
Closed

Type inference fails on LinearAlgebra.mul! #91

vchuravy opened this issue Jul 19, 2021 · 2 comments · Fixed by EnzymeAD/Enzyme#239
Assignees

Comments

@vchuravy
Copy link
Member

using LinearAlgebra
using Enzyme

function la_mul!(R, A, B)
         LinearAlgebra.mul!(R, A, B)
         nothing
end

A = rand(1024, 64)
B = rand(64, 512)

R = zeros(size(A,1), size(B,2))
∂z_∂R = rand(size(R)...)  # Some gradient/tangent passed to us

∂z_∂A = zero(A)
∂z_∂B = zero(B)

Enzyme.autodiff(la_mul!, 
               Duplicated(R, ∂z_∂R),
               Duplicated(A, ∂z_∂A),
               Duplicated(B, ∂z_∂B))

Currently crashes spectacularly on master by failing to infer some integer

@wsmoses
Copy link
Member

wsmoses commented Jul 20, 2021

Diving in a bit deeper to this, I'm surprised this occurs -- and it appears to be an insufficient optimization pipeline?

%.not52 = icmp eq i32 1308622848, 1308622848, !dbg !1406
%26 = select i1 %.not52, i64 3, i64 4, !dbg !1409

val:   %29 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %28, i64 %26, !dbg !93 - {[-1]:Pointer}

val:   %28 = addrspacecast {} addrspace(10)* addrspace(10)* %27 to {} addrspace(10)* addrspace(11)*, !dbg !93 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}

So the gep of an unknown address reasonably claims to fallback and not assume anything. In this case from the select it is either 3 or 4. I could hard code in a select rule for here, but I feel like the bigger issue is why that icmp isn't eliminated [thus preventing the select, etc].

@wsmoses
Copy link
Member

wsmoses commented Jul 20, 2021

I'm also surprised that activity analysis didn't say the load was inactive regardless:


define internal fastcc nonnull align 16 dereferenceable(40) {} addrspace(10)* @preprocess_julia_gemm__1535(double %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, double %3, {} addrspace(10)* nonnull returned align 16 dereferenceable(40) %4) unnamed_addr !dbg !1399 {
top:
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  %7 = alloca i64, align 16
  %8 = alloca i64, align 16
  %9 = alloca i64, align 16
  %10 = alloca i64, align 16
  %11 = alloca i64, align 16
  %12 = alloca i64, align 16
  %13 = alloca i64, align 16
  %14 = alloca i64, align 16
  %15 = call {}*** @julia.ptls_states()
  %.not = icmp eq i32 1308622848, 1308622848, !dbg !1400
  %16 = select i1 %.not, i64 3, i64 4, !dbg !1403
  %17 = bitcast {} addrspace(10)* %1 to {} addrspace(10)* addrspace(10)*, !dbg !1403
  %18 = addrspacecast {} addrspace(10)* addrspace(10)* %17 to {} addrspace(10)* addrspace(11)*, !dbg !1403
  %19 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %18, i64 %16, !dbg !1403
  %20 = bitcast {} addrspace(10)* addrspace(11)* %19 to i64 addrspace(11)*, !dbg !1403
  %21 = load i64, i64 addrspace(11)* %20, align 8, !dbg !1403, !tbaa !107, !range !161, !invariant.load !4
  %22 = select i1 %.not, i64 4, i64 3, !dbg !1404
  %23 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %18, i64 %22, !dbg !1404
  %24 = bitcast {} addrspace(10)* addrspace(11)* %23 to i64 addrspace(11)*, !dbg !1404
  %25 = load i64, i64 addrspace(11)* %24, align 8, !dbg !1404, !tbaa !107, !range !161, !invariant.load !4
  %.not52 = icmp eq i32 1308622848, 1308622848, !dbg !1406
  %26 = select i1 %.not52, i64 3, i64 4, !dbg !1409
  %27 = bitcast {} addrspace(10)* %2 to {} addrspace(10)* addrspace(10)*, !dbg !1409
  %28 = addrspacecast {} addrspace(10)* addrspace(10)* %27 to {} addrspace(10)* addrspace(11)*, !dbg !1409
  %29 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %28, i64 %26, !dbg !1409
  %30 = bitcast {} addrspace(10)* addrspace(11)* %29 to i64 addrspace(11)*, !dbg !1409
  %31 = load i64, i64 addrspace(11)* %30, align 8, !dbg !1409, !tbaa !107, !range !161, !invariant.load !4
  %32 = select i1 %.not52, i64 4, i64 3, !dbg !1410
  %33 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %28, i64 %32, !dbg !1410
  %34 = bitcast {} addrspace(10)* addrspace(11)* %33 to i64 addrspace(11)*, !dbg !1410
  %35 = load i64, i64 addrspace(11)* %34, align 8, !dbg !1410, !tbaa !107, !range !161, !invariant.load !4
  %.not59 = icmp eq i64 %25, %31, !dbg !1412
  %36 = bitcast {} addrspace(10)* %4 to {} addrspace(10)* addrspace(10)*, !dbg !1415
  %37 = addrspacecast {} addrspace(10)* addrspace(10)* %36 to {} addrspace(10)* addrspace(11)*, !dbg !1415
  %38 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %37, i64 3, !dbg !1415
  %39 = bitcast {} addrspace(10)* addrspace(11)* %38 to i64 addrspace(11)*, !dbg !1415
  %40 = load i64, i64 addrspace(11)* %39, align 8, !dbg !1415, !tbaa !107, !range !161, !invariant.load !4
  %.not60 = icmp eq i64 %21, %40
  %or.cond = and i1 %.not59, %.not60, !dbg !1414
  br i1 %or.cond, label %L59, label %L61, !dbg !1414

L59:                                              ; preds = %top
  %41 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %37, i64 4, !dbg !1416
  %42 = bitcast {} addrspace(10)* addrspace(11)* %41 to i64 addrspace(11)*, !dbg !1416
  %43 = load i64, i64 addrspace(11)* %42, align 8, !dbg !1416, !tbaa !107, !range !161, !invariant.load !4
  %.not61 = icmp eq i64 %35, %43, !dbg !1412
  br i1 %.not61, label %L68, label %L61, !dbg !1414

L61:                                              ; preds = %L59, %top
  %44 = phi i64 [ %21, %L59 ], [ %40, %top ], !dbg !1417
  %45 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %37, i64 4, !dbg !1417
  %46 = bitcast {} addrspace(10)* addrspace(11)* %45 to i64 addrspace(11)*, !dbg !1417
  %47 = load i64, i64 addrspace(11)* %46, align 8, !dbg !1417, !tbaa !107, !range !161, !invariant.load !4
  %48 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %21), !dbg !1419
  %49 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %25), !dbg !1419
  %50 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %31), !dbg !1419
  %51 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %35), !dbg !1419
  %52 = bitcast {}*** %15 to i8*, !dbg !1419
  %53 = call noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj(i8* %52, i64 16, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4629366288 to {}*) to {} addrspace(10)*)) #4, !dbg !1419
  %54 = bitcast {} addrspace(10)* %53 to i8 addrspace(10)*, !dbg !1419
  %.sroa.0.0..sroa_cast = bitcast {} addrspace(10)* %53 to i64 addrspace(10)*, !dbg !1419
  store i64 %44, i64 addrspace(10)* %.sroa.0.0..sroa_cast, align 8, !dbg !1419, !tbaa !452
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, i8 addrspace(10)* %54, i64 8, !dbg !1419
  %.sroa.2.0..sroa_cast = bitcast i8 addrspace(10)* %.sroa.2.0..sroa_idx to i64 addrspace(10)*, !dbg !1419
  store i64 %47, i64 addrspace(10)* %.sroa.2.0..sroa_cast, align 8, !dbg !1419, !tbaa !452
  %55 = call cc38 nonnull {} addrspace(10)* bitcast ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* @jl_invoke to {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)*)({} addrspace(10)* addrspacecast ({}* inttoptr (i64 4630038208 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4692602000 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959616 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %48, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959648 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %49, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959680 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %50, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959648 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %51, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959712 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %53), !dbg !1419
  call void @llvm.trap() #11, !dbg !1418
  unreachable, !dbg !1418

L68:                                              ; preds = %L59
  %56 = icmp slt i32 1308622848, 0, !dbg !1420
  br i1 %56, label %L77, label %L72, !dbg !1423

L72:                                              ; preds = %L68
  %57 = lshr i32 1308622848, 24, !dbg !1429
  br label %L90, !dbg !1423

L77:                                              ; preds = %L68
  %58 = call fastcc i32 @julia_UInt32_1543(i32 zeroext 1308622848), !dbg !1423
  %59 = icmp ugt i32 %58, 255, !dbg !1431
  br i1 %59, label %L83, label %L90, !dbg !1431

L83:                                              ; preds = %L77
  %60 = call fastcc nonnull {} addrspace(10)* @julia_throw_inexacterror_1541(i32 zeroext %58) #11, !dbg !1431
  unreachable, !dbg !1431

L90:                                              ; preds = %L77, %L72
  %value_phi20.in = phi i32 [ %57, %L72 ], [ %58, %L77 ]
  %value_phi20 = trunc i32 %value_phi20.in to i8, !dbg !1434
  call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %5)
  store i8 %value_phi20, i8* %5, align 1, !dbg !1425, !tbaa !698
  %61 = icmp slt i32 1308622848, 0, !dbg !1420
  br i1 %61, label %L103, label %L98, !dbg !1423

L98:                                              ; preds = %L90
  %62 = lshr i32 1308622848, 24, !dbg !1429
  br label %L116, !dbg !1423

L103:                                             ; preds = %L90
  %63 = call fastcc i32 @julia_UInt32_1543(i32 zeroext 1308622848), !dbg !1423
  %64 = icmp ugt i32 %63, 255, !dbg !1431
  br i1 %64, label %L109, label %L116, !dbg !1431

L109:                                             ; preds = %L103
  call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %5)
  %65 = call fastcc nonnull {} addrspace(10)* @julia_throw_inexacterror_1541(i32 zeroext %63) #11, !dbg !1431
  unreachable, !dbg !1431

L116:                                             ; preds = %L103, %L98
  %value_phi21.in = phi i32 [ %62, %L98 ], [ %63, %L103 ]
  %value_phi21 = trunc i32 %value_phi21.in to i8, !dbg !1434
  %66 = bitcast i64* %14 to i8*
  %67 = bitcast i64* %13 to i8*
  %68 = bitcast i64* %12 to i8*
  %69 = bitcast i64* %11 to i8*
  %70 = bitcast i64* %10 to i8*
  %71 = bitcast i64* %9 to i8*
  %72 = bitcast i64* %8 to i8*
  %73 = bitcast i64* %7 to i8*
  call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %6)
  store i8 %value_phi21, i8* %6, align 1, !dbg !1425, !tbaa !698
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %73)
  store i64 %21, i64* %7, align 16, !dbg !1425, !tbaa !698
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %72)
  store i64 %35, i64* %8, align 16, !dbg !1425, !tbaa !698
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %71)
  store i64 %25, i64* %9, align 16, !dbg !1425, !tbaa !698
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %70)
  %74 = bitcast i64* %10 to double*, !dbg !1425
  store double %0, double* %74, align 16, !dbg !1425, !tbaa !698
  %75 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %18, i64 3, !dbg !1435
  %76 = bitcast {} addrspace(10)* addrspace(11)* %75 to i64 addrspace(11)*, !dbg !1435
  %77 = load i64, i64 addrspace(11)* %76, align 8, !dbg !1435, !tbaa !107, !range !161, !invariant.load !4
  %.not55 = icmp eq i64 %77, 0, !dbg !1438
  %78 = select i1 %.not55, i64 1, i64 %77, !dbg !1439
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %69)
  store i64 %78, i64* %11, align 16, !dbg !1425, !tbaa !698
  %79 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %28, i64 3, !dbg !1435
  %80 = bitcast {} addrspace(10)* addrspace(11)* %79 to i64 addrspace(11)*, !dbg !1435
  %81 = load i64, i64 addrspace(11)* %80, align 8, !dbg !1435, !tbaa !107, !range !161, !invariant.load !4
  %.not56 = icmp eq i64 %81, 0, !dbg !1438
  %82 = select i1 %.not56, i64 1, i64 %81, !dbg !1439
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %68)
  store i64 %82, i64* %12, align 16, !dbg !1425, !tbaa !698
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %67)
  %83 = bitcast i64* %13 to double*, !dbg !1425
  store double %3, double* %83, align 16, !dbg !1425, !tbaa !698
  %.not57 = icmp eq i64 %21, 0, !dbg !1438
  %84 = select i1 %.not57, i64 1, i64 %21, !dbg !1439
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %66)
  store i64 %84, i64* %14, align 16, !dbg !1425, !tbaa !698
  %85 = addrspacecast {} addrspace(10)* %1 to {} addrspace(11)*, !dbg !1440
  %86 = call nonnull align 8 {}* @julia.pointer_from_objref({} addrspace(11)* %85) #7, !dbg !1440
  %87 = bitcast {}* %86 to i64*, !dbg !1440
  %88 = load i64, i64* %87, align 8, !dbg !1440, !tbaa !107, !range !350, !invariant.load !4
  %89 = addrspacecast {} addrspace(10)* %2 to {} addrspace(11)*, !dbg !1440
  %90 = call nonnull align 8 {}* @julia.pointer_from_objref({} addrspace(11)* %89) #7, !dbg !1440
  %91 = bitcast {}* %90 to i64*, !dbg !1440
  %92 = load i64, i64* %91, align 8, !dbg !1440, !tbaa !107, !range !350, !invariant.load !4
  %93 = addrspacecast {} addrspace(10)* %4 to {} addrspace(11)*, !dbg !1440
  %94 = call nonnull align 8 {}* @julia.pointer_from_objref({} addrspace(11)* %93) #7, !dbg !1440
  %95 = bitcast {}* %94 to i64*, !dbg !1440
  %96 = load i64, i64* %95, align 8, !dbg !1440, !tbaa !107, !range !350, !invariant.load !4
  call void @dgemm_64_(i8* nonnull %5, i8* nonnull %6, i8* nonnull %73, i8* nonnull %72, i8* nonnull %71, i8* nonnull %70, i64 %88, i8* nonnull %69, i64 %92, i8* nonnull %68, i8* nonnull %67, i64 %96, i8* nonnull %66, i64 1, i64 1) [ "jl_roots"({} addrspace(10)* null, {} addrspace(10)* %4, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* %2, {} addrspace(10)* null, {} addrspace(10)* %1, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* null) ], !dbg !1428
  ret {} addrspace(10)* undef, !dbg !1441
}

val: i32 255 - {[-1]:Integer}
val: {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4630038208 to {}*) to {} addrspace(10)*) - {[-1]:Anything}
val: {}* inttoptr (i64 4630038208 to {}*) - {[-1]:Anything}
val:   store i64 %21, i64* %7, align 16, !dbg !120, !tbaa !140 - {}
val:   ret {} addrspace(10)* undef, !dbg !158 - {}
val:   store i64 %78, i64* %11, align 16, !dbg !120, !tbaa !140 - {}
val:   store double %3, double* %83, align 16, !dbg !120, !tbaa !140 - {}
val:   %96 = load i64, i64* %95, align 8, !dbg !154, !tbaa !83, !range !157, !invariant.load !4 - {[-1]:Pointer, [-1,-1]:Float@double}
val:   %91 = bitcast {}* %90 to i64*, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %20 = bitcast {} addrspace(10)* addrspace(11)* %19 to i64 addrspace(11)*, !dbg !80 - {[-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}
val:   %87 = bitcast {}* %86 to i64*, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %83 = bitcast i64* %13 to double*, !dbg !120 - {[-1]:Pointer, [-1,0]:Float@double}
val:   %.not61 = icmp eq i64 %35, %43, !dbg !96 - {[-1]:Integer}
val:   %93 = addrspacecast {} addrspace(10)* %4 to {} addrspace(11)*, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   store i64 %84, i64* %14, align 16, !dbg !120, !tbaa !140 - {}
val:   br label %L116, !dbg !116 - {}
val:   %72 = bitcast i64* %8 to i8* - {[-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}
val:   %77 = load i64, i64 addrspace(11)* %76, align 8, !dbg !144, !tbaa !83, !range !87, !invariant.load !4 - {[-1]:Integer}
val:   br label %L90, !dbg !116 - {}
val:   %69 = bitcast i64* %11 to i8* - {[-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}
val:   %46 = bitcast {} addrspace(10)* addrspace(11)* %45 to i64 addrspace(11)*, !dbg !103 - {}
val:   %88 = load i64, i64* %87, align 8, !dbg !154, !tbaa !83, !range !157, !invariant.load !4 - {[-1]:Pointer, [-1,-1]:Float@double}
val:   %57 = lshr i32 1308622848, 24, !dbg !130 - {[-1]:Anything}
val:   %52 = bitcast {}*** %15 to i8*, !dbg !105 - {}
val:   %61 = icmp slt i32 1308622848, 0, !dbg !109 - {[-1]:Integer}
val:   %74 = bitcast i64* %10 to double*, !dbg !120 - {[-1]:Pointer, [-1,0]:Float@double}
val:   %.not56 = icmp eq i64 %81, 0, !dbg !150 - {[-1]:Integer}
val:   %.sroa.0.0..sroa_cast = bitcast {} addrspace(10)* %53 to i64 addrspace(10)*, !dbg !105 - {}
val:   %25 = load i64, i64 addrspace(11)* %24, align 8, !dbg !88, !tbaa !83, !range !87, !invariant.load !4 - {}
val:   %47 = load i64, i64 addrspace(11)* %46, align 8, !dbg !103, !tbaa !83, !range !87, !invariant.load !4 - {}
val:   %81 = load i64, i64 addrspace(11)* %80, align 8, !dbg !144, !tbaa !83, !range !87, !invariant.load !4 - {[-1]:Integer}
val:   %62 = lshr i32 1308622848, 24, !dbg !130 - {[-1]:Anything}
val:   %value_phi20 = trunc i32 %value_phi20.in to i8, !dbg !139 - {[-1]:Anything}
val:   %8 = alloca i64, align 16 - {[-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}
val:   store i64 %25, i64* %9, align 16, !dbg !120, !tbaa !140 - {}
val:   %56 = icmp slt i32 1308622848, 0, !dbg !109 - {[-1]:Integer}
val:   store i8 %value_phi20, i8* %5, align 1, !dbg !120, !tbaa !140 - {}
val:   %5 = alloca i8, align 1 - {[-1]:Pointer, [-1,0]:Integer}
val: {}* inttoptr (i64 4663959616 to {}*) - {[-1]:Anything}
val: {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959616 to {}*) to {} addrspace(10)*) - {[-1]:Anything}
val: {}* inttoptr (i64 4663959712 to {}*) - {[-1]:Anything}
val: {}* inttoptr (i64 4663959648 to {}*) - {[-1]:Anything}
val: {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959648 to {}*) to {} addrspace(10)*) - {[-1]:Anything}
val: {}* inttoptr (i64 4663959680 to {}*) - {[-1]:Anything}
val: {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959680 to {}*) to {} addrspace(10)*) - {[-1]:Anything}
val: {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959712 to {}*) to {} addrspace(10)*) - {[-1]:Anything}
val: {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)* bitcast ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* @jl_invoke to {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)*) - {[-1]:Pointer}
val:   %59 = icmp ugt i32 %58, 255, !dbg !133 - {[-1]:Integer}
val:   %67 = bitcast i64* %13 to i8* - {[-1]:Pointer, [-1,0]:Float@double}
val:   store double %0, double* %74, align 16, !dbg !120, !tbaa !140 - {}
val:   %.not57 = icmp eq i64 %21, 0, !dbg !150 - {[-1]:Integer}
val:   %68 = bitcast i64* %12 to i8* - {[-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}
val:   %.not52 = icmp eq i32 1308622848, 1308622848, !dbg !90 - {[-1]:Integer}
val:   %.sroa.2.0..sroa_cast = bitcast i8 addrspace(10)* %.sroa.2.0..sroa_idx to i64 addrspace(10)*, !dbg !105 - {}
val:   %13 = alloca i64, align 16 - {[-1]:Pointer, [-1,0]:Float@double}
val:   %7 = alloca i64, align 16 - {[-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}
val:   %85 = addrspacecast {} addrspace(10)* %1 to {} addrspace(11)*, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %10 = alloca i64, align 16 - {[-1]:Pointer, [-1,0]:Float@double}
val:   %42 = bitcast {} addrspace(10)* addrspace(11)* %41 to i64 addrspace(11)*, !dbg !102 - {[-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}
val:   %36 = bitcast {} addrspace(10)* %4 to {} addrspace(10)* addrspace(10)*, !dbg !101 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %9 = alloca i64, align 16 - {[-1]:Pointer}
val:   %.not55 = icmp eq i64 %77, 0, !dbg !150 - {[-1]:Integer}
val:   %71 = bitcast i64* %9 to i8* - {[-1]:Pointer}
val:   %6 = alloca i8, align 1 - {[-1]:Pointer, [-1,0]:Integer}
val:   %21 = load i64, i64 addrspace(11)* %20, align 8, !dbg !80, !tbaa !83, !range !87, !invariant.load !4 - {[-1]:Integer}
val:   %value_phi21 = trunc i32 %value_phi21.in to i8, !dbg !139 - {[-1]:Anything}
val:   %18 = addrspacecast {} addrspace(10)* addrspace(10)* %17 to {} addrspace(10)* addrspace(11)*, !dbg !80 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   store i8 %value_phi21, i8* %6, align 1, !dbg !120, !tbaa !140 - {}
val:   %.not = icmp eq i32 1308622848, 1308622848, !dbg !74 - {[-1]:Integer}
val:   %95 = bitcast {}* %94 to i64*, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %64 = icmp ugt i32 %63, 255, !dbg !133 - {[-1]:Integer}
val:   %34 = bitcast {} addrspace(10)* addrspace(11)* %33 to i64 addrspace(11)*, !dbg !94 - {[-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}
val: declare nonnull {} addrspace(10)* @jl_invoke({} addrspace(10)*, {} addrspace(10)** nocapture readonly, i32, {} addrspace(10)*) local_unnamed_addr
 - {[-1]:Pointer}
val:   %.not59 = icmp eq i64 %25, %31, !dbg !96 - {[-1]:Integer}
val:   %12 = alloca i64, align 16 - {[-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}
val:   %39 = bitcast {} addrspace(10)* addrspace(11)* %38 to i64 addrspace(11)*, !dbg !101 - {[-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]:Integer}
val:   %35 = load i64, i64 addrspace(11)* %34, align 8, !dbg !94, !tbaa !83, !range !87, !invariant.load !4 - {[-1]:Integer}
val:   %27 = bitcast {} addrspace(10)* %2 to {} addrspace(10)* addrspace(10)*, !dbg !93 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %92 = load i64, i64* %91, align 8, !dbg !154, !tbaa !83, !range !157, !invariant.load !4 - {[-1]:Pointer, [-1,-1]:Float@double}
val:   %43 = load i64, i64 addrspace(11)* %42, align 8, !dbg !102, !tbaa !83, !range !87, !invariant.load !4 - {[-1]:Integer}
val:   %31 = load i64, i64 addrspace(11)* %30, align 8, !dbg !93, !tbaa !83, !range !87, !invariant.load !4 - {}
val:   %73 = bitcast i64* %7 to i8* - {[-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}
val:   %40 = load i64, i64 addrspace(11)* %39, align 8, !dbg !101, !tbaa !83, !range !87, !invariant.load !4 - {[-1]:Integer}
val:   %66 = bitcast i64* %14 to i8* - {[-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}
val:   %37 = addrspacecast {} addrspace(10)* addrspace(10)* %36 to {} addrspace(10)* addrspace(11)*, !dbg !101 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %15 = call {}*** @julia.ptls_states() - {}
val:   %.not60 = icmp eq i64 %21, %40 - {[-1]:Integer}
val:   %30 = bitcast {} addrspace(10)* addrspace(11)* %29 to i64 addrspace(11)*, !dbg !93 - {[-1]:Pointer}
val:   %14 = alloca i64, align 16 - {[-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}
val:   store i64 %35, i64* %8, align 16, !dbg !120, !tbaa !140 - {}
val:   %70 = bitcast i64* %10 to i8* - {[-1]:Pointer, [-1,0]:Float@double}
val:   %or.cond = and i1 %.not59, %.not60, !dbg !100 - {[-1]:Integer}
val:   %28 = addrspacecast {} addrspace(10)* addrspace(10)* %27 to {} addrspace(10)* addrspace(11)*, !dbg !93 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %89 = addrspacecast {} addrspace(10)* %2 to {} addrspace(11)*, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %55 = call cc38 nonnull {} addrspace(10)* bitcast ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* @jl_invoke to {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)*)({} addrspace(10)* addrspacecast ({}* inttoptr (i64 4630038208 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4692602000 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959616 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %48, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959648 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %49, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959680 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %50, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959648 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %51, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4663959712 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %53), !dbg !105 - {}
val:   %38 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %37, i64 3, !dbg !101 - {[-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]:Integer}
val:   br i1 %or.cond, label %L59, label %L61, !dbg !100 - {}
val:   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %70) - {}
val:   %75 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %18, i64 3, !dbg !144 - {[-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]:Integer}
val:   %76 = bitcast {} addrspace(10)* addrspace(11)* %75 to i64 addrspace(11)*, !dbg !144 - {[-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]:Integer}
val:   %45 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %37, i64 4, !dbg !103 - {}
val:   %48 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %21), !dbg !105 - {}
val:   %26 = select i1 %.not52, i64 3, i64 4, !dbg !93 - {[-1]:Integer}

val:   %29 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %28, i64 %26, !dbg !93 - {[-1]:Pointer}

val:   %90 = call nonnull align 8 {}* @julia.pointer_from_objref({} addrspace(11)* %89) #7, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %94 = call nonnull align 8 {}* @julia.pointer_from_objref({} addrspace(11)* %93) #7, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %16 = select i1 %.not, i64 3, i64 4, !dbg !80 - {[-1]:Integer}
val:   %17 = bitcast {} addrspace(10)* %1 to {} addrspace(10)* addrspace(10)*, !dbg !80 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %19 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %18, i64 %16, !dbg !80 - {[-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}
val:   %23 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %18, i64 %22, !dbg !88 - {[-1]:Pointer}
val:   br i1 %59, label %L83, label %L90, !dbg !133 - {}
val:   %44 = phi i64 [ %21, %L59 ], [ %40, %top ], !dbg !103 - {[-1]:Integer}
val:   %79 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %28, i64 3, !dbg !144 - {[-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]:Integer}
val:   %82 = select i1 %.not56, i64 1, i64 %81, !dbg !152 - {[-1]:Integer}
val:   store i64 %82, i64* %12, align 16, !dbg !120, !tbaa !140 - {}
val:   br i1 %56, label %L77, label %L72, !dbg !116 - {}
val:   %58 = call fastcc i32 @julia_UInt32_1543(i32 zeroext 1308622848), !dbg !116 - {[-1]:Anything}
val:   %32 = select i1 %.not52, i64 4, i64 3, !dbg !94 - {[-1]:Integer}
val:   %33 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %28, i64 %32, !dbg !94 - {[-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}
val:   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %72) - {}
val:   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %71) - {}
val:   %84 = select i1 %.not57, i64 1, i64 %21, !dbg !152 - {[-1]:Integer}
val:   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %66) - {}
val:   %86 = call nonnull align 8 {}* @julia.pointer_from_objref({} addrspace(11)* %85) #7, !dbg !154 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val: double %0 - {[-1]:Float@double}
val: {} addrspace(10)* %1 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val: {} addrspace(10)* %2 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val: double %3 - {[-1]:Float@double}
val: {} addrspace(10)* %4 - {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-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]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}
val:   %60 = call fastcc nonnull {} addrspace(10)* @julia_throw_inexacterror_1541(i32 zeroext %58) #11, !dbg !133 - {}
val:   %41 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %37, i64 4, !dbg !102 - {[-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}
val:   br i1 %.not61, label %L68, label %L61, !dbg !100 - {}
val:   call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %5) - {}
val:   br i1 %61, label %L103, label %L98, !dbg !116 - {}
val:   call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %6) - {}
val:   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %73) - {}
val:   %78 = select i1 %.not55, i64 1, i64 %77, !dbg !152 - {[-1]:Integer}
val:   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %69) - {}
val:   %80 = bitcast {} addrspace(10)* addrspace(11)* %79 to i64 addrspace(11)*, !dbg !144 - {[-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]:Integer}
val:   %65 = call fastcc nonnull {} addrspace(10)* @julia_throw_inexacterror_1541(i32 zeroext %63) #11, !dbg !133 - {}
val:   %11 = alloca i64, align 16 - {[-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}
val:   %value_phi20.in = phi i32 [ %57, %L72 ], [ %58, %L77 ] - {[-1]:Anything}
val:   %53 = call noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj(i8* %52, i64 16, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4629366288 to {}*) to {} addrspace(10)*)) #4, !dbg !105 - {}
val:   %54 = bitcast {} addrspace(10)* %53 to i8 addrspace(10)*, !dbg !105 - {}
val:   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %68) - {}
val:   call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %67) - {}
val:   %51 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %35), !dbg !105 - {}
val:   %.sroa.2.0..sroa_idx = getelementptr inbounds i8, i8 addrspace(10)* %54, i64 8, !dbg !105 - {}
val:   %22 = select i1 %.not, i64 4, i64 3, !dbg !88 - {[-1]:Integer}
val:   %24 = bitcast {} addrspace(10)* addrspace(11)* %23 to i64 addrspace(11)*, !dbg !88 - {[-1]:Pointer}
val:   %49 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %25), !dbg !105 - {}
val:   %50 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %31), !dbg !105 - {}
val:   %63 = call fastcc i32 @julia_UInt32_1543(i32 zeroext 1308622848), !dbg !116 - {[-1]:Anything}
val:   br i1 %64, label %L109, label %L116, !dbg !133 - {}
val:   %value_phi21.in = phi i32 [ %62, %L98 ], [ %63, %L103 ] - {[-1]:Anything}
val: i32 1308622848 - {[-1]:Anything}
val: {}* inttoptr (i64 4629366288 to {}*) - {[-1]:Anything}
val: {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4629366288 to {}*) to {} addrspace(10)*) - {[-1]:Anything}
val: i64 4 - {[-1]:Integer}
val: i64 3 - {[-1]:Integer}
val: i32 24 - {[-1]:Integer}
val: i32 0 - {[-1]:Anything}
val: {} addrspace(10)* undef - {[-1]:Anything}
val: ; Function Attrs: inaccessiblememonly
define internal noalias nonnull align 8 dereferenceable(8) {}* @jl_box_int64(i64 signext %0) unnamed_addr #9 !dbg !874 {
top:
  %1 = call dereferenceable_or_null(16) i8* @malloc(i64 16), !dbg !875
  %2 = load i64, i64* bitcast ({}* ()* @jl_int64_type to i64*), align 4, !dbg !882
  %3 = or i64 %2, 3, !dbg !888
  %4 = bitcast i8* %1 to i64*, !dbg !887
  store i64 %3, i64* %4, align 8, !dbg !887, !tbaa !869
  %5 = getelementptr i8, i8* %1, i64 8, !dbg !891
  %6 = bitcast i8* %5 to i64*, !dbg !894
  store i64 %0, i64* %6, align 8, !dbg !894, !tbaa !869
  %7 = bitcast i8* %5 to {}*, !dbg !895
  ret {}* %7, !dbg !881
}
 - {[-1]:Pointer}
val: {} addrspace(10)* (i64)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*) - {[-1]:Pointer}
val:   call void @dgemm_64_(i8* nonnull %5, i8* nonnull %6, i8* nonnull %73, i8* nonnull %72, i8* nonnull %71, i8* nonnull %70, i64 %88, i8* nonnull %69, i64 %92, i8* nonnull %68, i8* nonnull %67, i64 %96, i8* nonnull %66, i64 1, i64 1) [ "jl_roots"({} addrspace(10)* null, {} addrspace(10)* %4, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* %2, {} addrspace(10)* null, {} addrspace(10)* %1, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* null, {} addrspace(10)* null) ], !dbg !129 - {}
val: i64 0 - {[-1]:Anything}
val: i64 1 - {[-1]:Integer}
val: {}* inttoptr (i64 4692602000 to {}*) - {[-1]:Anything}
val: {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4692602000 to {}*) to {} addrspace(10)*) - {[-1]:Anything}
could not deduce type of integer   %31 = load i64, i64 addrspace(11)* %30, align 8, !dbg !93, !tbaa !83, !range !87, !invariant.load !4
Assertion failed: (0 && "could not deduce type of integer"), function intType, file /workspace/srcdir/Enzyme/enzyme/Enzyme/TypeAnalysis/TypeAnalysis.cpp, line 4127.

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

Successfully merging a pull request may close this issue.

2 participants