Comments (2)
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].
from enzyme.jl.
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.
from enzyme.jl.
Related Issues (20)
- Clarification on mutable objects HOT 1
- Float16 argument errors HOT 4
- Not applying memset on reverse of jl_array_del_end HOT 2
- Enzyme cannot deduce type
- Complex cos fails verification in reverse-mode HOT 2
- `middle` from `Statistics` errors in reverse mode HOT 3
- Reverse-mode fails verification with mutated callable HOT 1
- `median` gradient errors on Julia 1.9 HOT 7
- `empty!` gives error with reverse mode HOT 1
- Julia nightly broken due to attribute mismatch
- sum of array errors with recent Enzyme HOT 2
- Error from untaken branch with Float32 HOT 2
- `get` for `Dict` errors with certain key types HOT 1
- Enzyme + KernelAbstractions: KA syntax changes and differentiating multiple kernels HOT 9
- Erroneous `autodiff` results when multi-threading enabled on various CPU arch HOT 12
- Error on forward-mode BatchDuplicated of NamedTuple of complex sin on v1.7 HOT 2
- Wrong gradient path taken in `try`/`catch` block HOT 1
- `reverse` fails for 2D array in reverse mode
- Handle the new calling convention that julia emits for cheaper ptls HOT 6
- Enzyme compilation failed when using `logpdf` HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from enzyme.jl.