Created
July 10, 2024 22:24
-
-
Save Zentrik/1ff09cce2f2a098b6622286fdaa678f4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Function Signature: perf_sumelt(Base.SubArray{Int32, 2, Array{Int32, 3}, Tuple{Int64, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}}, true}) | |
; @ REPL[4]:1 within `perf_sumelt` | |
define i32 @julia_perf_sumelt_17680(ptr nocapture noundef nonnull readonly align 8 dereferenceable(48) %"A::SubArray") #0 { | |
top: | |
%"new::Tuple" = alloca [1 x i64], align 8 | |
; @ REPL[4]:3 within `perf_sumelt` | |
; ┌ @ abstractarray.jl:1232 within `iterate` | |
; │┌ @ abstractarray.jl:378 within `eachindex` @ abstractarray.jl:388 | |
; ││┌ @ abstractarray.jl:315 within `length` | |
; │││┌ @ subarray.jl:65 within `size` | |
; ││││┌ @ subarray.jl:517 within `axes` | |
%"A::SubArray.indices_ptr[2]_ptr" = getelementptr inbounds { ptr, { i64, [1 x [1 x i64]], [1 x [1 x i64]] }, i64, i64 }, ptr %"A::SubArray", i64 0, i32 1, i32 1 | |
%"A::SubArray.indices_ptr[3]_ptr" = getelementptr inbounds { ptr, { i64, [1 x [1 x i64]], [1 x [1 x i64]] }, i64, i64 }, ptr %"A::SubArray", i64 0, i32 1, i32 2 | |
; │││└└ | |
; │││┌ @ tuple.jl:661 within `prod` | |
; ││││┌ @ int.jl:88 within `*` | |
%"A::SubArray.indices_ptr[2]_ptr.indices_ptr.stop_ptr.unbox" = load i64, ptr %"A::SubArray.indices_ptr[2]_ptr", align 8 | |
%"A::SubArray.indices_ptr[3]_ptr.indices_ptr.stop_ptr.unbox" = load i64, ptr %"A::SubArray.indices_ptr[3]_ptr", align 8 | |
%0 = mul i64 %"A::SubArray.indices_ptr[3]_ptr.indices_ptr.stop_ptr.unbox", %"A::SubArray.indices_ptr[2]_ptr.indices_ptr.stop_ptr.unbox" | |
; ││└└└ | |
; ││┌ @ range.jl:483 within `oneto` | |
; │││┌ @ range.jl:481 within `OneTo` @ range.jl:466 | |
; ││││┌ @ promotion.jl:650 within `max` | |
; │││││┌ @ essentials.jl:786 within `ifelse` | |
%1 = call i64 @llvm.smax.i64(i64 %0, i64 0) | |
; │└└└└└ | |
; │ @ abstractarray.jl:1232 within `iterate` @ abstractarray.jl:1232 @ range.jl:911 | |
; │┌ @ range.jl:688 within `isempty` | |
; ││┌ @ operators.jl:420 within `>` | |
; │││┌ @ int.jl:83 within `<` | |
%2 = icmp slt i64 %0, 1 | |
; │└└└ | |
; │ @ abstractarray.jl:1232 within `iterate` @ abstractarray.jl:1233 | |
br i1 %2, label %L146, label %guard_exit125 | |
L93: ; preds = %guard_exit130, %scalar.ph | |
%3 = phi i64 [ %127, %guard_exit130 ], [ %bc.resume.val, %scalar.ph ] | |
%4 = phi i32 [ %126, %guard_exit130 ], [ %bc.merge.rdx, %scalar.ph ] | |
%value_phi12174 = phi i64 [ %3, %guard_exit130 ], [ %bc.resume.val197, %scalar.ph ] | |
; └ | |
; @ REPL[4]:5 within `perf_sumelt` | |
; ┌ @ abstractarray.jl:1234 within `iterate` | |
; │┌ @ subarray.jl:329 within `getindex` | |
; ││┌ @ abstractarray.jl:699 within `checkbounds` @ abstractarray.jl:689 | |
; │││┌ @ abstractarray.jl:754 within `checkindex` | |
; ││││┌ @ int.jl:513 within `<` | |
%.not = icmp ult i64 %value_phi12174, %1 | |
; │││└└ | |
; │││ @ abstractarray.jl:699 within `checkbounds` | |
br i1 %.not, label %guard_exit130, label %L110 | |
L110: ; preds = %L93 | |
; ││└ | |
store i64 %3, ptr %"new::Tuple", align 8 | |
; ││┌ @ abstractarray.jl:699 within `checkbounds` | |
call void @j_throw_boundserror_17698(ptr nocapture nonnull readonly %"A::SubArray", ptr nocapture nonnull readonly %"new::Tuple") #9 | |
unreachable | |
L146: ; preds = %guard_exit130, %guard_exit130.peel, %guard_exit125, %top | |
%value_phi22 = phi i32 [ 0, %top ], [ %10, %guard_exit125 ], [ %17, %guard_exit130.peel ], [ %126, %guard_exit130 ] | |
; └└└ | |
; @ REPL[4]:6 within `perf_sumelt` | |
ret i32 %value_phi22 | |
guard_exit125: ; preds = %top | |
; @ REPL[4]:3 within `perf_sumelt` | |
; ┌ @ abstractarray.jl:1232 within `iterate` @ abstractarray.jl:1234 | |
; │┌ @ subarray.jl:330 within `getindex` | |
; ││┌ @ Base.jl:49 within `getproperty` | |
%"A::SubArray.parent77" = load atomic ptr, ptr %"A::SubArray" unordered, align 8 | |
; ││└ | |
; ││┌ @ subarray.jl:324 within `_reindexlinear` | |
; │││┌ @ Base.jl:49 within `getproperty` | |
%"A::SubArray.offset1_ptr79" = getelementptr inbounds { ptr, { i64, [1 x [1 x i64]], [1 x [1 x i64]] }, i64, i64 }, ptr %"A::SubArray", i64 0, i32 2 | |
%"A::SubArray.stride1_ptr81" = getelementptr inbounds { ptr, { i64, [1 x [1 x i64]], [1 x [1 x i64]] }, i64, i64 }, ptr %"A::SubArray", i64 0, i32 3 | |
; │││└ | |
; │││┌ @ int.jl:88 within `*` | |
%"A::SubArray.stride1_ptr81.unbox" = load i64, ptr %"A::SubArray.stride1_ptr81", align 8 | |
; │││└ | |
; │││┌ @ int.jl:87 within `+` | |
%"A::SubArray.offset1_ptr79.unbox" = load i64, ptr %"A::SubArray.offset1_ptr79", align 8 | |
%5 = add i64 %"A::SubArray.offset1_ptr79.unbox", %"A::SubArray.stride1_ptr81.unbox" | |
; ││└└ | |
; ││ @ subarray.jl:330 within `getindex` @ essentials.jl:907 | |
%6 = load ptr, ptr %"A::SubArray.parent77", align 8 | |
%7 = shl i64 %5, 2 | |
%8 = add i64 %7, -4 | |
%9 = getelementptr i8, ptr %6, i64 %8 | |
%10 = load i32, ptr %9, align 4 | |
; └└ | |
; @ REPL[4]:5 within `perf_sumelt` | |
; ┌ @ abstractarray.jl:1232 within `iterate` @ range.jl:915 | |
; │┌ @ promotion.jl:639 within `==` | |
%.not.not.not173 = icmp eq i64 %1, 1 | |
; │└ | |
; │ @ abstractarray.jl:1233 within `iterate` | |
br i1 %.not.not.not173, label %L146, label %guard_exit130.peel | |
guard_exit130.peel: ; preds = %guard_exit125 | |
; │ @ abstractarray.jl:1234 within `iterate` | |
; │┌ @ subarray.jl:330 within `getindex` @ essentials.jl:907 | |
%11 = shl i64 %"A::SubArray.stride1_ptr81.unbox", 3 | |
%12 = shl i64 %"A::SubArray.offset1_ptr79.unbox", 2 | |
%13 = add i64 %11, %12 | |
%14 = add i64 %13, -4 | |
%15 = getelementptr i8, ptr %6, i64 %14 | |
%16 = load i32, ptr %15, align 4 | |
; └└ | |
; @ REPL[4]:4 within `perf_sumelt` | |
; ┌ @ int.jl:87 within `+` | |
%17 = add i32 %10, %16 | |
; └ | |
; @ REPL[4]:5 within `perf_sumelt` | |
; ┌ @ abstractarray.jl:1232 within `iterate` @ range.jl:915 | |
; │┌ @ promotion.jl:639 within `==` | |
%.not.not.not.peel = icmp eq i64 %1, 2 | |
; │└ | |
; │ @ abstractarray.jl:1233 within `iterate` | |
br i1 %.not.not.not.peel, label %L146, label %L93.preheader | |
L93.preheader: ; preds = %guard_exit130.peel | |
; │ @ abstractarray.jl:1234 within `iterate` | |
; │┌ @ subarray.jl:329 within `getindex` | |
; ││┌ @ abstractarray.jl:699 within `checkbounds` | |
%18 = add nsw i64 %1, -2 | |
%19 = add nsw i64 %1, -3 | |
%umin = call i64 @llvm.umin.i64(i64 %18, i64 %19) | |
%20 = add nsw i64 %umin, 1 | |
%min.iters.check = icmp ult i64 %20, 17 | |
br i1 %min.iters.check, label %scalar.ph, label %vector.ph | |
vector.ph: ; preds = %L93.preheader | |
%n.mod.vf = and i64 %20, 15 | |
%21 = icmp eq i64 %n.mod.vf, 0 | |
%22 = select i1 %21, i64 16, i64 %n.mod.vf | |
%n.vec = sub nsw i64 %20, %22 | |
%ind.end = add i64 %n.vec, 3 | |
%ind.end196 = add i64 %n.vec, 2 | |
%23 = insertelement <8 x i32> <i32 poison, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>, i32 %17, i64 0 | |
; ││└ | |
; ││ @ subarray.jl:330 within `getindex` | |
; ││┌ @ subarray.jl:324 within `_reindexlinear` | |
; │││┌ @ int.jl:87 within `+` | |
%24 = insertelement <4 x i64> poison, i64 %"A::SubArray.offset1_ptr79.unbox", i64 0 | |
%25 = shufflevector <4 x i64> %24, <4 x i64> poison, <4 x i32> zeroinitializer | |
; │││└ | |
; │││┌ @ int.jl:88 within `*` | |
%26 = insertelement <4 x i64> poison, i64 %"A::SubArray.stride1_ptr81.unbox", i64 0 | |
%27 = shufflevector <4 x i64> %26, <4 x i64> poison, <4 x i32> zeroinitializer | |
; ││└└ | |
; ││ @ subarray.jl:329 within `getindex` | |
; ││┌ @ abstractarray.jl:699 within `checkbounds` | |
br label %vector.body | |
vector.body: ; preds = %vector.body, %vector.ph | |
%index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ] | |
%vec.phi = phi <8 x i32> [ %23, %vector.ph ], [ %116, %vector.body ] | |
%vec.phi198 = phi <8 x i32> [ zeroinitializer, %vector.ph ], [ %117, %vector.body ] | |
%28 = insertelement <4 x i64> poison, i64 %index, i64 0 | |
%29 = shufflevector <4 x i64> %28, <4 x i64> poison, <4 x i32> zeroinitializer | |
%30 = or <4 x i64> %29, <i64 3, i64 4, i64 5, i64 6> | |
%31 = or <4 x i64> %29, <i64 7, i64 8, i64 9, i64 10> | |
%32 = or <4 x i64> %29, <i64 11, i64 12, i64 13, i64 14> | |
%33 = or <4 x i64> %29, <i64 15, i64 poison, i64 poison, i64 poison> | |
%34 = add <4 x i64> %29, <i64 poison, i64 16, i64 17, i64 18> | |
%35 = shufflevector <4 x i64> %33, <4 x i64> %34, <4 x i32> <i32 0, i32 5, i32 6, i32 7> | |
; ││└ | |
; ││ @ subarray.jl:330 within `getindex` | |
; ││┌ @ subarray.jl:324 within `_reindexlinear` | |
; │││┌ @ int.jl:88 within `*` | |
%36 = mul <4 x i64> %27, %30 | |
; │││└ | |
; │││┌ @ int.jl:87 within `+` | |
%37 = add <4 x i64> %25, %36 | |
; ││└└ | |
; ││ @ subarray.jl:330 within `getindex` @ essentials.jl:907 | |
%38 = shl <4 x i64> %37, <i64 2, i64 2, i64 2, i64 2> | |
%39 = add <4 x i64> %38, <i64 -4, i64 -4, i64 -4, i64 -4> | |
; ││ @ subarray.jl:330 within `getindex` | |
; ││┌ @ subarray.jl:324 within `_reindexlinear` | |
; │││┌ @ int.jl:88 within `*` | |
%40 = mul <4 x i64> %27, %31 | |
; │││└ | |
; │││┌ @ int.jl:87 within `+` | |
%41 = add <4 x i64> %25, %40 | |
; ││└└ | |
; ││ @ subarray.jl:330 within `getindex` @ essentials.jl:907 | |
%42 = shl <4 x i64> %41, <i64 2, i64 2, i64 2, i64 2> | |
%43 = add <4 x i64> %42, <i64 -4, i64 -4, i64 -4, i64 -4> | |
; ││ @ subarray.jl:330 within `getindex` | |
; ││┌ @ subarray.jl:324 within `_reindexlinear` | |
; │││┌ @ int.jl:88 within `*` | |
%44 = mul <4 x i64> %27, %32 | |
; │││└ | |
; │││┌ @ int.jl:87 within `+` | |
%45 = add <4 x i64> %25, %44 | |
; ││└└ | |
; ││ @ subarray.jl:330 within `getindex` @ essentials.jl:907 | |
%46 = shl <4 x i64> %45, <i64 2, i64 2, i64 2, i64 2> | |
%47 = add <4 x i64> %46, <i64 -4, i64 -4, i64 -4, i64 -4> | |
; ││ @ subarray.jl:330 within `getindex` | |
; ││┌ @ subarray.jl:324 within `_reindexlinear` | |
; │││┌ @ int.jl:88 within `*` | |
%48 = mul <4 x i64> %27, %35 | |
; │││└ | |
; │││┌ @ int.jl:87 within `+` | |
%49 = add <4 x i64> %25, %48 | |
; ││└└ | |
; ││ @ subarray.jl:330 within `getindex` @ essentials.jl:907 | |
%50 = shl <4 x i64> %49, <i64 2, i64 2, i64 2, i64 2> | |
%51 = add <4 x i64> %50, <i64 -4, i64 -4, i64 -4, i64 -4> | |
%52 = extractelement <4 x i64> %39, i64 0 | |
%53 = getelementptr i8, ptr %6, i64 %52 | |
%54 = extractelement <4 x i64> %39, i64 1 | |
%55 = getelementptr i8, ptr %6, i64 %54 | |
%56 = extractelement <4 x i64> %39, i64 2 | |
%57 = getelementptr i8, ptr %6, i64 %56 | |
%58 = extractelement <4 x i64> %39, i64 3 | |
%59 = getelementptr i8, ptr %6, i64 %58 | |
%60 = extractelement <4 x i64> %43, i64 0 | |
%61 = getelementptr i8, ptr %6, i64 %60 | |
%62 = extractelement <4 x i64> %43, i64 1 | |
%63 = getelementptr i8, ptr %6, i64 %62 | |
%64 = extractelement <4 x i64> %43, i64 2 | |
%65 = getelementptr i8, ptr %6, i64 %64 | |
%66 = extractelement <4 x i64> %43, i64 3 | |
%67 = getelementptr i8, ptr %6, i64 %66 | |
%68 = extractelement <4 x i64> %47, i64 0 | |
%69 = getelementptr i8, ptr %6, i64 %68 | |
%70 = extractelement <4 x i64> %47, i64 1 | |
%71 = getelementptr i8, ptr %6, i64 %70 | |
%72 = extractelement <4 x i64> %47, i64 2 | |
%73 = getelementptr i8, ptr %6, i64 %72 | |
%74 = extractelement <4 x i64> %47, i64 3 | |
%75 = getelementptr i8, ptr %6, i64 %74 | |
%76 = extractelement <4 x i64> %51, i64 0 | |
%77 = getelementptr i8, ptr %6, i64 %76 | |
%78 = extractelement <4 x i64> %51, i64 1 | |
%79 = getelementptr i8, ptr %6, i64 %78 | |
%80 = extractelement <4 x i64> %51, i64 2 | |
%81 = getelementptr i8, ptr %6, i64 %80 | |
%82 = extractelement <4 x i64> %51, i64 3 | |
%83 = getelementptr i8, ptr %6, i64 %82 | |
%84 = load i32, ptr %53, align 4 | |
%85 = load i32, ptr %55, align 4 | |
%86 = load i32, ptr %57, align 4 | |
%87 = load i32, ptr %59, align 4 | |
%88 = load i32, ptr %61, align 4 | |
%89 = load i32, ptr %63, align 4 | |
%90 = load i32, ptr %65, align 4 | |
%91 = load i32, ptr %67, align 4 | |
%92 = insertelement <8 x i32> poison, i32 %84, i64 0 | |
%93 = insertelement <8 x i32> %92, i32 %85, i64 1 | |
%94 = insertelement <8 x i32> %93, i32 %86, i64 2 | |
%95 = insertelement <8 x i32> %94, i32 %87, i64 3 | |
%96 = insertelement <8 x i32> %95, i32 %88, i64 4 | |
%97 = insertelement <8 x i32> %96, i32 %89, i64 5 | |
%98 = insertelement <8 x i32> %97, i32 %90, i64 6 | |
%99 = insertelement <8 x i32> %98, i32 %91, i64 7 | |
%100 = load i32, ptr %69, align 4 | |
%101 = load i32, ptr %71, align 4 | |
%102 = load i32, ptr %73, align 4 | |
%103 = load i32, ptr %75, align 4 | |
%104 = load i32, ptr %77, align 4 | |
%105 = load i32, ptr %79, align 4 | |
%106 = load i32, ptr %81, align 4 | |
%107 = load i32, ptr %83, align 4 | |
; ││ @ subarray.jl:329 within `getindex` | |
; ││┌ @ abstractarray.jl:699 within `checkbounds` | |
%108 = insertelement <8 x i32> poison, i32 %100, i64 0 | |
%109 = insertelement <8 x i32> %108, i32 %101, i64 1 | |
%110 = insertelement <8 x i32> %109, i32 %102, i64 2 | |
%111 = insertelement <8 x i32> %110, i32 %103, i64 3 | |
%112 = insertelement <8 x i32> %111, i32 %104, i64 4 | |
%113 = insertelement <8 x i32> %112, i32 %105, i64 5 | |
%114 = insertelement <8 x i32> %113, i32 %106, i64 6 | |
%115 = insertelement <8 x i32> %114, i32 %107, i64 7 | |
%116 = add <8 x i32> %vec.phi, %99 | |
%117 = add <8 x i32> %vec.phi198, %115 | |
%index.next = add nuw i64 %index, 16 | |
%118 = icmp eq i64 %index.next, %n.vec | |
br i1 %118, label %middle.block, label %vector.body | |
middle.block: ; preds = %vector.body | |
; │└└ | |
; │ @ abstractarray.jl:1233 within `iterate` | |
%bin.rdx = add <8 x i32> %117, %116 | |
%119 = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %bin.rdx) | |
br label %scalar.ph | |
scalar.ph: ; preds = %middle.block, %L93.preheader | |
%bc.resume.val = phi i64 [ %ind.end, %middle.block ], [ 3, %L93.preheader ] | |
%bc.resume.val197 = phi i64 [ %ind.end196, %middle.block ], [ 2, %L93.preheader ] | |
%bc.merge.rdx = phi i32 [ %119, %middle.block ], [ %17, %L93.preheader ] | |
; │ @ abstractarray.jl:1234 within `iterate` | |
; │┌ @ subarray.jl:329 within `getindex` | |
; ││┌ @ abstractarray.jl:699 within `checkbounds` | |
br label %L93 | |
guard_exit130: ; preds = %L93 | |
; ││└ | |
; ││ @ subarray.jl:330 within `getindex` | |
; ││┌ @ subarray.jl:324 within `_reindexlinear` | |
; │││┌ @ int.jl:88 within `*` | |
%120 = mul i64 %"A::SubArray.stride1_ptr81.unbox", %3 | |
; │││└ | |
; │││┌ @ int.jl:87 within `+` | |
%121 = add i64 %"A::SubArray.offset1_ptr79.unbox", %120 | |
; ││└└ | |
; ││ @ subarray.jl:330 within `getindex` @ essentials.jl:907 | |
%122 = shl i64 %121, 2 | |
%123 = add i64 %122, -4 | |
%124 = getelementptr i8, ptr %6, i64 %123 | |
%125 = load i32, ptr %124, align 4 | |
; └└ | |
; @ REPL[4]:4 within `perf_sumelt` | |
; ┌ @ int.jl:87 within `+` | |
%126 = add i32 %4, %125 | |
; └ | |
; @ REPL[4]:5 within `perf_sumelt` | |
; ┌ @ abstractarray.jl:1232 within `iterate` @ range.jl:915 | |
; │┌ @ promotion.jl:639 within `==` | |
%.not.not.not = icmp eq i64 %3, %1 | |
; │└ | |
%127 = add nuw i64 %3, 1 | |
; │ @ abstractarray.jl:1233 within `iterate` | |
br i1 %.not.not.not, label %L146, label %L93 | |
; └ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment