LuxDL / Lux.jl

Elegant & Performant Scientific Machine Learning in Julia
https://lux.csail.mit.edu/
MIT License
446 stars 50 forks source link

SimpleChains integration doesn't work with Enzyme #644

Open avik-pal opened 1 month ago

avik-pal commented 1 month ago
using Enzyme, Lux, SimpleChains, Random

model = Chain(Dense(10, 10, tanh), Dense(10, 10, tanh))
scmodel = ToSimpleChainsAdaptor(static((10,)))(model)

x = rand(Float32, 10, 2)
ps, st = Lux.setup(Xoshiro(123), scmodel)

loss_function(m, x, ps, st) = sum(abs2, first(m(x, ps, st)))

loss_function(scmodel, x, ps, st)

begin
    dx = Enzyme.make_zero(x)
    dps = Enzyme.make_zero(ps)

    Enzyme.autodiff(Reverse, loss_function, Active, Const(scmodel),
        Duplicated(x, dx), Duplicated(ps, dps), Const(st))

    dx, dps
end

I am opening it here because I need to investigate if this is a Lux problem or a downstream Enzyme + SimpleChains issue.

wsmoses commented 1 month ago

Have a backtrace/error log here by chance?

avik-pal commented 1 month ago
Details ```julia ┌ Warning: The Pkg REPL mode is intended for interactive use only, and should not be used from scripts. It is recommended to use the functional API instead. └ @ Pkg.REPLMode ~/.julia/juliaup/julia-1.10.3+0.x64.linux.gnu/share/julia/stdlib/v1.10/Pkg/src/REPLMode/REPLMode.jl:382 ERROR: LoadError: Enzyme compilation failed due to illegal type analysis. Current scope: ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_with_heap_memory_10124({ { i64, { i64 } }, {} addrspace(10)* }* noalias nocapture nofree noundef nonnull writeonly sret({ { i64, { i64 } }, {} addrspace(10)* }) align 8 dereferenceable(24) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@float, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,-1]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer}" %0, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer}" "enzymejl_returnRoots" %1, i64 signext "enzyme_inactive" "enzyme_type"="{[-1]:Integer}" "enzymejl_parmtype"="140535411844864" "enzymejl_parmtype_ref"="0" %2, { i64, { i64 } } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@float, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}" "enzymejl_parmtype"="140535519979024" "enzymejl_parmtype_ref"="1" %3, i64 zeroext "enzyme_type"="{[-1]:Pointer, [-1,-1]:Float@float}" "enzymejl_parmtype"="140535396002624" "enzymejl_parmtype_ref"="0" %4) unnamed_addr #34 !dbg !2625 { L82.preheader: %5 = call {}*** @julia.get_pgcstack() #35 %newstruct.sroa.0.sroa.0.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx = getelementptr inbounds { i64, { i64 } }, { i64, { i64 } } addrspace(11)* %3, i64 0, i32 0 %newstruct.sroa.0.sroa.0.0.copyload = load i64, i64 addrspace(11)* %newstruct.sroa.0.sroa.0.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx, align 8, !tbaa !329, !alias.scope !330, !noalias !2626 %newstruct.sroa.0.sroa.2.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx622 = getelementptr inbounds { i64, { i64 } }, { i64, { i64 } } addrspace(11)* %3, i64 0, i32 1, i32 0 %newstruct.sroa.0.sroa.2.0.copyload = load i64, i64 addrspace(11)* %newstruct.sroa.0.sroa.2.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx622, align 8, !tbaa !329, !alias.scope !330, !noalias !2626 %ptls_field624 = getelementptr inbounds {}**, {}*** %5, i64 2 %6 = bitcast {}*** %ptls_field624 to i64*** %ptls_load625626 = load i64**, i64*** %6, align 8, !tbaa !21 %7 = getelementptr inbounds i64*, i64** %ptls_load625626, i64 2 %safepoint = load i64*, i64** %7, align 8, !tbaa !25 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #35, !dbg !2629 fence syncscope("singlethread") seq_cst %8 = call fastcc nonnull {} addrspace(10)* @julia_get_heap_memory_11081(i64 signext %2) #35, !dbg !2630 %9 = addrspacecast {} addrspace(10)* %8 to {} addrspace(11)*, !dbg !2631 %10 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* %9) #36, !dbg !2631 %11 = bitcast {}* %10 to i8**, !dbg !2631 %arrayptr = load i8*, i8** %11, align 8, !dbg !2631, !tbaa !312, !alias.scope !315, !noalias !316, !nonnull !20 %12 = ptrtoint i8* %arrayptr to i64, !dbg !2631 %13 = add i64 %12, 63, !dbg !2633 %14 = and i64 %13, -64, !dbg !2637 %15 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* nonnull %8) #35, !dbg !2639 %16 = inttoptr i64 %4 to i8*, !dbg !2640 %17 = getelementptr i8, i8* %16, i64 440, !dbg !2640 %18 = ptrtoint i8* %17 to i64, !dbg !2640 %19 = mul i64 %newstruct.sroa.0.sroa.2.0.copyload, 40, !dbg !2645 %20 = add i64 %19, 63, !dbg !2649 %21 = and i64 %20, -64, !dbg !2651 %22 = inttoptr i64 %14 to i8*, !dbg !2652 %23 = getelementptr i8, i8* %22, i64 %21, !dbg !2652 %24 = mul i64 %newstruct.sroa.0.sroa.2.0.copyload, 10, !dbg !2653 %25 = ptrtoint i8* %23 to i64, !dbg !2652 %ptr.0.i602 = inttoptr i64 %4 to float*, !dbg !2655 %ptr.1.i603 = getelementptr inbounds float, float* %ptr.0.i602, i64 100, !dbg !2655 %ptr.2.i604 = ptrtoint float* %ptr.1.i603 to i64, !dbg !2655 call fastcc void @julia__turbo___10773(i64 signext %newstruct.sroa.0.sroa.2.0.copyload, i64 zeroext %4, i64 zeroext %newstruct.sroa.0.sroa.0.0.copyload, i64 zeroext %ptr.2.i604, i64 zeroext %14) #35, !dbg !2661 %26 = icmp sgt i64 %24, 0, !dbg !2664 call void @llvm.assume(i1 noundef %26) #35, !dbg !2674 %27 = and i64 %24, 9223372036854775792, !dbg !2675 %28 = icmp eq i64 %27, 0, !dbg !2677 br i1 %28, label %L280, label %L122.preheader, !dbg !2670 L122.preheader: ; preds = %L82.preheader br label %L122, !dbg !2670 L122: ; preds = %L122.preheader, %L122 %iv = phi i64 [ 0, %L122.preheader ], [ %iv.next, %L122 ] %29 = shl nuw nsw i64 %iv, 4, !dbg !2679 %iv.next = add nuw nsw i64 %iv, 1, !dbg !2679 %res.i601 = shl nsw i64 %29, 2, !dbg !2679 %ptr.1.i598 = getelementptr inbounds i8, i8* %22, i64 %res.i601, !dbg !2687 %ptr.2.i599 = bitcast i8* %ptr.1.i598 to <16 x float>*, !dbg !2687 %res.i600 = load <16 x float>, <16 x float>* %ptr.2.i599, align 64, !dbg !2687, !alias.scope !178 %res.i596 = call fast <16 x float> @llvm.fabs.v16f32(<16 x float> %res.i600) #35, !dbg !2690 %res.i594 = fmul nsz contract <16 x float> %res.i596, , !dbg !2696 %res.i593 = call fast <16 x float> @llvm.nearbyint.v16f32(<16 x float> %res.i594) #35, !dbg !2701 %res.i592 = fptosi <16 x float> %res.i593 to <16 x i32>, !dbg !2704 %res.i590 = fmul nsz contract <16 x float> %res.i593, , !dbg !2710 %res.i589 = fadd nsz contract <16 x float> %res.i596, %res.i590, !dbg !2714 %res.i588 = fsub nsz contract <16 x float> %res.i596, %res.i589, !dbg !2718 %res.i587 = fadd nsz contract <16 x float> %res.i590, %res.i588, !dbg !2722 %res.i584 = fmul nsz contract <16 x float> %res.i593, , !dbg !2725 %res.i583 = fadd nsz contract <16 x float> %res.i584, %res.i589, !dbg !2729 %res.i582 = fsub nsz contract <16 x float> %res.i589, %res.i583, !dbg !2733 %res.i581 = fadd nsz contract <16 x float> %res.i584, %res.i582, !dbg !2737 %res.i580 = fadd nsz contract <16 x float> %res.i587, %res.i581, !dbg !2737 %res.i579 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i583, <16 x float> noundef , <16 x float> noundef ) #35, !dbg !2740 %res.i578 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i579, <16 x float> %res.i583, <16 x float> noundef ) #35, !dbg !2746 %res.i577 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i578, <16 x float> %res.i583, <16 x float> noundef ) #35, !dbg !2750 %res.i576 = fmul nsz contract <16 x float> %res.i583, %res.i577, !dbg !2754 %res.i575 = fneg nsz contract <16 x float> %res.i576, !dbg !2760 %res.i574 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i583, <16 x float> %res.i577, <16 x float> %res.i575) #35, !dbg !2765 %res.i573 = fmul nsz contract <16 x float> %res.i580, %res.i577, !dbg !2768 %res.i572 = fadd nsz contract <16 x float> %res.i573, %res.i574, !dbg !2771 %res.i571 = fadd nsz contract <16 x float> %res.i576, , !dbg !2774 %res.i570 = fsub nsz contract <16 x float> %res.i576, %res.i571, !dbg !2778 %res.i569 = fadd nsz contract <16 x float> %res.i570, , !dbg !2782 %res.i568 = fadd nsz contract <16 x float> %res.i572, %res.i569, !dbg !2785 %res.i567 = fmul nsz contract <16 x float> %res.i583, %res.i571, !dbg !2788 %res.i566 = fneg nsz contract <16 x float> %res.i567, !dbg !2794 %res.i565 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i583, <16 x float> %res.i571, <16 x float> %res.i566) #35, !dbg !2799 %res.i564 = fmul nsz contract <16 x float> %res.i583, %res.i568, !dbg !2802 %res.i563 = fmul nsz contract <16 x float> %res.i580, %res.i571, !dbg !2802 %res.i562 = fadd nsz contract <16 x float> %res.i565, %res.i564, !dbg !2805 %res.i561 = fadd nsz contract <16 x float> %res.i563, %res.i562, !dbg !2805 %res.i560 = fadd nsz contract <16 x float> %res.i567, , !dbg !2809 %res.i559 = fsub nsz contract <16 x float> %res.i567, %res.i560, !dbg !2813 %res.i558 = fadd nsz contract <16 x float> %res.i559, , !dbg !2817 %res.i557 = fadd nsz contract <16 x float> %res.i558, %res.i561, !dbg !2820 %res.i556 = fmul nsz contract <16 x float> %res.i583, %res.i583, !dbg !2823 %res.i555 = fneg nsz contract <16 x float> %res.i556, !dbg !2829 %res.i554 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i583, <16 x float> %res.i583, <16 x float> %res.i555) #35, !dbg !2834 %res.i553 = fadd nsz contract <16 x float> %res.i580, %res.i580, !dbg !2837 %res.i552 = fmul nsz contract <16 x float> %res.i583, %res.i553, !dbg !2840 %res.i551 = fadd nsz contract <16 x float> %res.i554, %res.i552, !dbg !2837 %res.i550 = fmul nsz contract <16 x float> %res.i556, %res.i560, !dbg !2843 %res.i549 = fneg nsz contract <16 x float> %res.i550, !dbg !2848 %res.i548 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i556, <16 x float> %res.i560, <16 x float> %res.i549) #35, !dbg !2853 %res.i547 = fmul nsz contract <16 x float> %res.i556, %res.i557, !dbg !2856 %res.i546 = fmul nsz contract <16 x float> %res.i551, %res.i560, !dbg !2856 %res.i545 = fadd nsz contract <16 x float> %res.i548, %res.i547, !dbg !2859 %res.i544 = fadd nsz contract <16 x float> %res.i546, %res.i545, !dbg !2859 %res.i543 = fadd nsz contract <16 x float> %res.i583, %res.i550, !dbg !2863 %res.i542 = fsub nsz contract <16 x float> %res.i583, %res.i543, !dbg !2867 %res.i541 = fadd nsz contract <16 x float> %res.i550, %res.i542, !dbg !2871 %res.i540 = fadd nsz contract <16 x float> %res.i541, %res.i544, !dbg !2871 %res.i539 = fadd nsz contract <16 x float> %res.i580, %res.i540, !dbg !2871 %res.i538 = fadd nsz contract <16 x float> %res.i543, , !dbg !2874 %res.i537 = fsub nsz contract <16 x float> , %res.i538, !dbg !2879 %res.i536 = fadd nsz contract <16 x float> %res.i543, %res.i537, !dbg !2883 %res.i535 = fadd nsz contract <16 x float> %res.i536, %res.i539, !dbg !2883 %res.i534 = ashr <16 x i32> %res.i592, , !dbg !2886 %res.i533 = shl <16 x i32> %res.i534, , !dbg !2891 %res.i532 = add <16 x i32> %res.i533, , !dbg !2891 %res.i531 = bitcast <16 x i32> %res.i532 to <16 x float>, !dbg !2898 %res.i530 = fmul nsz contract <16 x float> %res.i538, %res.i531, !dbg !2901 %res.i529 = sub <16 x i32> %res.i592, %res.i534, !dbg !2904 %res.i528 = shl <16 x i32> %res.i529, , !dbg !2891 %res.i527 = add <16 x i32> %res.i528, , !dbg !2891 %res.i526 = bitcast <16 x i32> %res.i527 to <16 x float>, !dbg !2898 %res.i525 = fmul nsz contract <16 x float> %res.i530, %res.i526, !dbg !2901 %res.i520 = fmul nsz contract <16 x float> %res.i535, %res.i531, !dbg !2901 %res.i515 = fmul nsz contract <16 x float> %res.i520, %res.i526, !dbg !2901 %res.i508 = fdiv nsz contract <16 x float> , %res.i525, !dbg !2907 %res.i507 = fneg nsz contract <16 x float> %res.i508, !dbg !2914 %res.i506 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i507, <16 x float> %res.i525, <16 x float> noundef ) #35, !dbg !2919 %res.i505 = fmul nsz contract <16 x float> %res.i508, %res.i515, !dbg !2923 %res.i504 = fsub nsz contract <16 x float> %res.i506, %res.i505, !dbg !2926 %res.i503 = fmul nsz contract <16 x float> %res.i508, %res.i504, !dbg !2923 %res.i502 = fsub nsz contract <16 x float> %res.i525, %res.i508, !dbg !2929 %res.i501 = fsub nsz contract <16 x float> %res.i525, %res.i502, !dbg !2934 %res.i500 = fsub nsz contract <16 x float> %res.i501, %res.i508, !dbg !2934 %res.i499 = fsub nsz contract <16 x float> %res.i500, %res.i503, !dbg !2934 %res.i498 = fadd nsz contract <16 x float> %res.i515, %res.i499, !dbg !2938 %res.i497 = fadd nsz contract <16 x float> %res.i525, %res.i508, !dbg !2941 %res.i496 = fsub nsz contract <16 x float> %res.i525, %res.i497, !dbg !2945 %res.i495 = fadd nsz contract <16 x float> %res.i508, %res.i496, !dbg !2949 %res.i494 = fadd nsz contract <16 x float> %res.i495, %res.i503, !dbg !2949 %res.i493 = fadd nsz contract <16 x float> %res.i515, %res.i494, !dbg !2949 %res.i492 = fdiv nsz contract <16 x float> , %res.i497, !dbg !2952 %res.i491 = fmul nsz contract <16 x float> %res.i502, %res.i492, !dbg !2958 %res.i490 = fneg nsz contract <16 x float> %res.i491, !dbg !2962 %res.i489 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i490, <16 x float> %res.i497, <16 x float> %res.i502) #35, !dbg !2967 %res.i487 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i490, <16 x float> %res.i493, <16 x float> %res.i498) #35, !dbg !2967 %res.i486 = fadd nsz contract <16 x float> %res.i489, %res.i487, !dbg !2970 %res.i485 = fmul nsz contract <16 x float> %res.i492, %res.i486, !dbg !2973 %res.i484 = fadd nsz contract <16 x float> %res.i491, %res.i485, !dbg !2976 %m.i481 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i596, , !dbg !2981 %res.i480 = select reassoc nsz arcp contract <16 x i1> %m.i481, <16 x float> , <16 x float> %res.i484, !dbg !2986 %m.i477 = fcmp reassoc nsz arcp contract uno <16 x float> %res.i480, zeroinitializer, !dbg !2989 %res.i476 = select reassoc nsz arcp contract <16 x i1> %m.i477, <16 x float> , <16 x float> %res.i480, !dbg !2994 %m.i473 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i600, zeroinitializer, !dbg !2997 %res.i472 = fneg nsz contract <16 x float> %res.i476, !dbg !3002 %res.i471 = select reassoc nsz arcp contract <16 x i1> %m.i473, <16 x float> %res.i476, <16 x float> %res.i472, !dbg !3005 store <16 x float> %res.i471, <16 x float>* %ptr.2.i599, align 64, !dbg !3007, !noalias !3010 %res.i465 = add nuw nsw i64 %29, 16, !dbg !3011 %30 = icmp eq i64 %res.i465, %27, !dbg !2677 br i1 %30, label %L280.loopexit, label %L122, !dbg !2670 L280.loopexit: ; preds = %L122 br label %L280, !dbg !3014 L280: ; preds = %L280.loopexit, %L82.preheader %.not = icmp ult i64 %27, %24, !dbg !3014 br i1 %.not, label %L282, label %L506.preheader, !dbg !2670 L282: ; preds = %L280 %31 = trunc i64 %24 to i32, !dbg !3016 %32 = and i32 %31, 14, !dbg !3022 %.not627 = icmp eq i32 %32, 0, !dbg !3025 %33 = select i1 %.not627, i32 16, i32 %32, !dbg !3026 %res.i464 = call i32 @llvm.x86.bmi.bzhi.32(i32 noundef -1, i32 %33) #35, !dbg !3027 %34 = trunc i32 %res.i464 to i16, !dbg !3030 %res.i463 = shl nsw i64 %27, 2, !dbg !3031 %ptr.1.i459 = getelementptr inbounds i8, i8* %22, i64 %res.i463, !dbg !3039 %ptr.2.i460 = bitcast i8* %ptr.1.i459 to <16 x float>*, !dbg !3039 %mask.0.i461 = bitcast i16 %34 to <16 x i1>, !dbg !3039 %res.i462 = call <16 x float> @llvm.masked.load.v16f32.p0v16f32(<16 x float>* %ptr.2.i460, i32 noundef 4, <16 x i1> %mask.0.i461, <16 x float> noundef zeroinitializer) #35, !dbg !3039, !alias.scope !178 %res.i457 = call fast <16 x float> @llvm.fabs.v16f32(<16 x float> %res.i462) #35, !dbg !2690 %res.i455 = fmul nsz contract <16 x float> %res.i457, , !dbg !2696 %res.i454 = call fast <16 x float> @llvm.nearbyint.v16f32(<16 x float> %res.i455) #35, !dbg !2701 %res.i453 = fptosi <16 x float> %res.i454 to <16 x i32>, !dbg !2704 %res.i451 = fmul nsz contract <16 x float> %res.i454, , !dbg !2710 %res.i450 = fadd nsz contract <16 x float> %res.i457, %res.i451, !dbg !2714 %res.i449 = fsub nsz contract <16 x float> %res.i457, %res.i450, !dbg !2718 %res.i448 = fadd nsz contract <16 x float> %res.i451, %res.i449, !dbg !2722 %res.i445 = fmul nsz contract <16 x float> %res.i454, , !dbg !2725 %res.i444 = fadd nsz contract <16 x float> %res.i445, %res.i450, !dbg !2729 %res.i443 = fsub nsz contract <16 x float> %res.i450, %res.i444, !dbg !2733 %res.i442 = fadd nsz contract <16 x float> %res.i445, %res.i443, !dbg !2737 %res.i441 = fadd nsz contract <16 x float> %res.i448, %res.i442, !dbg !2737 %res.i440 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i444, <16 x float> noundef , <16 x float> noundef ) #35, !dbg !2740 %res.i439 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i440, <16 x float> %res.i444, <16 x float> noundef ) #35, !dbg !2746 %res.i438 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i439, <16 x float> %res.i444, <16 x float> noundef ) #35, !dbg !2750 %res.i437 = fmul nsz contract <16 x float> %res.i444, %res.i438, !dbg !2754 %res.i436 = fneg nsz contract <16 x float> %res.i437, !dbg !2760 %res.i435 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i444, <16 x float> %res.i438, <16 x float> %res.i436) #35, !dbg !2765 %res.i434 = fmul nsz contract <16 x float> %res.i441, %res.i438, !dbg !2768 %res.i433 = fadd nsz contract <16 x float> %res.i434, %res.i435, !dbg !2771 %res.i432 = fadd nsz contract <16 x float> %res.i437, , !dbg !2774 %res.i431 = fsub nsz contract <16 x float> %res.i437, %res.i432, !dbg !2778 %res.i430 = fadd nsz contract <16 x float> %res.i431, , !dbg !2782 %res.i429 = fadd nsz contract <16 x float> %res.i433, %res.i430, !dbg !2785 %res.i428 = fmul nsz contract <16 x float> %res.i444, %res.i432, !dbg !2788 %res.i427 = fneg nsz contract <16 x float> %res.i428, !dbg !2794 %res.i426 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i444, <16 x float> %res.i432, <16 x float> %res.i427) #35, !dbg !2799 %res.i425 = fmul nsz contract <16 x float> %res.i444, %res.i429, !dbg !2802 %res.i424 = fmul nsz contract <16 x float> %res.i441, %res.i432, !dbg !2802 %res.i423 = fadd nsz contract <16 x float> %res.i426, %res.i425, !dbg !2805 %res.i422 = fadd nsz contract <16 x float> %res.i424, %res.i423, !dbg !2805 %res.i421 = fadd nsz contract <16 x float> %res.i428, , !dbg !2809 %res.i420 = fsub nsz contract <16 x float> %res.i428, %res.i421, !dbg !2813 %res.i419 = fadd nsz contract <16 x float> %res.i420, , !dbg !2817 %res.i418 = fadd nsz contract <16 x float> %res.i419, %res.i422, !dbg !2820 %res.i417 = fmul nsz contract <16 x float> %res.i444, %res.i444, !dbg !2823 %res.i416 = fneg nsz contract <16 x float> %res.i417, !dbg !2829 %res.i415 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i444, <16 x float> %res.i444, <16 x float> %res.i416) #35, !dbg !2834 %res.i414 = fadd nsz contract <16 x float> %res.i441, %res.i441, !dbg !2837 %res.i413 = fmul nsz contract <16 x float> %res.i444, %res.i414, !dbg !2840 %res.i412 = fadd nsz contract <16 x float> %res.i415, %res.i413, !dbg !2837 %res.i411 = fmul nsz contract <16 x float> %res.i417, %res.i421, !dbg !2843 %res.i410 = fneg nsz contract <16 x float> %res.i411, !dbg !2848 %res.i409 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i417, <16 x float> %res.i421, <16 x float> %res.i410) #35, !dbg !2853 %res.i408 = fmul nsz contract <16 x float> %res.i417, %res.i418, !dbg !2856 %res.i407 = fmul nsz contract <16 x float> %res.i412, %res.i421, !dbg !2856 %res.i406 = fadd nsz contract <16 x float> %res.i409, %res.i408, !dbg !2859 %res.i405 = fadd nsz contract <16 x float> %res.i407, %res.i406, !dbg !2859 %res.i404 = fadd nsz contract <16 x float> %res.i444, %res.i411, !dbg !2863 %res.i403 = fsub nsz contract <16 x float> %res.i444, %res.i404, !dbg !2867 %res.i402 = fadd nsz contract <16 x float> %res.i411, %res.i403, !dbg !2871 %res.i401 = fadd nsz contract <16 x float> %res.i402, %res.i405, !dbg !2871 %res.i400 = fadd nsz contract <16 x float> %res.i441, %res.i401, !dbg !2871 %res.i399 = fadd nsz contract <16 x float> %res.i404, , !dbg !2874 %res.i398 = fsub nsz contract <16 x float> , %res.i399, !dbg !2879 %res.i397 = fadd nsz contract <16 x float> %res.i404, %res.i398, !dbg !2883 %res.i396 = fadd nsz contract <16 x float> %res.i397, %res.i400, !dbg !2883 %res.i395 = ashr <16 x i32> %res.i453, , !dbg !2886 %res.i394 = shl <16 x i32> %res.i395, , !dbg !2891 %res.i393 = add <16 x i32> %res.i394, , !dbg !2891 %res.i392 = bitcast <16 x i32> %res.i393 to <16 x float>, !dbg !2898 %res.i391 = fmul nsz contract <16 x float> %res.i399, %res.i392, !dbg !2901 %res.i390 = sub <16 x i32> %res.i453, %res.i395, !dbg !2904 %res.i389 = shl <16 x i32> %res.i390, , !dbg !2891 %res.i388 = add <16 x i32> %res.i389, , !dbg !2891 %res.i387 = bitcast <16 x i32> %res.i388 to <16 x float>, !dbg !2898 %res.i386 = fmul nsz contract <16 x float> %res.i391, %res.i387, !dbg !2901 %res.i381 = fmul nsz contract <16 x float> %res.i396, %res.i392, !dbg !2901 %res.i376 = fmul nsz contract <16 x float> %res.i381, %res.i387, !dbg !2901 %res.i369 = fdiv nsz contract <16 x float> , %res.i386, !dbg !2907 %res.i368 = fneg nsz contract <16 x float> %res.i369, !dbg !2914 %res.i367 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i368, <16 x float> %res.i386, <16 x float> noundef ) #35, !dbg !2919 %res.i366 = fmul nsz contract <16 x float> %res.i369, %res.i376, !dbg !2923 %res.i365 = fsub nsz contract <16 x float> %res.i367, %res.i366, !dbg !2926 %res.i364 = fmul nsz contract <16 x float> %res.i369, %res.i365, !dbg !2923 %res.i363 = fsub nsz contract <16 x float> %res.i386, %res.i369, !dbg !2929 %res.i362 = fsub nsz contract <16 x float> %res.i386, %res.i363, !dbg !2934 %res.i361 = fsub nsz contract <16 x float> %res.i362, %res.i369, !dbg !2934 %res.i360 = fsub nsz contract <16 x float> %res.i361, %res.i364, !dbg !2934 %res.i359 = fadd nsz contract <16 x float> %res.i376, %res.i360, !dbg !2938 %res.i358 = fadd nsz contract <16 x float> %res.i386, %res.i369, !dbg !2941 %res.i357 = fsub nsz contract <16 x float> %res.i386, %res.i358, !dbg !2945 %res.i356 = fadd nsz contract <16 x float> %res.i369, %res.i357, !dbg !2949 %res.i355 = fadd nsz contract <16 x float> %res.i356, %res.i364, !dbg !2949 %res.i354 = fadd nsz contract <16 x float> %res.i376, %res.i355, !dbg !2949 %res.i353 = fdiv nsz contract <16 x float> , %res.i358, !dbg !2952 %res.i352 = fmul nsz contract <16 x float> %res.i363, %res.i353, !dbg !2958 %res.i351 = fneg nsz contract <16 x float> %res.i352, !dbg !2962 %res.i350 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i351, <16 x float> %res.i358, <16 x float> %res.i363) #35, !dbg !2967 %res.i348 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i351, <16 x float> %res.i354, <16 x float> %res.i359) #35, !dbg !2967 %res.i347 = fadd nsz contract <16 x float> %res.i350, %res.i348, !dbg !2970 %res.i346 = fmul nsz contract <16 x float> %res.i353, %res.i347, !dbg !2973 %res.i345 = fadd nsz contract <16 x float> %res.i352, %res.i346, !dbg !2976 %m.i342 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i457, , !dbg !2981 %res.i341 = select reassoc nsz arcp contract <16 x i1> %m.i342, <16 x float> , <16 x float> %res.i345, !dbg !2986 %m.i338 = fcmp reassoc nsz arcp contract uno <16 x float> %res.i341, zeroinitializer, !dbg !2989 %res.i337 = select reassoc nsz arcp contract <16 x i1> %m.i338, <16 x float> , <16 x float> %res.i341, !dbg !2994 %m.i334 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i462, zeroinitializer, !dbg !2997 %res.i333 = fneg nsz contract <16 x float> %res.i337, !dbg !3002 %res.i332 = select reassoc nsz arcp contract <16 x i1> %m.i334, <16 x float> %res.i337, <16 x float> %res.i333, !dbg !3005 call void @llvm.masked.store.v16f32.p0v16f32(<16 x float> %res.i332, <16 x float>* %ptr.2.i460, i32 noundef 4, <16 x i1> %mask.0.i461) #35, !dbg !3042 br label %L506.preheader, !dbg !3011 L506.preheader: ; preds = %L282, %L280 %ptr.1.i323 = getelementptr i8, i8* %16, i64 840, !dbg !3045 %ptr.2.i324 = ptrtoint i8* %ptr.1.i323 to i64, !dbg !3045 call fastcc void @julia__turbo___10773(i64 signext %newstruct.sroa.0.sroa.2.0.copyload, i64 zeroext %18, i64 zeroext %14, i64 zeroext %ptr.2.i324, i64 zeroext %25) #35, !dbg !3051 br i1 %28, label %L704, label %L546.preheader, !dbg !3056 L546.preheader: ; preds = %L506.preheader br label %L546, !dbg !3056 L546: ; preds = %L546.preheader, %L546 %iv1 = phi i64 [ 0, %L546.preheader ], [ %iv.next2, %L546 ] %35 = shl nuw nsw i64 %iv1, 4, !dbg !3060 %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3060 %res.i322 = shl nsw i64 %35, 2, !dbg !3060 %ptr.1.i319 = getelementptr inbounds i8, i8* %23, i64 %res.i322, !dbg !3068 %ptr.2.i320 = bitcast i8* %ptr.1.i319 to <16 x float>*, !dbg !3068 %res.i321 = load <16 x float>, <16 x float>* %ptr.2.i320, align 64, !dbg !3068, !alias.scope !178 %res.i318 = call fast <16 x float> @llvm.fabs.v16f32(<16 x float> %res.i321) #35, !dbg !3071 %res.i316 = fmul nsz contract <16 x float> %res.i318, , !dbg !3077 %res.i315 = call fast <16 x float> @llvm.nearbyint.v16f32(<16 x float> %res.i316) #35, !dbg !3082 %res.i314 = fptosi <16 x float> %res.i315 to <16 x i32>, !dbg !3085 %res.i312 = fmul nsz contract <16 x float> %res.i315, , !dbg !3091 %res.i311 = fadd nsz contract <16 x float> %res.i318, %res.i312, !dbg !3095 %res.i310 = fsub nsz contract <16 x float> %res.i318, %res.i311, !dbg !3099 %res.i309 = fadd nsz contract <16 x float> %res.i312, %res.i310, !dbg !3103 %res.i306 = fmul nsz contract <16 x float> %res.i315, , !dbg !3106 %res.i305 = fadd nsz contract <16 x float> %res.i306, %res.i311, !dbg !3110 %res.i304 = fsub nsz contract <16 x float> %res.i311, %res.i305, !dbg !3114 %res.i303 = fadd nsz contract <16 x float> %res.i306, %res.i304, !dbg !3118 %res.i302 = fadd nsz contract <16 x float> %res.i309, %res.i303, !dbg !3118 %res.i301 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i305, <16 x float> noundef , <16 x float> noundef ) #35, !dbg !3121 %res.i300 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i301, <16 x float> %res.i305, <16 x float> noundef ) #35, !dbg !3127 %res.i299 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i300, <16 x float> %res.i305, <16 x float> noundef ) #35, !dbg !3131 %res.i298 = fmul nsz contract <16 x float> %res.i305, %res.i299, !dbg !3135 %res.i297 = fneg nsz contract <16 x float> %res.i298, !dbg !3141 %res.i296 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i305, <16 x float> %res.i299, <16 x float> %res.i297) #35, !dbg !3146 %res.i295 = fmul nsz contract <16 x float> %res.i302, %res.i299, !dbg !3149 %res.i294 = fadd nsz contract <16 x float> %res.i295, %res.i296, !dbg !3152 %res.i293 = fadd nsz contract <16 x float> %res.i298, , !dbg !3155 %res.i292 = fsub nsz contract <16 x float> %res.i298, %res.i293, !dbg !3159 %res.i291 = fadd nsz contract <16 x float> %res.i292, , !dbg !3163 %res.i290 = fadd nsz contract <16 x float> %res.i294, %res.i291, !dbg !3166 %res.i289 = fmul nsz contract <16 x float> %res.i305, %res.i293, !dbg !3169 %res.i288 = fneg nsz contract <16 x float> %res.i289, !dbg !3175 %res.i287 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i305, <16 x float> %res.i293, <16 x float> %res.i288) #35, !dbg !3180 %res.i286 = fmul nsz contract <16 x float> %res.i305, %res.i290, !dbg !3183 %res.i285 = fmul nsz contract <16 x float> %res.i302, %res.i293, !dbg !3183 %res.i284 = fadd nsz contract <16 x float> %res.i287, %res.i286, !dbg !3186 %res.i283 = fadd nsz contract <16 x float> %res.i285, %res.i284, !dbg !3186 %res.i282 = fadd nsz contract <16 x float> %res.i289, , !dbg !3190 %res.i281 = fsub nsz contract <16 x float> %res.i289, %res.i282, !dbg !3194 %res.i280 = fadd nsz contract <16 x float> %res.i281, , !dbg !3198 %res.i279 = fadd nsz contract <16 x float> %res.i280, %res.i283, !dbg !3201 %res.i278 = fmul nsz contract <16 x float> %res.i305, %res.i305, !dbg !3204 %res.i277 = fneg nsz contract <16 x float> %res.i278, !dbg !3210 %res.i276 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i305, <16 x float> %res.i305, <16 x float> %res.i277) #35, !dbg !3215 %res.i275 = fadd nsz contract <16 x float> %res.i302, %res.i302, !dbg !3218 %res.i274 = fmul nsz contract <16 x float> %res.i305, %res.i275, !dbg !3221 %res.i273 = fadd nsz contract <16 x float> %res.i276, %res.i274, !dbg !3218 %res.i272 = fmul nsz contract <16 x float> %res.i278, %res.i282, !dbg !3224 %res.i271 = fneg nsz contract <16 x float> %res.i272, !dbg !3229 %res.i270 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i278, <16 x float> %res.i282, <16 x float> %res.i271) #35, !dbg !3234 %res.i269 = fmul nsz contract <16 x float> %res.i278, %res.i279, !dbg !3237 %res.i268 = fmul nsz contract <16 x float> %res.i273, %res.i282, !dbg !3237 %res.i267 = fadd nsz contract <16 x float> %res.i270, %res.i269, !dbg !3240 %res.i266 = fadd nsz contract <16 x float> %res.i268, %res.i267, !dbg !3240 %res.i265 = fadd nsz contract <16 x float> %res.i305, %res.i272, !dbg !3244 %res.i264 = fsub nsz contract <16 x float> %res.i305, %res.i265, !dbg !3248 %res.i263 = fadd nsz contract <16 x float> %res.i272, %res.i264, !dbg !3252 %res.i262 = fadd nsz contract <16 x float> %res.i263, %res.i266, !dbg !3252 %res.i261 = fadd nsz contract <16 x float> %res.i302, %res.i262, !dbg !3252 %res.i260 = fadd nsz contract <16 x float> %res.i265, , !dbg !3255 %res.i259 = fsub nsz contract <16 x float> , %res.i260, !dbg !3260 %res.i258 = fadd nsz contract <16 x float> %res.i265, %res.i259, !dbg !3264 %res.i257 = fadd nsz contract <16 x float> %res.i258, %res.i261, !dbg !3264 %res.i256 = ashr <16 x i32> %res.i314, , !dbg !3267 %res.i255 = shl <16 x i32> %res.i256, , !dbg !3272 %res.i254 = add <16 x i32> %res.i255, , !dbg !3272 %res.i253 = bitcast <16 x i32> %res.i254 to <16 x float>, !dbg !3279 %res.i252 = fmul nsz contract <16 x float> %res.i260, %res.i253, !dbg !3282 %res.i251 = sub <16 x i32> %res.i314, %res.i256, !dbg !3285 %res.i250 = shl <16 x i32> %res.i251, , !dbg !3272 %res.i249 = add <16 x i32> %res.i250, , !dbg !3272 %res.i248 = bitcast <16 x i32> %res.i249 to <16 x float>, !dbg !3279 %res.i247 = fmul nsz contract <16 x float> %res.i252, %res.i248, !dbg !3282 %res.i242 = fmul nsz contract <16 x float> %res.i257, %res.i253, !dbg !3282 %res.i237 = fmul nsz contract <16 x float> %res.i242, %res.i248, !dbg !3282 %res.i230 = fdiv nsz contract <16 x float> , %res.i247, !dbg !3288 %res.i229 = fneg nsz contract <16 x float> %res.i230, !dbg !3295 %res.i228 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i229, <16 x float> %res.i247, <16 x float> noundef ) #35, !dbg !3300 %res.i227 = fmul nsz contract <16 x float> %res.i230, %res.i237, !dbg !3304 %res.i226 = fsub nsz contract <16 x float> %res.i228, %res.i227, !dbg !3307 %res.i225 = fmul nsz contract <16 x float> %res.i230, %res.i226, !dbg !3304 %res.i224 = fsub nsz contract <16 x float> %res.i247, %res.i230, !dbg !3310 %res.i223 = fsub nsz contract <16 x float> %res.i247, %res.i224, !dbg !3315 %res.i222 = fsub nsz contract <16 x float> %res.i223, %res.i230, !dbg !3315 %res.i221 = fsub nsz contract <16 x float> %res.i222, %res.i225, !dbg !3315 %res.i220 = fadd nsz contract <16 x float> %res.i237, %res.i221, !dbg !3319 %res.i219 = fadd nsz contract <16 x float> %res.i247, %res.i230, !dbg !3322 %res.i218 = fsub nsz contract <16 x float> %res.i247, %res.i219, !dbg !3326 %res.i217 = fadd nsz contract <16 x float> %res.i230, %res.i218, !dbg !3330 %res.i216 = fadd nsz contract <16 x float> %res.i217, %res.i225, !dbg !3330 %res.i215 = fadd nsz contract <16 x float> %res.i237, %res.i216, !dbg !3330 %res.i214 = fdiv nsz contract <16 x float> , %res.i219, !dbg !3333 %res.i213 = fmul nsz contract <16 x float> %res.i224, %res.i214, !dbg !3339 %res.i212 = fneg nsz contract <16 x float> %res.i213, !dbg !3343 %res.i211 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i212, <16 x float> %res.i219, <16 x float> %res.i224) #35, !dbg !3348 %res.i209 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i212, <16 x float> %res.i215, <16 x float> %res.i220) #35, !dbg !3348 %res.i208 = fadd nsz contract <16 x float> %res.i211, %res.i209, !dbg !3351 %res.i207 = fmul nsz contract <16 x float> %res.i214, %res.i208, !dbg !3354 %res.i206 = fadd nsz contract <16 x float> %res.i213, %res.i207, !dbg !3357 %m.i203 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i318, , !dbg !3362 %res.i202 = select reassoc nsz arcp contract <16 x i1> %m.i203, <16 x float> , <16 x float> %res.i206, !dbg !3367 %m.i199 = fcmp reassoc nsz arcp contract uno <16 x float> %res.i202, zeroinitializer, !dbg !3370 %res.i198 = select reassoc nsz arcp contract <16 x i1> %m.i199, <16 x float> , <16 x float> %res.i202, !dbg !3375 %m.i195 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i321, zeroinitializer, !dbg !3378 %res.i194 = fneg nsz contract <16 x float> %res.i198, !dbg !3383 %res.i193 = select reassoc nsz arcp contract <16 x i1> %m.i195, <16 x float> %res.i198, <16 x float> %res.i194, !dbg !3386 store <16 x float> %res.i193, <16 x float>* %ptr.2.i320, align 64, !dbg !3388, !noalias !3010 %res.i188 = add nuw nsw i64 %35, 16, !dbg !3391 %36 = icmp eq i64 %res.i188, %27, !dbg !3394 br i1 %36, label %L704.loopexit, label %L546, !dbg !3056 L704.loopexit: ; preds = %L546 br label %L704, !dbg !3056 L704: ; preds = %L704.loopexit, %L506.preheader br i1 %.not, label %L706, label %L878, !dbg !3056 L706: ; preds = %L704 %37 = trunc i64 %24 to i32, !dbg !3397 %38 = and i32 %37, 14, !dbg !3403 %.not628 = icmp eq i32 %38, 0, !dbg !3406 %39 = select i1 %.not628, i32 16, i32 %38, !dbg !3407 %res.i187 = call i32 @llvm.x86.bmi.bzhi.32(i32 noundef -1, i32 %39) #35, !dbg !3408 %40 = trunc i32 %res.i187 to i16, !dbg !3411 %res.i186 = shl nsw i64 %27, 2, !dbg !3412 %ptr.1.i182 = getelementptr inbounds i8, i8* %23, i64 %res.i186, !dbg !3420 %ptr.2.i183 = bitcast i8* %ptr.1.i182 to <16 x float>*, !dbg !3420 %mask.0.i184 = bitcast i16 %40 to <16 x i1>, !dbg !3420 %res.i185 = call <16 x float> @llvm.masked.load.v16f32.p0v16f32(<16 x float>* %ptr.2.i183, i32 noundef 4, <16 x i1> %mask.0.i184, <16 x float> noundef zeroinitializer) #35, !dbg !3420, !alias.scope !178 %res.i181 = call fast <16 x float> @llvm.fabs.v16f32(<16 x float> %res.i185) #35, !dbg !3071 %res.i179 = fmul nsz contract <16 x float> %res.i181, , !dbg !3077 %res.i178 = call fast <16 x float> @llvm.nearbyint.v16f32(<16 x float> %res.i179) #35, !dbg !3082 %res.i177 = fptosi <16 x float> %res.i178 to <16 x i32>, !dbg !3085 %res.i175 = fmul nsz contract <16 x float> %res.i178, , !dbg !3091 %res.i174 = fadd nsz contract <16 x float> %res.i181, %res.i175, !dbg !3095 %res.i173 = fsub nsz contract <16 x float> %res.i181, %res.i174, !dbg !3099 %res.i172 = fadd nsz contract <16 x float> %res.i175, %res.i173, !dbg !3103 %res.i169 = fmul nsz contract <16 x float> %res.i178, , !dbg !3106 %res.i168 = fadd nsz contract <16 x float> %res.i169, %res.i174, !dbg !3110 %res.i167 = fsub nsz contract <16 x float> %res.i174, %res.i168, !dbg !3114 %res.i166 = fadd nsz contract <16 x float> %res.i169, %res.i167, !dbg !3118 %res.i165 = fadd nsz contract <16 x float> %res.i172, %res.i166, !dbg !3118 %res.i164 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i168, <16 x float> noundef , <16 x float> noundef ) #35, !dbg !3121 %res.i163 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i164, <16 x float> %res.i168, <16 x float> noundef ) #35, !dbg !3127 %res.i162 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i163, <16 x float> %res.i168, <16 x float> noundef ) #35, !dbg !3131 %res.i161 = fmul nsz contract <16 x float> %res.i168, %res.i162, !dbg !3135 %res.i160 = fneg nsz contract <16 x float> %res.i161, !dbg !3141 %res.i159 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i168, <16 x float> %res.i162, <16 x float> %res.i160) #35, !dbg !3146 %res.i158 = fmul nsz contract <16 x float> %res.i165, %res.i162, !dbg !3149 %res.i157 = fadd nsz contract <16 x float> %res.i158, %res.i159, !dbg !3152 %res.i156 = fadd nsz contract <16 x float> %res.i161, , !dbg !3155 %res.i155 = fsub nsz contract <16 x float> %res.i161, %res.i156, !dbg !3159 %res.i154 = fadd nsz contract <16 x float> %res.i155, , !dbg !3163 %res.i153 = fadd nsz contract <16 x float> %res.i157, %res.i154, !dbg !3166 %res.i152 = fmul nsz contract <16 x float> %res.i168, %res.i156, !dbg !3169 %res.i151 = fneg nsz contract <16 x float> %res.i152, !dbg !3175 %res.i150 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i168, <16 x float> %res.i156, <16 x float> %res.i151) #35, !dbg !3180 %res.i149 = fmul nsz contract <16 x float> %res.i168, %res.i153, !dbg !3183 %res.i148 = fmul nsz contract <16 x float> %res.i165, %res.i156, !dbg !3183 %res.i147 = fadd nsz contract <16 x float> %res.i150, %res.i149, !dbg !3186 %res.i146 = fadd nsz contract <16 x float> %res.i148, %res.i147, !dbg !3186 %res.i145 = fadd nsz contract <16 x float> %res.i152, , !dbg !3190 %res.i144 = fsub nsz contract <16 x float> %res.i152, %res.i145, !dbg !3194 %res.i143 = fadd nsz contract <16 x float> %res.i144, , !dbg !3198 %res.i142 = fadd nsz contract <16 x float> %res.i143, %res.i146, !dbg !3201 %res.i141 = fmul nsz contract <16 x float> %res.i168, %res.i168, !dbg !3204 %res.i140 = fneg nsz contract <16 x float> %res.i141, !dbg !3210 %res.i139 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i168, <16 x float> %res.i168, <16 x float> %res.i140) #35, !dbg !3215 %res.i138 = fadd nsz contract <16 x float> %res.i165, %res.i165, !dbg !3218 %res.i137 = fmul nsz contract <16 x float> %res.i168, %res.i138, !dbg !3221 %res.i136 = fadd nsz contract <16 x float> %res.i139, %res.i137, !dbg !3218 %res.i135 = fmul nsz contract <16 x float> %res.i141, %res.i145, !dbg !3224 %res.i134 = fneg nsz contract <16 x float> %res.i135, !dbg !3229 %res.i133 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i141, <16 x float> %res.i145, <16 x float> %res.i134) #35, !dbg !3234 %res.i132 = fmul nsz contract <16 x float> %res.i141, %res.i142, !dbg !3237 %res.i131 = fmul nsz contract <16 x float> %res.i136, %res.i145, !dbg !3237 %res.i130 = fadd nsz contract <16 x float> %res.i133, %res.i132, !dbg !3240 %res.i129 = fadd nsz contract <16 x float> %res.i131, %res.i130, !dbg !3240 %res.i128 = fadd nsz contract <16 x float> %res.i168, %res.i135, !dbg !3244 %res.i127 = fsub nsz contract <16 x float> %res.i168, %res.i128, !dbg !3248 %res.i126 = fadd nsz contract <16 x float> %res.i135, %res.i127, !dbg !3252 %res.i125 = fadd nsz contract <16 x float> %res.i126, %res.i129, !dbg !3252 %res.i124 = fadd nsz contract <16 x float> %res.i165, %res.i125, !dbg !3252 %res.i123 = fadd nsz contract <16 x float> %res.i128, , !dbg !3255 %res.i122 = fsub nsz contract <16 x float> , %res.i123, !dbg !3260 %res.i121 = fadd nsz contract <16 x float> %res.i128, %res.i122, !dbg !3264 %res.i120 = fadd nsz contract <16 x float> %res.i121, %res.i124, !dbg !3264 %res.i119 = ashr <16 x i32> %res.i177, , !dbg !3267 %res.i118 = shl <16 x i32> %res.i119, , !dbg !3272 %res.i117 = add <16 x i32> %res.i118, , !dbg !3272 %res.i116 = bitcast <16 x i32> %res.i117 to <16 x float>, !dbg !3279 %res.i115 = fmul nsz contract <16 x float> %res.i123, %res.i116, !dbg !3282 %res.i114 = sub <16 x i32> %res.i177, %res.i119, !dbg !3285 %res.i113 = shl <16 x i32> %res.i114, , !dbg !3272 %res.i112 = add <16 x i32> %res.i113, , !dbg !3272 %res.i111 = bitcast <16 x i32> %res.i112 to <16 x float>, !dbg !3279 %res.i110 = fmul nsz contract <16 x float> %res.i115, %res.i111, !dbg !3282 %res.i105 = fmul nsz contract <16 x float> %res.i120, %res.i116, !dbg !3282 %res.i100 = fmul nsz contract <16 x float> %res.i105, %res.i111, !dbg !3282 %res.i93 = fdiv nsz contract <16 x float> , %res.i110, !dbg !3288 %res.i92 = fneg nsz contract <16 x float> %res.i93, !dbg !3295 %res.i91 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i92, <16 x float> %res.i110, <16 x float> noundef ) #35, !dbg !3300 %res.i90 = fmul nsz contract <16 x float> %res.i93, %res.i100, !dbg !3304 %res.i89 = fsub nsz contract <16 x float> %res.i91, %res.i90, !dbg !3307 %res.i88 = fmul nsz contract <16 x float> %res.i93, %res.i89, !dbg !3304 %res.i87 = fsub nsz contract <16 x float> %res.i110, %res.i93, !dbg !3310 %res.i86 = fsub nsz contract <16 x float> %res.i110, %res.i87, !dbg !3315 %res.i85 = fsub nsz contract <16 x float> %res.i86, %res.i93, !dbg !3315 %res.i84 = fsub nsz contract <16 x float> %res.i85, %res.i88, !dbg !3315 %res.i83 = fadd nsz contract <16 x float> %res.i100, %res.i84, !dbg !3319 %res.i82 = fadd nsz contract <16 x float> %res.i110, %res.i93, !dbg !3322 %res.i81 = fsub nsz contract <16 x float> %res.i110, %res.i82, !dbg !3326 %res.i80 = fadd nsz contract <16 x float> %res.i93, %res.i81, !dbg !3330 %res.i79 = fadd nsz contract <16 x float> %res.i80, %res.i88, !dbg !3330 %res.i78 = fadd nsz contract <16 x float> %res.i100, %res.i79, !dbg !3330 %res.i77 = fdiv nsz contract <16 x float> , %res.i82, !dbg !3333 %res.i76 = fmul nsz contract <16 x float> %res.i87, %res.i77, !dbg !3339 %res.i75 = fneg nsz contract <16 x float> %res.i76, !dbg !3343 %res.i74 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i75, <16 x float> %res.i82, <16 x float> %res.i87) #35, !dbg !3348 %res.i72 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i75, <16 x float> %res.i78, <16 x float> %res.i83) #35, !dbg !3348 %res.i71 = fadd nsz contract <16 x float> %res.i74, %res.i72, !dbg !3351 %res.i70 = fmul nsz contract <16 x float> %res.i77, %res.i71, !dbg !3354 %res.i69 = fadd nsz contract <16 x float> %res.i76, %res.i70, !dbg !3357 %m.i66 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i181, , !dbg !3362 %res.i65 = select reassoc nsz arcp contract <16 x i1> %m.i66, <16 x float> , <16 x float> %res.i69, !dbg !3367 %m.i62 = fcmp reassoc nsz arcp contract uno <16 x float> %res.i65, zeroinitializer, !dbg !3370 %res.i61 = select reassoc nsz arcp contract <16 x i1> %m.i62, <16 x float> , <16 x float> %res.i65, !dbg !3375 %m.i = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i185, zeroinitializer, !dbg !3378 %res.i59 = fneg nsz contract <16 x float> %res.i61, !dbg !3383 %res.i58 = select reassoc nsz arcp contract <16 x i1> %m.i, <16 x float> %res.i61, <16 x float> %res.i59, !dbg !3386 call void @llvm.masked.store.v16f32.p0v16f32(<16 x float> %res.i58, <16 x float>* %ptr.2.i183, i32 noundef 4, <16 x i1> %mask.0.i184) #35, !dbg !3423 br label %L878, !dbg !3391 L878: ; preds = %L706, %L704 call void @llvm.julia.gc_preserve_end(token %15) #35, !dbg !2639 %41 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2639 store {} addrspace(10)* %8, {} addrspace(10)** %41, align 8, !dbg !2639, !noalias !3010 %.repack.repack = getelementptr inbounds { { i64, { i64 } }, {} addrspace(10)* }, { { i64, { i64 } }, {} addrspace(10)* }* %0, i64 0, i32 0, i32 0, !dbg !2639 store i64 %25, i64* %.repack.repack, align 8, !dbg !2639, !noalias !3010 %42 = getelementptr inbounds { { i64, { i64 } }, {} addrspace(10)* }, { { i64, { i64 } }, {} addrspace(10)* }* %0, i64 0, i32 0, i32 1, i32 0, !dbg !2639 store i64 %newstruct.sroa.0.sroa.2.0.copyload, i64* %42, align 8, !dbg !2639, !noalias !3010 %.repack629 = getelementptr inbounds { { i64, { i64 } }, {} addrspace(10)* }, { { i64, { i64 } }, {} addrspace(10)* }* %0, i64 0, i32 1, !dbg !2639 store {} addrspace(10)* %8, {} addrspace(10)** %.repack629, align 8, !dbg !2639, !noalias !3010 ret void, !dbg !2639 } Type analysis state: %7 = getelementptr inbounds i64*, i64** %ptls_load625626, i64 2: {[-1]:Pointer}, intvals: {} %ptr.2.i324 = ptrtoint i8* %ptr.1.i323 to i64, !dbg !605: {[-1]:Pointer, [-1,-1]:Float@float}, intvals: {} %10 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* %9) #36, !dbg !40: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]: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, [-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}, intvals: {} i64 63: {[-1]:Integer}, intvals: {63,} %newstruct.sroa.0.sroa.0.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx = getelementptr inbounds { i64, { i64 } }, { i64, { i64 } } addrspace(11)* %3, i64 0, i32 0: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@float}, intvals: {} i64 -64: {[-1]:Integer}, intvals: {-64,} %newstruct.sroa.0.sroa.0.0.copyload = load i64, i64 addrspace(11)* %newstruct.sroa.0.sroa.0.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx, align 8, !tbaa !21, !alias.scope !24, !noalias !28: {[-1]:Pointer, [-1,-1]:Float@float}, intvals: {} %newstruct.sroa.0.sroa.2.0.copyload = load i64, i64 addrspace(11)* %newstruct.sroa.0.sroa.2.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx622, align 8, !tbaa !21, !alias.scope !24, !noalias !28: {[-1]:Integer}, intvals: {} %6 = bitcast {}*** %ptls_field624 to i64***: {[-1]:Pointer}, intvals: {} %ptls_load625626 = load i64**, i64*** %6, align 8, !tbaa !34: {}, intvals: {} %safepoint = load i64*, i64** %7, align 8, !tbaa !36: {}, intvals: {} %9 = addrspacecast {} addrspace(10)* %8 to {} addrspace(11)*, !dbg !40: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]: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, [-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}, intvals: {} %11 = bitcast {}* %10 to i8**, !dbg !40: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]: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, [-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}, intvals: {} %arrayptr = load i8*, i8** %11, align 8, !dbg !40, !tbaa !44, !alias.scope !47, !noalias !48, !nonnull !20: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {} %12 = ptrtoint i8* %arrayptr to i64, !dbg !40: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {} %13 = add i64 %12, 63, !dbg !49: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {} %14 = and i64 %13, -64, !dbg !57: {[-1]:Pointer, [-1,-1]:Float@float}, intvals: {} %18 = ptrtoint i8* %17 to i64, !dbg !61: {[-1]:Pointer, [-1,-1]:Float@float}, intvals: {} { { i64, { i64 } }, {} addrspace(10)* }* %0: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@float, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,-1]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer}, intvals: {} [1 x {} addrspace(10)*]* %1: {[-1]:Pointer}, intvals: {} i64 %2: {[-1]:Integer}, intvals: {} { i64, { i64 } } addrspace(11)* %3: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@float, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}, intvals: {} i64 %4: {[-1]:Pointer, [-1,-1]:Float@float}, intvals: {} %ptls_field624 = getelementptr inbounds {}**, {}*** %5, i64 2: {}, intvals: {} %newstruct.sroa.0.sroa.2.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx622 = getelementptr inbounds { i64, { i64 } }, { i64, { i64 } } addrspace(11)* %3, i64 0, i32 1, i32 0: {[-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}, intvals: {} %8 = call fastcc nonnull {} addrspace(10)* @julia_get_heap_memory_11081(i64 signext %2) #35, !dbg !39: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]: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, [-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}, intvals: {} %5 = call {}*** @julia.get_pgcstack() #35: {}, intvals: {} %25 = ptrtoint i8* %23 to i64, !dbg !84: {[-1]:Pointer, [-1,-1]:Float@float}, intvals: {} %ptr.2.i604 = ptrtoint float* %ptr.1.i603 to i64, !dbg !89: {[-1]:Pointer, [-1,-1]:Float@float}, intvals: {} Illegal updateAnalysis prev:{[-1]:Pointer, [-1,-1]:Float@float} new: {[-1]:Integer} val: %14 = and i64 %13, -64, !dbg !57 origin= %14 = and i64 %13, -64, !dbg !57 MethodInstance for SimpleChains.with_heap_memory(::typeof(SimpleChains._chain), ::SimpleChain{Tuple{Static.StaticInt{10}}, Tuple{TurboDense{true, Static.StaticInt{10}, typeof(tanh_fast)}, TurboDense{true, Static.StaticInt{10}, typeof(tanh_fast)}}}, ::Int64, ::StrideArraysCore.PtrArray{Float32, 2, (1, 2), Tuple{Static.StaticInt{10}, Int64}, Tuple{Nothing, Nothing}, Tuple{Static.StaticInt{1}, Static.StaticInt{1}}}, ::Ptr{Float32}) Caused by: Stacktrace: [1] & @ ./int.jl:347 [2] & @ ./int.jl:1068 [3] align @ ~/.julia/packages/VectorizationBase/6AO0m/src/alignment.jl:8 [4] align @ ~/.julia/packages/VectorizationBase/6AO0m/src/alignment.jl:13 [5] with_heap_memory @ ~/.julia/packages/SimpleChains/u5b1E/src/memory.jl:38 Stacktrace: [1] julia_error(cstr::Cstring, val::Ptr{…}, errtype::Enzyme.API.ErrorType, data::Ptr{…}, data2::Ptr{…}, B::Ptr{…}) @ Enzyme.Compiler ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:1693 [2] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{…}, forceAnonymousTape::Bool, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…}, augmented::Ptr{…}, atomicAdd::Bool) @ Enzyme.API ~/.julia/packages/Enzyme/NVk8T/src/api.jl:154 [3] enzyme!(job::GPUCompiler.CompilerJob{…}, mod::LLVM.Module, primalf::LLVM.Function, TT::Type, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, wrap::Bool, modifiedBetween::NTuple{…}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…}) @ Enzyme.Compiler ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:3182 [4] codegen(output::Symbol, job::GPUCompiler.CompilerJob{…}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, toplevel::Bool, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing) @ Enzyme.Compiler ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:5075 [5] codegen @ ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:4482 [inlined] [6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool) @ Enzyme.Compiler ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:5772 [7] _thunk @ ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:5772 [inlined] [8] cached_compilation @ ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:5810 [inlined] [9] (::Enzyme.Compiler.var"#562#563"{…})(ctx::LLVM.Context) @ Enzyme.Compiler ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:5876 [10] JuliaContext(f::Enzyme.Compiler.var"#562#563"{…}; kwargs::@Kwargs{}) @ GPUCompiler ~/.julia/packages/GPUCompiler/kqxyC/src/driver.jl:52 [11] JuliaContext(f::Function) @ GPUCompiler ~/.julia/packages/GPUCompiler/kqxyC/src/driver.jl:42 [12] #s2025#561 @ ~/.julia/packages/Enzyme/NVk8T/src/compiler.jl:5828 [inlined] [13] @ Enzyme.Compiler ./none:0 [14] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any}) @ Core ./boot.jl:602 [15] autodiff @ ~/.julia/packages/Enzyme/NVk8T/src/Enzyme.jl:286 [inlined] [16] autodiff(::ReverseMode{…}, ::typeof(loss_function), ::Type{…}, ::Const{…}, ::Duplicated{…}, ::Duplicated{…}, ::Const{…}) @ Enzyme ~/.julia/packages/Enzyme/NVk8T/src/Enzyme.jl:303 [17] top-level scope @ /mnt/research/ongoing/lux/enzyme_sc.jl:17 Some type information was truncated. Use `show(err)` to see complete types. in expression starting at /mnt/research/ongoing/lux/enzyme_sc.jl:13 ```

@wsmoses here

wsmoses commented 1 month ago

Looking at this I think the correct solution is to make a custom rule or other overload for simplechains with_memory or similar.

I have a cuda.jl PR here which can basically be copied to do that: https://github.com/JuliaGPU/CUDA.jl/pull/2386/files

On Fri, May 17, 2024 at 6:59 AM Avik Pal @.***> wrote:

Details

┌ Warning: The Pkg REPL mode is intended for interactive use only, and should not be used from scripts. It is recommended to use the functional API instead. └ @ Pkg.REPLMode ~/.julia/juliaup/julia-1.10.3+0.x64.linux.gnu/share/julia/stdlib/v1.10/Pkg/src/REPLMode/REPLMode.jl:382 ERROR: LoadError: Enzyme compilation failed due to illegal type analysis. Current scope: ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_with_heap_memory_10124({ { i64, { i64 } }, {} addrspace(10) } noalias nocapture nofree noundef nonnull writeonly sret({ { i64, { i64 } }, {} addrspace(10)* }) align 8 dereferenceable(24) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, @., [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,-1]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer}" %0, [1 x {} addrspace(10)] noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer}" "enzymejl_returnRoots" %1, i64 signext "enzyme_inactive" "enzyme_type"="{[-1]:Integer}" "enzymejl_parmtype"="140535411844864" "enzymejl_parmtype_ref"="0" %2, { i64, { i64 } } addrspace(11) nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, **@., [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}" "enzymejl_parmtype"="140535519979024" "enzymejl_parmtype_ref"="1" %3, i64 zeroext "enzyme_type"="{[-1]:Pointer, @.}" "enzymejl_parmtype"="140535396002624" "enzymejl_parmtype_ref"="0" %4) unnamed_addr #34 !dbg !2625 { L82.preheader: %5 = call {} @julia.get_pgcstack() #35 %newstruct.sroa.0.sroa.0.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx = getelementptr inbounds { i64, { i64 } }, { i64, { i64 } } addrspace(11) %3, i64 0, i32 0 %newstruct.sroa.0.sroa.0.0.copyload = load i64, i64 addrspace(11) %newstruct.sroa.0.sroa.0.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx, align 8, !tbaa !329, !alias.scope !330, !noalias !2626 %newstruct.sroa.0.sroa.2.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx622 = getelementptr inbounds { i64, { i64 } }, { i64, { i64 } } addrspace(11) %3, i64 0, i32 1, i32 0 %newstruct.sroa.0.sroa.2.0.copyload = load i64, i64 addrspace(11)* %newstruct.sroa.0.sroa.2.0.newstruct.sroa.0.0..sroa_cast605.sroa_idx622, align 8, !tbaa !329, !alias.scope !330, !noalias !2626 %ptls_field624 = getelementptr inbounds {}*, {} %5, i64 2 %6 = bitcast {} %ptls_field624 to i64 %ptls_load625626 = load i64, i64** %6, align 8, !tbaa !21 %7 = getelementptr inbounds i64, i64 %ptls_load625626, i64 2 %safepoint = load i64*, i64 %7, align 8, !tbaa !25 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64 %safepoint) #35, !dbg !2629 fence syncscope("singlethread") seq_cst %8 = call fastcc nonnull {} addrspace(10) @julia_get_heap_memory_11081(i64 signext %2) #35, !dbg !2630 %9 = addrspacecast {} addrspace(10) %8 to {} addrspace(11), !dbg !2631 %10 = call nonnull {} @julia.pointer_from_objref({} addrspace(11) %9) #36, !dbg !2631 %11 = bitcast {}* %10 to i8*, !dbg !2631 %arrayptr = load i8, i8 %11, align 8, !dbg !2631, !tbaa !312, !alias.scope !315, !noalias !316, !nonnull !20 %12 = ptrtoint i8 %arrayptr to i64, !dbg !2631 %13 = add i64 %12, 63, !dbg !2633 %14 = and i64 %13, -64, !dbg !2637 %15 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10) nonnull %8) #35, !dbg !2639 %16 = inttoptr i64 %4 to i8, !dbg !2640 %17 = getelementptr i8, i8 %16, i64 440, !dbg !2640 %18 = ptrtoint i8 %17 to i64, !dbg !2640 %19 = mul i64 %newstruct.sroa.0.sroa.2.0.copyload, 40, !dbg !2645 %20 = add i64 %19, 63, !dbg !2649 %21 = and i64 %20, -64, !dbg !2651 %22 = inttoptr i64 %14 to i8, !dbg !2652 %23 = getelementptr i8, i8 %22, i64 %21, !dbg !2652 %24 = mul i64 %newstruct.sroa.0.sroa.2.0.copyload, 10, !dbg !2653 %25 = ptrtoint i8 %23 to i64, !dbg !2652 %ptr.0.i602 = inttoptr i64 %4 to float, !dbg !2655 %ptr.1.i603 = getelementptr inbounds float, float %ptr.0.i602, i64 100, !dbg !2655 %ptr.2.i604 = ptrtoint float* %ptr.1.i603 to i64, !dbg !2655 call fastcc void @julia__turbo___10773(i64 signext %newstruct.sroa.0.sroa.2.0.copyload, i64 zeroext %4, i64 zeroext %newstruct.sroa.0.sroa.0.0.copyload, i64 zeroext %ptr.2.i604, i64 zeroext %14) #35, !dbg !2661 %26 = icmp sgt i64 %24, 0, !dbg !2664 call void @llvm.assume(i1 noundef %26) #35, !dbg !2674 %27 = and i64 %24, 9223372036854775792, !dbg !2675 %28 = icmp eq i64 %27, 0, !dbg !2677 br i1 %28, label %L280, label %L122.preheader, !dbg !2670

L122.preheader: ; preds = %L82.preheader br label %L122, !dbg !2670

L122: ; preds = %L122.preheader, %L122 %iv = phi i64 [ 0, %L122.preheader ], [ %iv.next, %L122 ] %29 = shl nuw nsw i64 %iv, 4, !dbg !2679 %iv.next = add nuw nsw i64 %iv, 1, !dbg !2679 %res.i601 = shl nsw i64 %29, 2, !dbg !2679 %ptr.1.i598 = getelementptr inbounds i8, i8 %22, i64 %res.i601, !dbg !2687 %ptr.2.i599 = bitcast i8 %ptr.1.i598 to <16 x float>, !dbg !2687 %res.i600 = load <16 x float>, <16 x float> %ptr.2.i599, align 64, !dbg !2687, !alias.scope !178 %res.i596 = call fast <16 x float> @llvm.fabs.v16f32(<16 x float> %res.i600) #35, !dbg !2690 %res.i594 = fmul nsz contract <16 x float> %res.i596, <float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000>, !dbg !2696 %res.i593 = call fast <16 x float> @llvm.nearbyint.v16f32(<16 x float> %res.i594) #35, !dbg !2701 %res.i592 = fptosi <16 x float> %res.i593 to <16 x i32>, !dbg !2704 %res.i590 = fmul nsz contract <16 x float> %res.i593, <float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000>, !dbg !2710 %res.i589 = fadd nsz contract <16 x float> %res.i596, %res.i590, !dbg !2714 %res.i588 = fsub nsz contract <16 x float> %res.i596, %res.i589, !dbg !2718 %res.i587 = fadd nsz contract <16 x float> %res.i590, %res.i588, !dbg !2722 %res.i584 = fmul nsz contract <16 x float> %res.i593, <float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000>, !dbg !2725 %res.i583 = fadd nsz contract <16 x float> %res.i584, %res.i589, !dbg !2729 %res.i582 = fsub nsz contract <16 x float> %res.i589, %res.i583, !dbg !2733 %res.i581 = fadd nsz contract <16 x float> %res.i584, %res.i582, !dbg !2737 %res.i580 = fadd nsz contract <16 x float> %res.i587, %res.i581, !dbg !2737 %res.i579 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i583, <16 x float> noundef <float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000>, <16 x float> noundef <float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000>) #35, !dbg !2740 %res.i578 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i579, <16 x float> %res.i583, <16 x float> noundef <float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000>) #35, !dbg !2746 %res.i577 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i578, <16 x float> %res.i583, <16 x float> noundef <float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000>) #35, !dbg !2750 %res.i576 = fmul nsz contract <16 x float> %res.i583, %res.i577, !dbg !2754 %res.i575 = fneg nsz contract <16 x float> %res.i576, !dbg !2760 %res.i574 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i583, <16 x float> %res.i577, <16 x float> %res.i575) #35, !dbg !2765 %res.i573 = fmul nsz contract <16 x float> %res.i580, %res.i577, !dbg !2768 %res.i572 = fadd nsz contract <16 x float> %res.i573, %res.i574, !dbg !2771 %res.i571 = fadd nsz contract <16 x float> %res.i576, <float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000>, !dbg !2774 %res.i570 = fsub nsz contract <16 x float> %res.i576, %res.i571, !dbg !2778 %res.i569 = fadd nsz contract <16 x float> %res.i570, <float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000>, !dbg !2782 %res.i568 = fadd nsz contract <16 x float> %res.i572, %res.i569, !dbg !2785 %res.i567 = fmul nsz contract <16 x float> %res.i583, %res.i571, !dbg !2788 %res.i566 = fneg nsz contract <16 x float> %res.i567, !dbg !2794 %res.i565 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i583, <16 x float> %res.i571, <16 x float> %res.i566) #35, !dbg !2799 %res.i564 = fmul nsz contract <16 x float> %res.i583, %res.i568, !dbg !2802 %res.i563 = fmul nsz contract <16 x float> %res.i580, %res.i571, !dbg !2802 %res.i562 = fadd nsz contract <16 x float> %res.i565, %res.i564, !dbg !2805 %res.i561 = fadd nsz contract <16 x float> %res.i563, %res.i562, !dbg !2805 %res.i560 = fadd nsz contract <16 x float> %res.i567, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, !dbg !2809 %res.i559 = fsub nsz contract <16 x float> %res.i567, %res.i560, !dbg !2813 %res.i558 = fadd nsz contract <16 x float> %res.i559, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, !dbg !2817 %res.i557 = fadd nsz contract <16 x float> %res.i558, %res.i561, !dbg !2820 %res.i556 = fmul nsz contract <16 x float> %res.i583, %res.i583, !dbg !2823 %res.i555 = fneg nsz contract <16 x float> %res.i556, !dbg !2829 %res.i554 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i583, <16 x float> %res.i583, <16 x float> %res.i555) #35, !dbg !2834 %res.i553 = fadd nsz contract <16 x float> %res.i580, %res.i580, !dbg !2837 %res.i552 = fmul nsz contract <16 x float> %res.i583, %res.i553, !dbg !2840 %res.i551 = fadd nsz contract <16 x float> %res.i554, %res.i552, !dbg !2837 %res.i550 = fmul nsz contract <16 x float> %res.i556, %res.i560, !dbg !2843 %res.i549 = fneg nsz contract <16 x float> %res.i550, !dbg !2848 %res.i548 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i556, <16 x float> %res.i560, <16 x float> %res.i549) #35, !dbg !2853 %res.i547 = fmul nsz contract <16 x float> %res.i556, %res.i557, !dbg !2856 %res.i546 = fmul nsz contract <16 x float> %res.i551, %res.i560, !dbg !2856 %res.i545 = fadd nsz contract <16 x float> %res.i548, %res.i547, !dbg !2859 %res.i544 = fadd nsz contract <16 x float> %res.i546, %res.i545, !dbg !2859 %res.i543 = fadd nsz contract <16 x float> %res.i583, %res.i550, !dbg !2863 %res.i542 = fsub nsz contract <16 x float> %res.i583, %res.i543, !dbg !2867 %res.i541 = fadd nsz contract <16 x float> %res.i550, %res.i542, !dbg !2871 %res.i540 = fadd nsz contract <16 x float> %res.i541, %res.i544, !dbg !2871 %res.i539 = fadd nsz contract <16 x float> %res.i580, %res.i540, !dbg !2871 %res.i538 = fadd nsz contract <16 x float> %res.i543, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, !dbg !2874 %res.i537 = fsub nsz contract <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %res.i538, !dbg !2879 %res.i536 = fadd nsz contract <16 x float> %res.i543, %res.i537, !dbg !2883 %res.i535 = fadd nsz contract <16 x float> %res.i536, %res.i539, !dbg !2883 %res.i534 = ashr <16 x i32> %res.i592, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>, !dbg !2886 %res.i533 = shl <16 x i32> %res.i534, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>, !dbg !2891 %res.i532 = add <16 x i32> %res.i533, <i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216>, !dbg !2891 %res.i531 = bitcast <16 x i32> %res.i532 to <16 x float>, !dbg !2898 %res.i530 = fmul nsz contract <16 x float> %res.i538, %res.i531, !dbg !2901 %res.i529 = sub <16 x i32> %res.i592, %res.i534, !dbg !2904 %res.i528 = shl <16 x i32> %res.i529, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>, !dbg !2891 %res.i527 = add <16 x i32> %res.i528, <i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216>, !dbg !2891 %res.i526 = bitcast <16 x i32> %res.i527 to <16 x float>, !dbg !2898 %res.i525 = fmul nsz contract <16 x float> %res.i530, %res.i526, !dbg !2901 %res.i520 = fmul nsz contract <16 x float> %res.i535, %res.i531, !dbg !2901 %res.i515 = fmul nsz contract <16 x float> %res.i520, %res.i526, !dbg !2901 %res.i508 = fdiv nsz contract <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %res.i525, !dbg !2907 %res.i507 = fneg nsz contract <16 x float> %res.i508, !dbg !2914 %res.i506 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i507, <16 x float> %res.i525, <16 x float> noundef <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>) #35, !dbg !2919 %res.i505 = fmul nsz contract <16 x float> %res.i508, %res.i515, !dbg !2923 %res.i504 = fsub nsz contract <16 x float> %res.i506, %res.i505, !dbg !2926 %res.i503 = fmul nsz contract <16 x float> %res.i508, %res.i504, !dbg !2923 %res.i502 = fsub nsz contract <16 x float> %res.i525, %res.i508, !dbg !2929 %res.i501 = fsub nsz contract <16 x float> %res.i525, %res.i502, !dbg !2934 %res.i500 = fsub nsz contract <16 x float> %res.i501, %res.i508, !dbg !2934 %res.i499 = fsub nsz contract <16 x float> %res.i500, %res.i503, !dbg !2934 %res.i498 = fadd nsz contract <16 x float> %res.i515, %res.i499, !dbg !2938 %res.i497 = fadd nsz contract <16 x float> %res.i525, %res.i508, !dbg !2941 %res.i496 = fsub nsz contract <16 x float> %res.i525, %res.i497, !dbg !2945 %res.i495 = fadd nsz contract <16 x float> %res.i508, %res.i496, !dbg !2949 %res.i494 = fadd nsz contract <16 x float> %res.i495, %res.i503, !dbg !2949 %res.i493 = fadd nsz contract <16 x float> %res.i515, %res.i494, !dbg !2949 %res.i492 = fdiv nsz contract <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %res.i497, !dbg !2952 %res.i491 = fmul nsz contract <16 x float> %res.i502, %res.i492, !dbg !2958 %res.i490 = fneg nsz contract <16 x float> %res.i491, !dbg !2962 %res.i489 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i490, <16 x float> %res.i497, <16 x float> %res.i502) #35, !dbg !2967 %res.i487 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i490, <16 x float> %res.i493, <16 x float> %res.i498) #35, !dbg !2967 %res.i486 = fadd nsz contract <16 x float> %res.i489, %res.i487, !dbg !2970 %res.i485 = fmul nsz contract <16 x float> %res.i492, %res.i486, !dbg !2973 %res.i484 = fadd nsz contract <16 x float> %res.i491, %res.i485, !dbg !2976 %m.i481 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i596, <float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000>, !dbg !2981 %res.i480 = select reassoc nsz arcp contract <16 x i1> %m.i481, <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <16 x float> %res.i484, !dbg !2986 %m.i477 = fcmp reassoc nsz arcp contract uno <16 x float> %res.i480, zeroinitializer, !dbg !2989 %res.i476 = select reassoc nsz arcp contract <16 x i1> %m.i477, <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <16 x float> %res.i480, !dbg !2994 %m.i473 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i600, zeroinitializer, !dbg !2997 %res.i472 = fneg nsz contract <16 x float> %res.i476, !dbg !3002 %res.i471 = select reassoc nsz arcp contract <16 x i1> %m.i473, <16 x float> %res.i476, <16 x float> %res.i472, !dbg !3005 store <16 x float> %res.i471, <16 x float>* %ptr.2.i599, align 64, !dbg !3007, !noalias !3010 %res.i465 = add nuw nsw i64 %29, 16, !dbg !3011 %30 = icmp eq i64 %res.i465, %27, !dbg !2677 br i1 %30, label %L280.loopexit, label %L122, !dbg !2670

L280.loopexit: ; preds = %L122 br label %L280, !dbg !3014

L280: ; preds = %L280.loopexit, %L82.preheader %.not = icmp ult i64 %27, %24, !dbg !3014 br i1 %.not, label %L282, label %L506.preheader, !dbg !2670

L282: ; preds = %L280 %31 = trunc i64 %24 to i32, !dbg !3016 %32 = and i32 %31, 14, !dbg !3022 %.not627 = icmp eq i32 %32, 0, !dbg !3025 %33 = select i1 %.not627, i32 16, i32 %32, !dbg !3026 %res.i464 = call i32 @llvm.x86.bmi.bzhi.32(i32 noundef -1, i32 %33) #35, !dbg !3027 %34 = trunc i32 %res.i464 to i16, !dbg !3030 %res.i463 = shl nsw i64 %27, 2, !dbg !3031 %ptr.1.i459 = getelementptr inbounds i8, i8 %22, i64 %res.i463, !dbg !3039 %ptr.2.i460 = bitcast i8 %ptr.1.i459 to <16 x float>, !dbg !3039 %mask.0.i461 = bitcast i16 %34 to <16 x i1>, !dbg !3039 %res.i462 = call <16 x float> @llvm.masked.load.v16f32.p0v16f32(<16 x float> %ptr.2.i460, i32 noundef 4, <16 x i1> %mask.0.i461, <16 x float> noundef zeroinitializer) #35, !dbg !3039, !alias.scope !178 %res.i457 = call fast <16 x float> @llvm.fabs.v16f32(<16 x float> %res.i462) #35, !dbg !2690 %res.i455 = fmul nsz contract <16 x float> %res.i457, <float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000, float 0x3FF7154760000000>, !dbg !2696 %res.i454 = call fast <16 x float> @llvm.nearbyint.v16f32(<16 x float> %res.i455) #35, !dbg !2701 %res.i453 = fptosi <16 x float> %res.i454 to <16 x i32>, !dbg !2704 %res.i451 = fmul nsz contract <16 x float> %res.i454, <float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000, float 0xBFE62E4000000000>, !dbg !2710 %res.i450 = fadd nsz contract <16 x float> %res.i457, %res.i451, !dbg !2714 %res.i449 = fsub nsz contract <16 x float> %res.i457, %res.i450, !dbg !2718 %res.i448 = fadd nsz contract <16 x float> %res.i451, %res.i449, !dbg !2722 %res.i445 = fmul nsz contract <16 x float> %res.i454, <float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000, float 0xBEB7F7D1C0000000>, !dbg !2725 %res.i444 = fadd nsz contract <16 x float> %res.i445, %res.i450, !dbg !2729 %res.i443 = fsub nsz contract <16 x float> %res.i450, %res.i444, !dbg !2733 %res.i442 = fadd nsz contract <16 x float> %res.i445, %res.i443, !dbg !2737 %res.i441 = fadd nsz contract <16 x float> %res.i448, %res.i442, !dbg !2737 %res.i440 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i444, <16 x float> noundef <float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000, float 0x3F29F6FFE0000000>, <16 x float> noundef <float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000, float 0x3F56D7EF80000000>) #35, !dbg !2740 %res.i439 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i440, <16 x float> %res.i444, <16 x float> noundef <float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000, float 0x3F811121A0000000>) #35, !dbg !2746 %res.i438 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i439, <16 x float> %res.i444, <16 x float> noundef <float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000, float 0x3FA5554B80000000>) #35, !dbg !2750 %res.i437 = fmul nsz contract <16 x float> %res.i444, %res.i438, !dbg !2754 %res.i436 = fneg nsz contract <16 x float> %res.i437, !dbg !2760 %res.i435 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i444, <16 x float> %res.i438, <16 x float> %res.i436) #35, !dbg !2765 %res.i434 = fmul nsz contract <16 x float> %res.i441, %res.i438, !dbg !2768 %res.i433 = fadd nsz contract <16 x float> %res.i434, %res.i435, !dbg !2771 %res.i432 = fadd nsz contract <16 x float> %res.i437, <float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000>, !dbg !2774 %res.i431 = fsub nsz contract <16 x float> %res.i437, %res.i432, !dbg !2778 %res.i430 = fadd nsz contract <16 x float> %res.i431, <float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000, float 0x3FC5555540000000>, !dbg !2782 %res.i429 = fadd nsz contract <16 x float> %res.i433, %res.i430, !dbg !2785 %res.i428 = fmul nsz contract <16 x float> %res.i444, %res.i432, !dbg !2788 %res.i427 = fneg nsz contract <16 x float> %res.i428, !dbg !2794 %res.i426 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i444, <16 x float> %res.i432, <16 x float> %res.i427) #35, !dbg !2799 %res.i425 = fmul nsz contract <16 x float> %res.i444, %res.i429, !dbg !2802 %res.i424 = fmul nsz contract <16 x float> %res.i441, %res.i432, !dbg !2802 %res.i423 = fadd nsz contract <16 x float> %res.i426, %res.i425, !dbg !2805 %res.i422 = fadd nsz contract <16 x float> %res.i424, %res.i423, !dbg !2805 %res.i421 = fadd nsz contract <16 x float> %res.i428, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, !dbg !2809 %res.i420 = fsub nsz contract <16 x float> %res.i428, %res.i421, !dbg !2813 %res.i419 = fadd nsz contract <16 x float> %res.i420, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, !dbg !2817 %res.i418 = fadd nsz contract <16 x float> %res.i419, %res.i422, !dbg !2820 %res.i417 = fmul nsz contract <16 x float> %res.i444, %res.i444, !dbg !2823 %res.i416 = fneg nsz contract <16 x float> %res.i417, !dbg !2829 %res.i415 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i444, <16 x float> %res.i444, <16 x float> %res.i416) #35, !dbg !2834 %res.i414 = fadd nsz contract <16 x float> %res.i441, %res.i441, !dbg !2837 %res.i413 = fmul nsz contract <16 x float> %res.i444, %res.i414, !dbg !2840 %res.i412 = fadd nsz contract <16 x float> %res.i415, %res.i413, !dbg !2837 %res.i411 = fmul nsz contract <16 x float> %res.i417, %res.i421, !dbg !2843 %res.i410 = fneg nsz contract <16 x float> %res.i411, !dbg !2848 %res.i409 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i417, <16 x float> %res.i421, <16 x float> %res.i410) #35, !dbg !2853 %res.i408 = fmul nsz contract <16 x float> %res.i417, %res.i418, !dbg !2856 %res.i407 = fmul nsz contract <16 x float> %res.i412, %res.i421, !dbg !2856 %res.i406 = fadd nsz contract <16 x float> %res.i409, %res.i408, !dbg !2859 %res.i405 = fadd nsz contract <16 x float> %res.i407, %res.i406, !dbg !2859 %res.i404 = fadd nsz contract <16 x float> %res.i444, %res.i411, !dbg !2863 %res.i403 = fsub nsz contract <16 x float> %res.i444, %res.i404, !dbg !2867 %res.i402 = fadd nsz contract <16 x float> %res.i411, %res.i403, !dbg !2871 %res.i401 = fadd nsz contract <16 x float> %res.i402, %res.i405, !dbg !2871 %res.i400 = fadd nsz contract <16 x float> %res.i441, %res.i401, !dbg !2871 %res.i399 = fadd nsz contract <16 x float> %res.i404, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, !dbg !2874 %res.i398 = fsub nsz contract <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %res.i399, !dbg !2879 %res.i397 = fadd nsz contract <16 x float> %res.i404, %res.i398, !dbg !2883 %res.i396 = fadd nsz contract <16 x float> %res.i397, %res.i400, !dbg !2883 %res.i395 = ashr <16 x i32> %res.i453, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>, !dbg !2886 %res.i394 = shl <16 x i32> %res.i395, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>, !dbg !2891 %res.i393 = add <16 x i32> %res.i394, <i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216>, !dbg !2891 %res.i392 = bitcast <16 x i32> %res.i393 to <16 x float>, !dbg !2898 %res.i391 = fmul nsz contract <16 x float> %res.i399, %res.i392, !dbg !2901 %res.i390 = sub <16 x i32> %res.i453, %res.i395, !dbg !2904 %res.i389 = shl <16 x i32> %res.i390, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>, !dbg !2891 %res.i388 = add <16 x i32> %res.i389, <i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216>, !dbg !2891 %res.i387 = bitcast <16 x i32> %res.i388 to <16 x float>, !dbg !2898 %res.i386 = fmul nsz contract <16 x float> %res.i391, %res.i387, !dbg !2901 %res.i381 = fmul nsz contract <16 x float> %res.i396, %res.i392, !dbg !2901 %res.i376 = fmul nsz contract <16 x float> %res.i381, %res.i387, !dbg !2901 %res.i369 = fdiv nsz contract <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %res.i386, !dbg !2907 %res.i368 = fneg nsz contract <16 x float> %res.i369, !dbg !2914 %res.i367 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i368, <16 x float> %res.i386, <16 x float> noundef <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>) #35, !dbg !2919 %res.i366 = fmul nsz contract <16 x float> %res.i369, %res.i376, !dbg !2923 %res.i365 = fsub nsz contract <16 x float> %res.i367, %res.i366, !dbg !2926 %res.i364 = fmul nsz contract <16 x float> %res.i369, %res.i365, !dbg !2923 %res.i363 = fsub nsz contract <16 x float> %res.i386, %res.i369, !dbg !2929 %res.i362 = fsub nsz contract <16 x float> %res.i386, %res.i363, !dbg !2934 %res.i361 = fsub nsz contract <16 x float> %res.i362, %res.i369, !dbg !2934 %res.i360 = fsub nsz contract <16 x float> %res.i361, %res.i364, !dbg !2934 %res.i359 = fadd nsz contract <16 x float> %res.i376, %res.i360, !dbg !2938 %res.i358 = fadd nsz contract <16 x float> %res.i386, %res.i369, !dbg !2941 %res.i357 = fsub nsz contract <16 x float> %res.i386, %res.i358, !dbg !2945 %res.i356 = fadd nsz contract <16 x float> %res.i369, %res.i357, !dbg !2949 %res.i355 = fadd nsz contract <16 x float> %res.i356, %res.i364, !dbg !2949 %res.i354 = fadd nsz contract <16 x float> %res.i376, %res.i355, !dbg !2949 %res.i353 = fdiv nsz contract <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %res.i358, !dbg !2952 %res.i352 = fmul nsz contract <16 x float> %res.i363, %res.i353, !dbg !2958 %res.i351 = fneg nsz contract <16 x float> %res.i352, !dbg !2962 %res.i350 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i351, <16 x float> %res.i358, <16 x float> %res.i363) #35, !dbg !2967 %res.i348 = call nsz contract <16 x float> @llvm.fmuladd.v16f32(<16 x float> %res.i351, <16 x float> %res.i354, <16 x float> %res.i359) #35, !dbg !2967 %res.i347 = fadd nsz contract <16 x float> %res.i350, %res.i348, !dbg !2970 %res.i346 = fmul nsz contract <16 x float> %res.i353, %res.i347, !dbg !2973 %res.i345 = fadd nsz contract <16 x float> %res.i352, %res.i346, !dbg !2976 %m.i342 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i457, <float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000, float 0x4032B70880000000>, !dbg !2981 %res.i341 = select reassoc nsz arcp contract <16 x i1> %m.i342, <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <16 x float> %res.i345, !dbg !2986 %m.i338 = fcmp reassoc nsz arcp contract uno <16 x float> %res.i341, zeroinitializer, !dbg !2989 %res.i337 = select reassoc nsz arcp contract <16 x i1> %m.i338, <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <16 x float> %res.i341, !dbg !2994 %m.i334 = fcmp reassoc nsz arcp contract ogt <16 x float> %res.i462, zeroinitializer, !dbg !2997 %res.i333 = fneg nsz contract <16 x float> %res.i337, !dbg !3002 %res.i332 = select reassoc nsz arcp contract <16 x i1> %m.i334, <16 x float> %res.i337, <16 x float> %res.i333, !dbg !3005 call void @llvm.masked.store.v16f32.p0v16f32(<16 x float> %res.i332, <16 x float>* %ptr.2.i460, i32 noundef 4, <16 x i1> %mask.0.i461) #35, !dbg !3042 br label %L506.preheader, !dbg !3011

L506.preheader: ; preds = %L282, %L280 %ptr.1.i323 = getelementptr i8, i8 %16, i64 840, !dbg !3045 %ptr.2.i324 = ptrtoint i8 %ptr.1.i323 to i64, !dbg !3045 call fastcc void @julia__turbo___10773(i64 signext %newstruct.sroa.0.sroa.2.0.copyload, i64 zeroext %18, i64 zeroext %14, i64 zeroext %ptr.2.i324, i64 zeroext %25) #35, !dbg !3051 br i1 %28, label %L704, label %L546.preheader, !dbg !3056

L546.preheader: ; preds = %L506.preheader br label %L546, !dbg !3056

L546: ; preds = %L546.preheader, %L546 %iv1 = phi i64 [ 0, %L546.preheader ], [ %iv.next2, %L546 ] %35 = shl nuw nsw i64 %iv1, 4, !dbg !3060 %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3060 %res.i322 = shl nsw i64 %35, 2, !dbg !3060 %ptr.1.i319 = getelementptr inbounds i8, i8 %23, i64 %res.i322, !dbg !3068 %ptr.2.i320 = bitcast i8 %ptr.1.i319 to <16 x float>, !dbg !3068 %res.i321 = load <16 x float>, <16 x float> %ptr.2.i320, align 64, !dbg !3068, !alias.scope !178 %res.i318 = call fast <16 x float> @llvm.fabs.v16f32(<16 x float> %res.i321) #35, !dbg !3071 %res.i316 = fmul nsz contract <16 x float>