Skip to content

Instantly share code, notes, and snippets.

@samtkaplan
Created July 29, 2019 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samtkaplan/0565ef0bc6d5007ed88635270950aaee to your computer and use it in GitHub Desktop.
Save samtkaplan/0565ef0bc6d5007ed88635270950aaee to your computer and use it in GitHub Desktop.
simd bug, llvm output
; @ /data/esdrd/tqff/tmp/issue.jl:20 within `does_not_vectorize!'
define nonnull %jl_value_t addrspace(10)* @"japi1_does_not_vectorize!_16049"(%jl_value_t addrspace(10)*, %jl_value_t addrspace(10)**, i32) #0 {
top:
%3 = alloca %jl_value_t addrspace(10)**, align 8
store volatile %jl_value_t addrspace(10)** %1, %jl_value_t addrspace(10)*** %3, align 8
%4 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)** %1, align 8
%5 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)** %1, i64 1
%6 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)** %5, align 8
; ┌ @ array.jl:157 within `size'
; │┌ @ ntuple.jl:43 within `ntuple'
; ││┌ @ array.jl:157 within `#69'
; │││┌ @ array.jl:154 within `size'
%7 = addrspacecast %jl_value_t addrspace(10)* %6 to %jl_value_t addrspace(11)*
%8 = bitcast %jl_value_t addrspace(11)* %7 to %jl_value_t addrspace(10)* addrspace(11)*
%9 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %8, i64 5
%10 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %9 to i64 addrspace(11)*
%11 = load i64, i64 addrspace(11)* %10, align 8
; └└└└
; @ /data/esdrd/tqff/tmp/issue.jl:21 within `does_not_vectorize!'
%12 = call nonnull %jl_value_t addrspace(10)* @julia_ntuple_16050(i64 9)
; @ /data/esdrd/tqff/tmp/issue.jl:23 within `does_not_vectorize!'
; ┌ @ int.jl:52 within `-'
%13 = add i64 %11, -5
; └
; ┌ @ range.jl:5 within `Colon'
; │┌ @ range.jl:277 within `UnitRange'
; ││┌ @ range.jl:282 within `unitrange_last'
; │││┌ @ operators.jl:341 within `>='
; ││││┌ @ int.jl:424 within `<='
%14 = icmp sgt i64 %13, 4
; └└└└└
br i1 %14, label %L13.L18_crit_edge, label %L208
L13.L18_crit_edge: ; preds = %top
; @ /data/esdrd/tqff/tmp/issue.jl:20 within `does_not_vectorize!'
; ┌ @ array.jl:157 within `size'
; │┌ @ ntuple.jl:43 within `ntuple'
; ││┌ @ array.jl:157 within `#69'
; │││┌ @ array.jl:154 within `size'
%15 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %8, i64 3
%16 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %15 to i64 addrspace(11)*
%17 = load i64, i64 addrspace(11)* %16, align 8
%18 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %8, i64 4
%19 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %18 to i64 addrspace(11)*
%20 = load i64, i64 addrspace(11)* %19, align 8
%21 = add i64 %20, -5
%22 = icmp sgt i64 %21, 4
%23 = select i1 %22, i64 %21, i64 4
%24 = add i64 %17, -5
%25 = icmp sgt i64 %24, 4
%26 = select i1 %25, i64 %24, i64 4
%27 = add nsw i64 %26, -5
; └└└└
; @ /data/esdrd/tqff/tmp/issue.jl:24 within `does_not_vectorize!'
; ┌ @ simdloop.jl:71 within `macro expansion'
; │┌ @ simdloop.jl:51 within `simd_inner_length'
; ││┌ @ range.jl:543 within `length'
; │││┌ @ checked.jl:165 within `checked_add'
; ││││┌ @ checked.jl:132 within `add_with_overflow'
%28 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %27, i64 1)
%29 = extractvalue { i64, i1 } %28, 0
%30 = extractvalue { i64, i1 } %28, 1
%31 = icmp slt i64 %29, 1
%32 = addrspacecast %jl_value_t addrspace(10)* %12 to %jl_value_t addrspace(11)*
%33 = bitcast %jl_value_t addrspace(11)* %32 to float addrspace(11)*
%34 = bitcast %jl_value_t addrspace(11)* %7 to float addrspace(13)* addrspace(11)*
%35 = load float addrspace(13)*, float addrspace(13)* addrspace(11)* %34, align 8
%36 = bitcast %jl_value_t addrspace(11)* %32 to [9 x float] addrspace(11)*
%37 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 1
%38 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 2
%39 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 3
%40 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 4
%41 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 5
%42 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 6
%43 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 7
%44 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 8
%45 = addrspacecast %jl_value_t addrspace(10)* %4 to %jl_value_t addrspace(11)*
%46 = bitcast %jl_value_t addrspace(11)* %45 to %jl_value_t addrspace(10)* addrspace(11)*
%47 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %46, i64 3
%48 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %47 to i64 addrspace(11)*
%49 = load i64, i64 addrspace(11)* %48, align 8
%50 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %46, i64 4
%51 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %50 to i64 addrspace(11)*
%52 = load i64, i64 addrspace(11)* %51, align 8
%53 = bitcast %jl_value_t addrspace(11)* %45 to float addrspace(13)* addrspace(11)*
%54 = load float addrspace(13)*, float addrspace(13)* addrspace(11)* %53, align 8
; └└└└└
; @ /data/esdrd/tqff/tmp/issue.jl:23 within `does_not_vectorize!'
br label %L18
L18: ; preds = %L197, %L13.L18_crit_edge
%value_phi3 = phi i64 [ 5, %L13.L18_crit_edge ], [ %174, %L197 ]
br i1 %22, label %L27.L32_crit_edge, label %L197
L27.L32_crit_edge: ; preds = %L18
; @ /data/esdrd/tqff/tmp/issue.jl:24 within `does_not_vectorize!'
; ┌ @ simdloop.jl:71 within `macro expansion'
; │┌ @ simdloop.jl:51 within `simd_inner_length'
; ││┌ @ range.jl:543 within `length'
; │││┌ @ checked.jl:166 within `checked_add'
br i1 %30, label %L50, label %L55.lr.ph
L55.lr.ph: ; preds = %L27.L32_crit_edge
%55 = add i64 %value_phi3, -1
%56 = mul i64 %20, %55
%57 = mul i64 %52, %55
br label %L55
L32: ; preds = %L186
; └└└└
; ┌ @ range.jl:598 within `iterate'
; │┌ @ int.jl:53 within `+'
%58 = add i64 %value_phi871, 1
; └└
; ┌ @ simdloop.jl:71 within `macro expansion'
; │┌ @ simdloop.jl:51 within `simd_inner_length'
; ││┌ @ range.jl:543 within `length'
; │││┌ @ checked.jl:166 within `checked_add'
br label %L55
L50: ; preds = %L27.L32_crit_edge
call void @julia_throw_overflowerr_binaryop_13905(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 47939032106784 to %jl_value_t*) to %jl_value_t addrspace(10)*), i64 %27, i64 1)
call void @llvm.trap()
unreachable
L55: ; preds = %L32, %L55.lr.ph
%value_phi871 = phi i64 [ 5, %L55.lr.ph ], [ %58, %L32 ]
; │└└└
; │ @ simdloop.jl:72 within `macro expansion'
br i1 %31, label %L186, label %L61.lr.ph
L61.lr.ph: ; preds = %L55
%59 = load float, float addrspace(11)* %33, align 4
%60 = add i64 %value_phi871, -1
%reass.add = add i64 %60, %56
%reass.mul = mul i64 %reass.add, %17
%61 = load float, float addrspace(11)* %37, align 4
%62 = load float, float addrspace(11)* %38, align 4
%63 = load float, float addrspace(11)* %39, align 4
%64 = load float, float addrspace(11)* %40, align 4
%65 = load float, float addrspace(11)* %41, align 4
%66 = load float, float addrspace(11)* %42, align 4
%67 = load float, float addrspace(11)* %43, align 4
%68 = load float, float addrspace(11)* %44, align 4
%69 = add i64 %value_phi871, -5
%reass.add49 = add i64 %69, %56
%reass.mul50 = mul i64 %reass.add49, %17
%70 = add i64 %value_phi871, -4
%reass.add51 = add i64 %70, %56
%reass.mul52 = mul i64 %reass.add51, %17
%71 = add i64 %value_phi871, -3
%reass.add53 = add i64 %71, %56
%reass.mul54 = mul i64 %reass.add53, %17
%72 = add i64 %value_phi871, -2
%reass.add55 = add i64 %72, %56
%reass.mul56 = mul i64 %reass.add55, %17
%reass.add59 = add i64 %56, %value_phi871
%reass.mul60 = mul i64 %reass.add59, %17
%73 = add i64 %value_phi871, 1
%reass.add61 = add i64 %73, %56
%reass.mul62 = mul i64 %reass.add61, %17
%74 = add i64 %value_phi871, 2
%reass.add63 = add i64 %74, %56
%reass.mul64 = mul i64 %reass.add63, %17
%75 = add i64 %value_phi871, 3
%reass.add65 = add i64 %75, %56
%reass.mul66 = mul i64 %reass.add65, %17
%reass.add67 = add i64 %60, %57
%reass.mul68 = mul i64 %reass.add67, %49
; │ @ simdloop.jl:75 within `macro expansion'
br label %L61
L61: ; preds = %L61.lr.ph, %L61
%value_phi1170 = phi i64 [ 0, %L61.lr.ph ], [ %80, %L61 ]
; │ @ simdloop.jl:77 within `macro expansion' @ /data/esdrd/tqff/tmp/issue.jl:25
; │┌ @ array.jl:743 within `getindex'
%76 = add i64 %reass.mul, %value_phi1170
%77 = getelementptr inbounds float, float addrspace(13)* %35, i64 %76
%78 = load float, float addrspace(13)* %77, align 4
; │└
; │┌ @ float.jl:404 within `*'
%79 = fmul float %59, %78
; │└
; │┌ @ array.jl:743 within `getindex'
%80 = add nuw nsw i64 %value_phi1170, 1
%81 = add i64 %80, %reass.mul
%82 = getelementptr inbounds float, float addrspace(13)* %35, i64 %81
%83 = load float, float addrspace(13)* %82, align 4
; │└
; │┌ @ float.jl:404 within `*'
%84 = fmul float %61, %83
; │└
; │┌ @ operators.jl:529 within `+' @ float.jl:400
%85 = fadd float %79, %84
; │└
; │┌ @ array.jl:743 within `getindex'
%86 = add nuw nsw i64 %value_phi1170, 2
%87 = add i64 %86, %reass.mul
%88 = getelementptr inbounds float, float addrspace(13)* %35, i64 %87
%89 = load float, float addrspace(13)* %88, align 4
; │└
; │┌ @ float.jl:404 within `*'
%90 = fmul float %62, %89
; │└
; │┌ @ operators.jl:529 within `+' @ float.jl:400
%91 = fadd float %85, %90
; │└
; │┌ @ array.jl:743 within `getindex'
%92 = add nuw nsw i64 %value_phi1170, 3
%93 = add i64 %92, %reass.mul
%94 = getelementptr inbounds float, float addrspace(13)* %35, i64 %93
%95 = load float, float addrspace(13)* %94, align 4
; │└
; │┌ @ float.jl:404 within `*'
%96 = fmul float %63, %95
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%97 = fadd float %91, %96
; │└└└
; │┌ @ array.jl:743 within `getindex'
%98 = add nuw nsw i64 %value_phi1170, 4
%99 = add i64 %98, %reass.mul
%100 = getelementptr inbounds float, float addrspace(13)* %35, i64 %99
%101 = load float, float addrspace(13)* %100, align 4
; │└
; │┌ @ float.jl:404 within `*'
%102 = fmul float %64, %101
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%103 = fadd float %97, %102
; │└└└
; │┌ @ array.jl:743 within `getindex'
%104 = add nuw nsw i64 %value_phi1170, 5
%105 = add i64 %104, %reass.mul
%106 = getelementptr inbounds float, float addrspace(13)* %35, i64 %105
%107 = load float, float addrspace(13)* %106, align 4
; │└
; │┌ @ float.jl:404 within `*'
%108 = fmul float %65, %107
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%109 = fadd float %103, %108
; │└└└
; │┌ @ array.jl:743 within `getindex'
%110 = add nuw i64 %value_phi1170, 6
%111 = add i64 %110, %reass.mul
%112 = getelementptr inbounds float, float addrspace(13)* %35, i64 %111
%113 = load float, float addrspace(13)* %112, align 4
; │└
; │┌ @ float.jl:404 within `*'
%114 = fmul float %66, %113
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%115 = fadd float %109, %114
; │└└└
; │┌ @ array.jl:743 within `getindex'
%116 = add nuw i64 %value_phi1170, 7
%117 = add i64 %116, %reass.mul
%118 = getelementptr inbounds float, float addrspace(13)* %35, i64 %117
%119 = load float, float addrspace(13)* %118, align 4
; │└
; │┌ @ float.jl:404 within `*'
%120 = fmul float %67, %119
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%121 = fadd float %115, %120
; │└└└
; │┌ @ array.jl:743 within `getindex'
%122 = add nuw i64 %value_phi1170, 8
%123 = add i64 %122, %reass.mul
%124 = getelementptr inbounds float, float addrspace(13)* %35, i64 %123
%125 = load float, float addrspace(13)* %124, align 4
; │└
; │┌ @ float.jl:404 within `*'
%126 = fmul float %68, %125
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%127 = fadd float %121, %126
; │└└└
; │┌ @ array.jl:743 within `getindex'
%128 = add i64 %98, %reass.mul50
%129 = getelementptr inbounds float, float addrspace(13)* %35, i64 %128
%130 = load float, float addrspace(13)* %129, align 4
; │└
; │┌ @ float.jl:404 within `*'
%131 = fmul float %59, %130
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%132 = fadd float %127, %131
; │└└└
; │┌ @ array.jl:743 within `getindex'
%133 = add i64 %98, %reass.mul52
%134 = getelementptr inbounds float, float addrspace(13)* %35, i64 %133
%135 = load float, float addrspace(13)* %134, align 4
; │└
; │┌ @ float.jl:404 within `*'
%136 = fmul float %61, %135
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%137 = fadd float %132, %136
; │└└└
; │┌ @ array.jl:743 within `getindex'
%138 = add i64 %98, %reass.mul54
%139 = getelementptr inbounds float, float addrspace(13)* %35, i64 %138
%140 = load float, float addrspace(13)* %139, align 4
; │└
; │┌ @ float.jl:404 within `*'
%141 = fmul float %62, %140
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%142 = fadd float %137, %141
; │└└└
; │┌ @ array.jl:743 within `getindex'
%143 = add i64 %98, %reass.mul56
%144 = getelementptr inbounds float, float addrspace(13)* %35, i64 %143
%145 = load float, float addrspace(13)* %144, align 4
; │└
; │┌ @ float.jl:404 within `*'
%146 = fmul float %63, %145
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%147 = fadd float %142, %146
%148 = fadd float %147, %102
; │└└└
; │┌ @ array.jl:743 within `getindex'
%149 = add i64 %98, %reass.mul60
%150 = getelementptr inbounds float, float addrspace(13)* %35, i64 %149
%151 = load float, float addrspace(13)* %150, align 4
; │└
; │┌ @ float.jl:404 within `*'
%152 = fmul float %65, %151
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%153 = fadd float %148, %152
; │└└└
; │┌ @ array.jl:743 within `getindex'
%154 = add i64 %98, %reass.mul62
%155 = getelementptr inbounds float, float addrspace(13)* %35, i64 %154
%156 = load float, float addrspace(13)* %155, align 4
; │└
; │┌ @ float.jl:404 within `*'
%157 = fmul float %66, %156
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%158 = fadd float %153, %157
; │└└└
; │┌ @ array.jl:743 within `getindex'
%159 = add i64 %98, %reass.mul64
%160 = getelementptr inbounds float, float addrspace(13)* %35, i64 %159
%161 = load float, float addrspace(13)* %160, align 4
; │└
; │┌ @ float.jl:404 within `*'
%162 = fmul float %67, %161
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%163 = fadd float %158, %162
; │└└└
; │┌ @ array.jl:743 within `getindex'
%164 = add i64 %98, %reass.mul66
%165 = getelementptr inbounds float, float addrspace(13)* %35, i64 %164
%166 = load float, float addrspace(13)* %165, align 4
; │└
; │┌ @ float.jl:404 within `*'
%167 = fmul float %68, %166
; │└
; │┌ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:519 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%168 = fadd float %163, %167
; │└└└
; │┌ @ array.jl:782 within `setindex!'
%169 = add i64 %98, %reass.mul68
%170 = getelementptr inbounds float, float addrspace(13)* %54, i64 %169
store float %168, float addrspace(13)* %170, align 4
; │└
; │ @ simdloop.jl:75 within `macro expansion'
; │┌ @ int.jl:49 within `<'
%171 = icmp ult i64 %80, %29
; │└
br i1 %171, label %L61, label %L186
L186: ; preds = %L61, %L55
; └
; ┌ @ range.jl:597 within `iterate'
; │┌ @ promotion.jl:403 within `=='
%172 = icmp eq i64 %value_phi871, %23
; └└
br i1 %172, label %L197, label %L32
L197: ; preds = %L186, %L18
; ┌ @ range.jl:597 within `iterate'
; │┌ @ promotion.jl:403 within `=='
%173 = icmp eq i64 %value_phi3, %13
; │└
; │ @ range.jl:598 within `iterate'
; │┌ @ int.jl:53 within `+'
%174 = add i64 %value_phi3, 1
; └└
br i1 %173, label %L208, label %L18
L208: ; preds = %L197, %top
; @ /data/esdrd/tqff/tmp/issue.jl:31 within `does_not_vectorize!'
ret %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 47938844788480 to %jl_value_t*) to %jl_value_t addrspace(10)*)
}
; @ /data/esdrd/tqff/tmp/issue.jl:2 within `does_vectorize!'
define nonnull %jl_value_t addrspace(10)* @"japi1_does_vectorize!_16046"(%jl_value_t addrspace(10)*, %jl_value_t addrspace(10)**, i32) #0 {
top:
%3 = alloca %jl_value_t addrspace(10)**, align 8
store volatile %jl_value_t addrspace(10)** %1, %jl_value_t addrspace(10)*** %3, align 8
%4 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)** %1, align 8
%5 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)** %1, i64 1
%6 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)** %5, align 8
; ┌ @ array.jl:157 within `size'
; │┌ @ ntuple.jl:43 within `ntuple'
; ││┌ @ array.jl:157 within `#69'
; │││┌ @ array.jl:154 within `size'
%7 = addrspacecast %jl_value_t addrspace(10)* %6 to %jl_value_t addrspace(11)*
%8 = bitcast %jl_value_t addrspace(11)* %7 to %jl_value_t addrspace(10)* addrspace(11)*
%9 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %8, i64 5
%10 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %9 to i64 addrspace(11)*
%11 = load i64, i64 addrspace(11)* %10, align 8
; └└└└
; @ /data/esdrd/tqff/tmp/issue.jl:3 within `does_vectorize!'
%12 = call nonnull %jl_value_t addrspace(10)* @julia_ntuple_16047(i64 9)
; @ /data/esdrd/tqff/tmp/issue.jl:5 within `does_vectorize!'
; ┌ @ int.jl:52 within `-'
%13 = add i64 %11, -5
; └
; ┌ @ range.jl:5 within `Colon'
; │┌ @ range.jl:277 within `UnitRange'
; ││┌ @ range.jl:282 within `unitrange_last'
; │││┌ @ operators.jl:341 within `>='
; ││││┌ @ int.jl:424 within `<='
%14 = icmp sgt i64 %13, 4
; └└└└└
br i1 %14, label %L13.L18_crit_edge, label %L189
L13.L18_crit_edge: ; preds = %top
; @ /data/esdrd/tqff/tmp/issue.jl:2 within `does_vectorize!'
; ┌ @ array.jl:157 within `size'
; │┌ @ ntuple.jl:43 within `ntuple'
; ││┌ @ array.jl:157 within `#69'
; │││┌ @ array.jl:154 within `size'
%15 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %8, i64 3
%16 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %15 to i64 addrspace(11)*
%17 = load i64, i64 addrspace(11)* %16, align 8
%18 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %8, i64 4
%19 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %18 to i64 addrspace(11)*
%20 = load i64, i64 addrspace(11)* %19, align 8
%21 = add i64 %20, -5
%22 = icmp sgt i64 %21, 4
%23 = select i1 %22, i64 %21, i64 4
%24 = add i64 %17, -5
%25 = icmp sgt i64 %24, 4
%26 = select i1 %25, i64 %24, i64 4
%27 = add nsw i64 %26, -5
; └└└└
; @ /data/esdrd/tqff/tmp/issue.jl:6 within `does_vectorize!'
; ┌ @ simdloop.jl:71 within `macro expansion'
; │┌ @ simdloop.jl:51 within `simd_inner_length'
; ││┌ @ range.jl:543 within `length'
; │││┌ @ checked.jl:165 within `checked_add'
; ││││┌ @ checked.jl:132 within `add_with_overflow'
%28 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %27, i64 1)
%29 = extractvalue { i64, i1 } %28, 0
%30 = extractvalue { i64, i1 } %28, 1
%31 = icmp slt i64 %29, 1
%32 = addrspacecast %jl_value_t addrspace(10)* %12 to %jl_value_t addrspace(11)*
%33 = bitcast %jl_value_t addrspace(11)* %32 to float addrspace(11)*
%34 = bitcast %jl_value_t addrspace(11)* %7 to float addrspace(13)* addrspace(11)*
%35 = load float addrspace(13)*, float addrspace(13)* addrspace(11)* %34, align 8
%36 = bitcast %jl_value_t addrspace(11)* %32 to [9 x float] addrspace(11)*
%37 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 1
%38 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 2
%39 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 3
%40 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 4
%41 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 5
%42 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 6
%43 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 7
%44 = getelementptr [9 x float], [9 x float] addrspace(11)* %36, i64 0, i64 8
%45 = addrspacecast %jl_value_t addrspace(10)* %4 to %jl_value_t addrspace(11)*
%46 = bitcast %jl_value_t addrspace(11)* %45 to %jl_value_t addrspace(10)* addrspace(11)*
%47 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %46, i64 3
%48 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %47 to i64 addrspace(11)*
%49 = load i64, i64 addrspace(11)* %48, align 8
%50 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)* addrspace(11)* %46, i64 4
%51 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %50 to i64 addrspace(11)*
%52 = load i64, i64 addrspace(11)* %51, align 8
%53 = bitcast %jl_value_t addrspace(11)* %45 to float addrspace(13)* addrspace(11)*
%54 = load float addrspace(13)*, float addrspace(13)* addrspace(11)* %53, align 8
; └└└└└
; @ /data/esdrd/tqff/tmp/issue.jl:5 within `does_vectorize!'
%55 = shl i64 %52, 2
%56 = add i64 %55, 4
%57 = mul i64 %49, %56
%58 = add i64 %57, 4
%59 = mul i64 %52, %49
%60 = add i64 %26, %57
%61 = shl i64 %20, 2
%62 = add i64 %61, 7
%63 = mul i64 %17, %62
%64 = add i64 %63, 4
%65 = mul i64 %20, %17
%66 = add i64 %26, %63
%67 = add i64 %61, 6
%68 = mul i64 %17, %67
%69 = add i64 %68, 4
%70 = add i64 %26, %68
%71 = add i64 %61, 5
%72 = mul i64 %17, %71
%73 = add i64 %72, 4
%74 = add i64 %26, %72
%75 = or i64 %61, 3
%76 = mul i64 %17, %75
%77 = add i64 %76, 4
%78 = add i64 %26, %76
%79 = or i64 %61, 2
%80 = mul i64 %17, %79
%81 = add i64 %80, 4
%82 = add i64 %26, %80
%83 = or i64 %61, 1
%84 = mul i64 %17, %83
%85 = add i64 %84, 4
%86 = add i64 %26, %84
%87 = mul i64 %20, %17
%88 = shl i64 %87, 2
%89 = add i64 %88, 4
%90 = add i64 %26, %88
%91 = add i64 %61, 4
%92 = mul i64 %17, %91
%93 = add i64 %26, %92
%94 = add i64 %93, 4
br label %L18
L18: ; preds = %L178, %L13.L18_crit_edge
%indvar = phi i64 [ %indvar.next, %L178 ], [ 0, %L13.L18_crit_edge ]
%value_phi3 = phi i64 [ %340, %L178 ], [ 5, %L13.L18_crit_edge ]
%95 = mul i64 %59, %indvar
%96 = add i64 %58, %95
%97 = add i64 %60, %95
%98 = mul i64 %65, %indvar
%99 = add i64 %64, %98
%100 = add i64 %66, %98
%101 = add i64 %69, %98
%102 = add i64 %70, %98
%103 = add i64 %73, %98
%104 = add i64 %74, %98
%105 = add i64 %77, %98
%106 = add i64 %78, %98
%107 = add i64 %81, %98
%108 = add i64 %82, %98
%109 = add i64 %85, %98
%110 = add i64 %86, %98
%111 = add i64 %89, %98
%112 = add i64 %90, %98
%113 = add i64 %92, %98
%114 = add i64 %94, %98
br i1 %22, label %L27.L32_crit_edge, label %L178
L27.L32_crit_edge: ; preds = %L18
; @ /data/esdrd/tqff/tmp/issue.jl:6 within `does_vectorize!'
; ┌ @ simdloop.jl:71 within `macro expansion'
; │┌ @ simdloop.jl:51 within `simd_inner_length'
; ││┌ @ range.jl:543 within `length'
; │││┌ @ checked.jl:166 within `checked_add'
br i1 %30, label %L50, label %L55.lr.ph
L55.lr.ph: ; preds = %L27.L32_crit_edge
%115 = add i64 %value_phi3, -1
%116 = mul i64 %20, %115
%117 = mul i64 %52, %115
br label %L55
L32: ; preds = %L167
; └└└└
; ┌ @ range.jl:598 within `iterate'
; │┌ @ int.jl:53 within `+'
%118 = add i64 %value_phi867, 1
; └└
; ┌ @ simdloop.jl:71 within `macro expansion'
; │┌ @ simdloop.jl:51 within `simd_inner_length'
; ││┌ @ range.jl:543 within `length'
; │││┌ @ checked.jl:166 within `checked_add'
%indvar.next72 = add i64 %indvar71, 1
br label %L55
L50: ; preds = %L27.L32_crit_edge
call void @julia_throw_overflowerr_binaryop_13905(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 47939032106784 to %jl_value_t*) to %jl_value_t addrspace(10)*), i64 %27, i64 1)
call void @llvm.trap()
unreachable
L55: ; preds = %L32, %L55.lr.ph
%indvar71 = phi i64 [ %indvar.next72, %L32 ], [ 0, %L55.lr.ph ]
%value_phi867 = phi i64 [ %118, %L32 ], [ 5, %L55.lr.ph ]
; │└└└
; │ @ simdloop.jl:72 within `macro expansion'
%119 = mul i64 %49, %indvar71
%120 = add i64 %96, %119
%scevgep = getelementptr float, float addrspace(13)* %54, i64 %120
%121 = add i64 %97, %119
%scevgep74 = getelementptr float, float addrspace(13)* %54, i64 %121
%122 = mul i64 %17, %indvar71
%123 = add i64 %99, %122
%scevgep76 = getelementptr float, float addrspace(13)* %35, i64 %123
%124 = add i64 %100, %122
%scevgep78 = getelementptr float, float addrspace(13)* %35, i64 %124
%125 = add i64 %101, %122
%scevgep80 = getelementptr float, float addrspace(13)* %35, i64 %125
%126 = add i64 %102, %122
%scevgep82 = getelementptr float, float addrspace(13)* %35, i64 %126
%127 = add i64 %103, %122
%scevgep84 = getelementptr float, float addrspace(13)* %35, i64 %127
%128 = add i64 %104, %122
%scevgep86 = getelementptr float, float addrspace(13)* %35, i64 %128
%129 = add i64 %105, %122
%scevgep88 = getelementptr float, float addrspace(13)* %35, i64 %129
%130 = add i64 %106, %122
%scevgep90 = getelementptr float, float addrspace(13)* %35, i64 %130
%131 = add i64 %107, %122
%scevgep92 = getelementptr float, float addrspace(13)* %35, i64 %131
%132 = add i64 %108, %122
%scevgep94 = getelementptr float, float addrspace(13)* %35, i64 %132
%133 = add i64 %109, %122
%scevgep96 = getelementptr float, float addrspace(13)* %35, i64 %133
%134 = add i64 %110, %122
%scevgep98 = getelementptr float, float addrspace(13)* %35, i64 %134
%135 = add i64 %111, %122
%scevgep100 = getelementptr float, float addrspace(13)* %35, i64 %135
%136 = add i64 %112, %122
%scevgep102 = getelementptr float, float addrspace(13)* %35, i64 %136
%137 = add i64 %113, %122
%scevgep104 = getelementptr float, float addrspace(13)* %35, i64 %137
%138 = add i64 %114, %122
%scevgep106 = getelementptr float, float addrspace(13)* %35, i64 %138
br i1 %31, label %L167, label %L61.lr.ph
L61.lr.ph: ; preds = %L55
%139 = add i64 %value_phi867, -1
%reass.add = add i64 %139, %116
%reass.mul = mul i64 %reass.add, %17
%140 = load float, float addrspace(11)* %33, align 4
%141 = load float, float addrspace(11)* %37, align 4
%142 = load float, float addrspace(11)* %38, align 4
%143 = load float, float addrspace(11)* %39, align 4
%144 = load float, float addrspace(11)* %40, align 4
%145 = load float, float addrspace(11)* %41, align 4
%146 = load float, float addrspace(11)* %42, align 4
%147 = load float, float addrspace(11)* %43, align 4
%148 = load float, float addrspace(11)* %44, align 4
%149 = add i64 %value_phi867, -5
%reass.add47 = add i64 %149, %116
%reass.mul48 = mul i64 %reass.add47, %17
%150 = add i64 %value_phi867, -4
%reass.add49 = add i64 %150, %116
%reass.mul50 = mul i64 %reass.add49, %17
%151 = add i64 %value_phi867, -3
%reass.add51 = add i64 %151, %116
%reass.mul52 = mul i64 %reass.add51, %17
%152 = add i64 %value_phi867, -2
%reass.add53 = add i64 %152, %116
%reass.mul54 = mul i64 %reass.add53, %17
%reass.add57 = add i64 %116, %value_phi867
%reass.mul58 = mul i64 %reass.add57, %17
%153 = add i64 %value_phi867, 1
%reass.add59 = add i64 %153, %116
%reass.mul60 = mul i64 %reass.add59, %17
%154 = add i64 %value_phi867, 2
%reass.add61 = add i64 %154, %116
%reass.mul62 = mul i64 %reass.add61, %17
%reass.add63 = add i64 %139, %117
%reass.mul64 = mul i64 %reass.add63, %49
; │ @ simdloop.jl:75 within `macro expansion'
%min.iters.check = icmp ult i64 %29, 8
br i1 %min.iters.check, label %scalar.ph, label %vector.memcheck
vector.memcheck: ; preds = %L61.lr.ph
%bound0 = icmp ult float addrspace(13)* %scevgep, %scevgep78
%bound1 = icmp ult float addrspace(13)* %scevgep76, %scevgep74
%found.conflict = and i1 %bound0, %bound1
%bound0108 = icmp ult float addrspace(13)* %scevgep, %scevgep82
%bound1109 = icmp ult float addrspace(13)* %scevgep80, %scevgep74
%found.conflict110 = and i1 %bound0108, %bound1109
%conflict.rdx = or i1 %found.conflict, %found.conflict110
%bound0111 = icmp ult float addrspace(13)* %scevgep, %scevgep86
%bound1112 = icmp ult float addrspace(13)* %scevgep84, %scevgep74
%found.conflict113 = and i1 %bound0111, %bound1112
%conflict.rdx114 = or i1 %conflict.rdx, %found.conflict113
%bound0115 = icmp ult float addrspace(13)* %scevgep, %scevgep90
%bound1116 = icmp ult float addrspace(13)* %scevgep88, %scevgep74
%found.conflict117 = and i1 %bound0115, %bound1116
%conflict.rdx118 = or i1 %conflict.rdx114, %found.conflict117
%bound0119 = icmp ult float addrspace(13)* %scevgep, %scevgep94
%bound1120 = icmp ult float addrspace(13)* %scevgep92, %scevgep74
%found.conflict121 = and i1 %bound0119, %bound1120
%conflict.rdx122 = or i1 %conflict.rdx118, %found.conflict121
%bound0123 = icmp ult float addrspace(13)* %scevgep, %scevgep98
%bound1124 = icmp ult float addrspace(13)* %scevgep96, %scevgep74
%found.conflict125 = and i1 %bound0123, %bound1124
%conflict.rdx126 = or i1 %conflict.rdx122, %found.conflict125
%bound0127 = icmp ult float addrspace(13)* %scevgep, %scevgep102
%bound1128 = icmp ult float addrspace(13)* %scevgep100, %scevgep74
%found.conflict129 = and i1 %bound0127, %bound1128
%conflict.rdx130 = or i1 %conflict.rdx126, %found.conflict129
%bound0131 = icmp ult float addrspace(13)* %scevgep, %scevgep106
%bound1132 = icmp ult float addrspace(13)* %scevgep104, %scevgep74
%found.conflict133 = and i1 %bound0131, %bound1132
%conflict.rdx134 = or i1 %conflict.rdx130, %found.conflict133
br i1 %conflict.rdx134, label %scalar.ph, label %vector.ph
vector.ph: ; preds = %vector.memcheck
%n.vec = and i64 %29, -8
%broadcast.splatinsert135 = insertelement <8 x float> undef, float %140, i32 0
%broadcast.splat136 = shufflevector <8 x float> %broadcast.splatinsert135, <8 x float> undef, <8 x i32> zeroinitializer
%broadcast.splatinsert138 = insertelement <8 x float> undef, float %141, i32 0
%broadcast.splat139 = shufflevector <8 x float> %broadcast.splatinsert138, <8 x float> undef, <8 x i32> zeroinitializer
%broadcast.splatinsert141 = insertelement <8 x float> undef, float %142, i32 0
%broadcast.splat142 = shufflevector <8 x float> %broadcast.splatinsert141, <8 x float> undef, <8 x i32> zeroinitializer
%broadcast.splatinsert144 = insertelement <8 x float> undef, float %143, i32 0
%broadcast.splat145 = shufflevector <8 x float> %broadcast.splatinsert144, <8 x float> undef, <8 x i32> zeroinitializer
%broadcast.splatinsert147 = insertelement <8 x float> undef, float %144, i32 0
%broadcast.splat148 = shufflevector <8 x float> %broadcast.splatinsert147, <8 x float> undef, <8 x i32> zeroinitializer
%broadcast.splatinsert150 = insertelement <8 x float> undef, float %145, i32 0
%broadcast.splat151 = shufflevector <8 x float> %broadcast.splatinsert150, <8 x float> undef, <8 x i32> zeroinitializer
%broadcast.splatinsert153 = insertelement <8 x float> undef, float %146, i32 0
%broadcast.splat154 = shufflevector <8 x float> %broadcast.splatinsert153, <8 x float> undef, <8 x i32> zeroinitializer
%broadcast.splatinsert156 = insertelement <8 x float> undef, float %147, i32 0
%broadcast.splat157 = shufflevector <8 x float> %broadcast.splatinsert156, <8 x float> undef, <8 x i32> zeroinitializer
%broadcast.splatinsert159 = insertelement <8 x float> undef, float %148, i32 0
%broadcast.splat160 = shufflevector <8 x float> %broadcast.splatinsert159, <8 x float> undef, <8 x i32> zeroinitializer
br label %vector.body
vector.body: ; preds = %vector.body, %vector.ph
; │ @ simdloop.jl:77 within `macro expansion' @ /data/esdrd/tqff/tmp/issue.jl:7
; │┌ @ array.jl:743 within `getindex'
%index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
%155 = add i64 %reass.mul, %index
%156 = getelementptr inbounds float, float addrspace(13)* %35, i64 %155
%157 = bitcast float addrspace(13)* %156 to <8 x float> addrspace(13)*
%wide.load = load <8 x float>, <8 x float> addrspace(13)* %157, align 4
; │└
; │┌ @ float.jl:404 within `*'
%158 = fmul <8 x float> %wide.load, %broadcast.splat136
; │└
; │┌ @ array.jl:743 within `getindex'
%159 = or i64 %index, 1
%160 = add i64 %159, %reass.mul
%161 = getelementptr inbounds float, float addrspace(13)* %35, i64 %160
%162 = bitcast float addrspace(13)* %161 to <8 x float> addrspace(13)*
%wide.load137 = load <8 x float>, <8 x float> addrspace(13)* %162, align 4
; │└
; │┌ @ float.jl:404 within `*'
%163 = fmul <8 x float> %wide.load137, %broadcast.splat139
; │└
; │┌ @ array.jl:743 within `getindex'
%164 = or i64 %index, 2
%165 = add i64 %164, %reass.mul
%166 = getelementptr inbounds float, float addrspace(13)* %35, i64 %165
%167 = bitcast float addrspace(13)* %166 to <8 x float> addrspace(13)*
%wide.load140 = load <8 x float>, <8 x float> addrspace(13)* %167, align 4
; │└
; │┌ @ float.jl:404 within `*'
%168 = fmul <8 x float> %wide.load140, %broadcast.splat142
; │└
; │┌ @ array.jl:743 within `getindex'
%169 = or i64 %index, 3
%170 = add i64 %169, %reass.mul
%171 = getelementptr inbounds float, float addrspace(13)* %35, i64 %170
%172 = bitcast float addrspace(13)* %171 to <8 x float> addrspace(13)*
%wide.load143 = load <8 x float>, <8 x float> addrspace(13)* %172, align 4
; │└
; │┌ @ float.jl:404 within `*'
%173 = fmul <8 x float> %wide.load143, %broadcast.splat145
; │└
; │┌ @ array.jl:743 within `getindex'
%174 = or i64 %index, 4
%175 = add i64 %174, %reass.mul
%176 = getelementptr inbounds float, float addrspace(13)* %35, i64 %175
%177 = bitcast float addrspace(13)* %176 to <8 x float> addrspace(13)*
%wide.load146 = load <8 x float>, <8 x float> addrspace(13)* %177, align 4
; │└
; │┌ @ float.jl:404 within `*'
%178 = fmul <8 x float> %wide.load146, %broadcast.splat148
; │└
; │┌ @ array.jl:743 within `getindex'
%179 = or i64 %index, 5
%180 = add i64 %179, %reass.mul
%181 = getelementptr inbounds float, float addrspace(13)* %35, i64 %180
%182 = bitcast float addrspace(13)* %181 to <8 x float> addrspace(13)*
%wide.load149 = load <8 x float>, <8 x float> addrspace(13)* %182, align 4
; │└
; │┌ @ float.jl:404 within `*'
%183 = fmul <8 x float> %wide.load149, %broadcast.splat151
; │└
; │┌ @ array.jl:743 within `getindex'
%184 = or i64 %index, 6
%185 = add i64 %184, %reass.mul
%186 = getelementptr inbounds float, float addrspace(13)* %35, i64 %185
%187 = bitcast float addrspace(13)* %186 to <8 x float> addrspace(13)*
%wide.load152 = load <8 x float>, <8 x float> addrspace(13)* %187, align 4
; │└
; │┌ @ float.jl:404 within `*'
%188 = fmul <8 x float> %wide.load152, %broadcast.splat154
; │└
; │┌ @ array.jl:743 within `getindex'
%189 = or i64 %index, 7
%190 = add i64 %189, %reass.mul
%191 = getelementptr inbounds float, float addrspace(13)* %35, i64 %190
%192 = bitcast float addrspace(13)* %191 to <8 x float> addrspace(13)*
%wide.load155 = load <8 x float>, <8 x float> addrspace(13)* %192, align 4
; │└
; │┌ @ float.jl:404 within `*'
%193 = fmul <8 x float> %wide.load155, %broadcast.splat157
; │└
; │┌ @ array.jl:743 within `getindex'
%194 = add nuw i64 %index, 8
%195 = add i64 %194, %reass.mul
%196 = getelementptr inbounds float, float addrspace(13)* %35, i64 %195
%197 = bitcast float addrspace(13)* %196 to <8 x float> addrspace(13)*
%wide.load158 = load <8 x float>, <8 x float> addrspace(13)* %197, align 4
; │└
; │┌ @ float.jl:404 within `*'
%198 = fmul <8 x float> %wide.load158, %broadcast.splat160
; │└
; │┌ @ array.jl:743 within `getindex'
%199 = add i64 %174, %reass.mul48
%200 = getelementptr inbounds float, float addrspace(13)* %35, i64 %199
%201 = bitcast float addrspace(13)* %200 to <8 x float> addrspace(13)*
%wide.load161 = load <8 x float>, <8 x float> addrspace(13)* %201, align 4
; │└
; │┌ @ float.jl:404 within `*'
%202 = fmul <8 x float> %wide.load161, %broadcast.splat136
; │└
; │┌ @ array.jl:743 within `getindex'
%203 = add i64 %174, %reass.mul50
%204 = getelementptr inbounds float, float addrspace(13)* %35, i64 %203
%205 = bitcast float addrspace(13)* %204 to <8 x float> addrspace(13)*
%wide.load162 = load <8 x float>, <8 x float> addrspace(13)* %205, align 4
; │└
; │┌ @ float.jl:404 within `*'
%206 = fmul <8 x float> %wide.load162, %broadcast.splat139
; │└
; │┌ @ array.jl:743 within `getindex'
%207 = add i64 %174, %reass.mul52
%208 = getelementptr inbounds float, float addrspace(13)* %35, i64 %207
%209 = bitcast float addrspace(13)* %208 to <8 x float> addrspace(13)*
%wide.load163 = load <8 x float>, <8 x float> addrspace(13)* %209, align 4
; │└
; │┌ @ float.jl:404 within `*'
%210 = fmul <8 x float> %wide.load163, %broadcast.splat142
; │└
; │┌ @ array.jl:743 within `getindex'
%211 = add i64 %174, %reass.mul54
%212 = getelementptr inbounds float, float addrspace(13)* %35, i64 %211
%213 = bitcast float addrspace(13)* %212 to <8 x float> addrspace(13)*
%wide.load164 = load <8 x float>, <8 x float> addrspace(13)* %213, align 4
; │└
; │┌ @ float.jl:404 within `*'
%214 = fmul <8 x float> %wide.load164, %broadcast.splat145
; │└
; │┌ @ array.jl:743 within `getindex'
%215 = add i64 %174, %reass.mul58
%216 = getelementptr inbounds float, float addrspace(13)* %35, i64 %215
%217 = bitcast float addrspace(13)* %216 to <8 x float> addrspace(13)*
%wide.load165 = load <8 x float>, <8 x float> addrspace(13)* %217, align 4
; │└
; │┌ @ float.jl:404 within `*'
%218 = fmul <8 x float> %wide.load165, %broadcast.splat151
; │└
; │┌ @ array.jl:743 within `getindex'
%219 = add i64 %174, %reass.mul60
%220 = getelementptr inbounds float, float addrspace(13)* %35, i64 %219
%221 = bitcast float addrspace(13)* %220 to <8 x float> addrspace(13)*
%wide.load166 = load <8 x float>, <8 x float> addrspace(13)* %221, align 4
; │└
; │┌ @ float.jl:404 within `*'
%222 = fmul <8 x float> %wide.load166, %broadcast.splat154
; │└
; │┌ @ array.jl:743 within `getindex'
%223 = add i64 %174, %reass.mul62
%224 = getelementptr inbounds float, float addrspace(13)* %35, i64 %223
%225 = bitcast float addrspace(13)* %224 to <8 x float> addrspace(13)*
%wide.load167 = load <8 x float>, <8 x float> addrspace(13)* %225, align 4
; │└
; │┌ @ float.jl:404 within `*'
%226 = fmul <8 x float> %wide.load167, %broadcast.splat157
; │└
; │┌ @ operators.jl:529 within `+' @ float.jl:400
%227 = fadd <8 x float> %158, %163
%228 = fadd <8 x float> %227, %168
; ││ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:517 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%229 = fadd <8 x float> %228, %173
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%230 = fadd <8 x float> %229, %178
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%231 = fadd <8 x float> %230, %183
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%232 = fadd <8 x float> %231, %188
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%233 = fadd <8 x float> %232, %193
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%234 = fadd <8 x float> %233, %198
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%235 = fadd <8 x float> %234, %202
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%236 = fadd <8 x float> %235, %206
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%237 = fadd <8 x float> %236, %210
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%238 = fadd <8 x float> %237, %214
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%239 = fadd <8 x float> %238, %178
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%240 = fadd <8 x float> %239, %218
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%241 = fadd <8 x float> %240, %222
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:516
; │││┌ @ float.jl:400 within `+'
%242 = fadd <8 x float> %241, %226
; │└└└
; │┌ @ array.jl:782 within `setindex!'
%243 = add i64 %174, %reass.mul64
%244 = getelementptr inbounds float, float addrspace(13)* %54, i64 %243
%245 = bitcast float addrspace(13)* %244 to <8 x float> addrspace(13)*
store <8 x float> %242, <8 x float> addrspace(13)* %245, align 4
; │└
; │┌ @ array.jl:743 within `getindex'
%index.next = add i64 %index, 8
%246 = icmp eq i64 %index.next, %n.vec
br i1 %246, label %middle.block, label %vector.body
middle.block: ; preds = %vector.body
%cmp.n = icmp eq i64 %29, %n.vec
; │└
; │ @ simdloop.jl:75 within `macro expansion'
br i1 %cmp.n, label %L167, label %scalar.ph
scalar.ph: ; preds = %middle.block, %vector.memcheck, %L61.lr.ph
%bc.resume.val = phi i64 [ %n.vec, %middle.block ], [ 0, %L61.lr.ph ], [ 0, %vector.memcheck ]
br label %L61
L61: ; preds = %scalar.ph, %L61
%value_phi1166 = phi i64 [ %bc.resume.val, %scalar.ph ], [ %251, %L61 ]
; │ @ simdloop.jl:77 within `macro expansion' @ /data/esdrd/tqff/tmp/issue.jl:7
; │┌ @ array.jl:743 within `getindex'
%247 = add i64 %reass.mul, %value_phi1166
%248 = getelementptr inbounds float, float addrspace(13)* %35, i64 %247
%249 = load float, float addrspace(13)* %248, align 4
; │└
; │┌ @ float.jl:404 within `*'
%250 = fmul float %249, %140
; │└
; │┌ @ array.jl:743 within `getindex'
%251 = add nuw nsw i64 %value_phi1166, 1
%252 = add i64 %251, %reass.mul
%253 = getelementptr inbounds float, float addrspace(13)* %35, i64 %252
%254 = load float, float addrspace(13)* %253, align 4
; │└
; │┌ @ float.jl:404 within `*'
%255 = fmul float %254, %141
; │└
; │┌ @ array.jl:743 within `getindex'
%256 = add nuw nsw i64 %value_phi1166, 2
%257 = add i64 %256, %reass.mul
%258 = getelementptr inbounds float, float addrspace(13)* %35, i64 %257
%259 = load float, float addrspace(13)* %258, align 4
; │└
; │┌ @ float.jl:404 within `*'
%260 = fmul float %259, %142
; │└
; │┌ @ array.jl:743 within `getindex'
%261 = add nuw nsw i64 %value_phi1166, 3
%262 = add i64 %261, %reass.mul
%263 = getelementptr inbounds float, float addrspace(13)* %35, i64 %262
%264 = load float, float addrspace(13)* %263, align 4
; │└
; │┌ @ float.jl:404 within `*'
%265 = fmul float %264, %143
; │└
; │┌ @ array.jl:743 within `getindex'
%266 = add nuw nsw i64 %value_phi1166, 4
%267 = add i64 %266, %reass.mul
%268 = getelementptr inbounds float, float addrspace(13)* %35, i64 %267
%269 = load float, float addrspace(13)* %268, align 4
; │└
; │┌ @ float.jl:404 within `*'
%270 = fmul float %269, %144
; │└
; │┌ @ array.jl:743 within `getindex'
%271 = add nuw nsw i64 %value_phi1166, 5
%272 = add i64 %271, %reass.mul
%273 = getelementptr inbounds float, float addrspace(13)* %35, i64 %272
%274 = load float, float addrspace(13)* %273, align 4
; │└
; │┌ @ float.jl:404 within `*'
%275 = fmul float %274, %145
; │└
; │┌ @ array.jl:743 within `getindex'
%276 = add nuw i64 %value_phi1166, 6
%277 = add i64 %276, %reass.mul
%278 = getelementptr inbounds float, float addrspace(13)* %35, i64 %277
%279 = load float, float addrspace(13)* %278, align 4
; │└
; │┌ @ float.jl:404 within `*'
%280 = fmul float %279, %146
; │└
; │┌ @ array.jl:743 within `getindex'
%281 = add nuw i64 %value_phi1166, 7
%282 = add i64 %281, %reass.mul
%283 = getelementptr inbounds float, float addrspace(13)* %35, i64 %282
%284 = load float, float addrspace(13)* %283, align 4
; │└
; │┌ @ float.jl:404 within `*'
%285 = fmul float %284, %147
; │└
; │┌ @ array.jl:743 within `getindex'
%286 = add nuw i64 %value_phi1166, 8
%287 = add i64 %286, %reass.mul
%288 = getelementptr inbounds float, float addrspace(13)* %35, i64 %287
%289 = load float, float addrspace(13)* %288, align 4
; │└
; │┌ @ float.jl:404 within `*'
%290 = fmul float %289, %148
; │└
; │┌ @ array.jl:743 within `getindex'
%291 = add i64 %266, %reass.mul48
%292 = getelementptr inbounds float, float addrspace(13)* %35, i64 %291
%293 = load float, float addrspace(13)* %292, align 4
; │└
; │┌ @ float.jl:404 within `*'
%294 = fmul float %293, %140
; │└
; │┌ @ array.jl:743 within `getindex'
%295 = add i64 %266, %reass.mul50
%296 = getelementptr inbounds float, float addrspace(13)* %35, i64 %295
%297 = load float, float addrspace(13)* %296, align 4
; │└
; │┌ @ float.jl:404 within `*'
%298 = fmul float %297, %141
; │└
; │┌ @ array.jl:743 within `getindex'
%299 = add i64 %266, %reass.mul52
%300 = getelementptr inbounds float, float addrspace(13)* %35, i64 %299
%301 = load float, float addrspace(13)* %300, align 4
; │└
; │┌ @ float.jl:404 within `*'
%302 = fmul float %301, %142
; │└
; │┌ @ array.jl:743 within `getindex'
%303 = add i64 %266, %reass.mul54
%304 = getelementptr inbounds float, float addrspace(13)* %35, i64 %303
%305 = load float, float addrspace(13)* %304, align 4
; │└
; │┌ @ float.jl:404 within `*'
%306 = fmul float %305, %143
; │└
; │┌ @ array.jl:743 within `getindex'
%307 = add i64 %266, %reass.mul58
%308 = getelementptr inbounds float, float addrspace(13)* %35, i64 %307
%309 = load float, float addrspace(13)* %308, align 4
; │└
; │┌ @ float.jl:404 within `*'
%310 = fmul float %309, %145
; │└
; │┌ @ array.jl:743 within `getindex'
%311 = add i64 %266, %reass.mul60
%312 = getelementptr inbounds float, float addrspace(13)* %35, i64 %311
%313 = load float, float addrspace(13)* %312, align 4
; │└
; │┌ @ float.jl:404 within `*'
%314 = fmul float %313, %146
; │└
; │┌ @ array.jl:743 within `getindex'
%315 = add i64 %266, %reass.mul62
%316 = getelementptr inbounds float, float addrspace(13)* %35, i64 %315
%317 = load float, float addrspace(13)* %316, align 4
; │└
; │┌ @ float.jl:404 within `*'
%318 = fmul float %317, %147
; │└
; │┌ @ operators.jl:529 within `+' @ float.jl:400
%319 = fadd float %250, %255
%320 = fadd float %319, %260
; ││ @ operators.jl:529 within `+'
; ││┌ @ operators.jl:517 within `afoldl'
; │││┌ @ float.jl:400 within `+'
%321 = fadd float %320, %265
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%322 = fadd float %321, %270
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%323 = fadd float %322, %275
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%324 = fadd float %323, %280
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%325 = fadd float %324, %285
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%326 = fadd float %325, %290
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%327 = fadd float %326, %294
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%328 = fadd float %327, %298
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%329 = fadd float %328, %302
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%330 = fadd float %329, %306
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%331 = fadd float %330, %270
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%332 = fadd float %331, %310
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517
; │││┌ @ float.jl:400 within `+'
%333 = fadd float %332, %314
; │││└
; │││ @ operators.jl:517 within `afoldl' @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:517 @ operators.jl:516
; │││┌ @ float.jl:400 within `+'
%334 = fadd float %333, %318
; │└└└
; │┌ @ array.jl:782 within `setindex!'
%335 = add i64 %266, %reass.mul64
%336 = getelementptr inbounds float, float addrspace(13)* %54, i64 %335
store float %334, float addrspace(13)* %336, align 4
; │└
; │ @ simdloop.jl:75 within `macro expansion'
; │┌ @ int.jl:49 within `<'
%337 = icmp ult i64 %251, %29
; │└
br i1 %337, label %L61, label %L167
L167: ; preds = %L61, %middle.block, %L55
; └
; ┌ @ range.jl:597 within `iterate'
; │┌ @ promotion.jl:403 within `=='
%338 = icmp eq i64 %value_phi867, %23
; └└
br i1 %338, label %L178, label %L32
L178: ; preds = %L167, %L18
; ┌ @ range.jl:597 within `iterate'
; │┌ @ promotion.jl:403 within `=='
%339 = icmp eq i64 %value_phi3, %13
; │└
; │ @ range.jl:598 within `iterate'
; │┌ @ int.jl:53 within `+'
%340 = add i64 %value_phi3, 1
; └└
%indvar.next = add i64 %indvar, 1
br i1 %339, label %L189, label %L18
L189: ; preds = %L178, %top
; @ /data/esdrd/tqff/tmp/issue.jl:13 within `does_vectorize!'
ret %jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 47938844788480 to %jl_value_t*) to %jl_value_t addrspace(10)*)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment