Skip to content

Instantly share code, notes, and snippets.

@ChrisRackauckas
Created August 8, 2016 06:34
Show Gist options
  • Save ChrisRackauckas/982c8671476cb0a1b49f8399cf5103b4 to your computer and use it in GitHub Desktop.
Save ChrisRackauckas/982c8671476cb0a1b49f8399cf5103b4 to your computer and use it in GitHub Desktop.
julia> @code_llvm threadstest1(A,b,k)
define %jl_value_t* @julia_threadstest1_69052(%jl_value_t*, %jl_value_t*, %jl_value_t*) #0 {
top:
%thread_ptr = call i8* asm "movq %fs:0, $0", "=r"() #2
%ptls_i8 = getelementptr i8, i8* %thread_ptr, i64 -2672
%ptls = bitcast i8* %ptls_i8 to %jl_value_t***
%3 = alloca [40 x %jl_value_t*], align 8
%.sub = getelementptr inbounds [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 0
%4 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 33
%5 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 2
%6 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 32
%7 = bitcast %jl_value_t** %4 to i8*
call void @llvm.memset.p0i8.i32(i8* %7, i8 0, i32 56, i32 8, i1 false)
%8 = bitcast [40 x %jl_value_t*]* %3 to i64*
%9 = bitcast %jl_value_t** %5 to i8*
call void @llvm.memset.p0i8.i64(i8* %9, i8 0, i64 240, i32 8, i1 false)
store i64 76, i64* %8, align 8
%10 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 1
%11 = bitcast i8* %ptls_i8 to i64*
%12 = load i64, i64* %11, align 8
%13 = bitcast %jl_value_t** %10 to i64*
store i64 %12, i64* %13, align 8
store %jl_value_t** %.sub, %jl_value_t*** %ptls, align 8
store %jl_value_t* null, %jl_value_t** %6, align 8
%14 = call i64 @julia__length_68870(%jl_value_t* %0) #0
%15 = icmp slt i64 %14, 1
br i1 %15, label %L2, label %if.lr.ph
if.lr.ph: ; preds = %top
%16 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 3
%17 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 4
%18 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 5
%19 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 6
%20 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 7
%21 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 8
%22 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 9
%23 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 10
%24 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 11
%25 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 12
%26 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 13
%27 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 14
%28 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 15
%29 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 16
%30 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 17
%31 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 18
%32 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 19
%33 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 20
%34 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 21
%35 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 22
%36 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 23
%37 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 24
%38 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 25
%39 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 26
%40 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 27
%41 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 28
%42 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 29
%43 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 30
%44 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 31
%45 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 39
%46 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 38
%47 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 37
%48 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 36
%49 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 35
%50 = getelementptr [40 x %jl_value_t*], [40 x %jl_value_t*]* %3, i64 0, i64 34
%51 = bitcast %jl_value_t* %0 to double**
%52 = load double*, double** %51, align 8
%53 = bitcast %jl_value_t* %2 to %jl_value_t***
%54 = bitcast %jl_value_t* %1 to double**
br label %if
L2.loopexit: ; preds = %pass.60
br label %L2
L2: ; preds = %L2.loopexit, %top
%55 = load i64, i64* %13, align 8
store i64 %55, i64* %11, align 8
ret %jl_value_t* %0
if: ; preds = %if.lr.ph, %pass.60
%"#temp#.065" = phi i64 [ 1, %if.lr.ph ], [ %282, %pass.60 ]
%56 = load %jl_value_t**, %jl_value_t*** %53, align 8
%57 = load %jl_value_t*, %jl_value_t** %56, align 8
%58 = icmp eq %jl_value_t* %57, null
br i1 %58, label %fail, label %pass
fail: ; preds = %if
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass: ; preds = %if
store %jl_value_t* %57, %jl_value_t** %5, align 8
%59 = load %jl_value_t**, %jl_value_t*** %53, align 8
%60 = getelementptr %jl_value_t*, %jl_value_t** %59, i64 1
%61 = load %jl_value_t*, %jl_value_t** %60, align 8
%62 = icmp eq %jl_value_t* %61, null
br i1 %62, label %fail3, label %pass.4
fail3: ; preds = %pass
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.4: ; preds = %pass
store %jl_value_t* %61, %jl_value_t** %16, align 8
%63 = load %jl_value_t**, %jl_value_t*** %53, align 8
%64 = getelementptr %jl_value_t*, %jl_value_t** %63, i64 2
%65 = load %jl_value_t*, %jl_value_t** %64, align 8
%66 = icmp eq %jl_value_t* %65, null
br i1 %66, label %fail5, label %pass.6
fail5: ; preds = %pass.4
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.6: ; preds = %pass.4
store %jl_value_t* %65, %jl_value_t** %17, align 8
%67 = load %jl_value_t**, %jl_value_t*** %53, align 8
%68 = getelementptr %jl_value_t*, %jl_value_t** %67, i64 4
%69 = load %jl_value_t*, %jl_value_t** %68, align 8
%70 = icmp eq %jl_value_t* %69, null
br i1 %70, label %fail7, label %pass.8
fail7: ; preds = %pass.6
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.8: ; preds = %pass.6
%71 = add i64 %"#temp#.065", -1
%72 = getelementptr double, double* %52, i64 %71
%73 = load double, double* %72, align 8
%74 = load double*, double** %54, align 8
%75 = load double, double* %74, align 8
%76 = getelementptr double, double* %74, i64 1
%77 = load double, double* %76, align 8
%78 = bitcast %jl_value_t* %57 to double**
%79 = load double*, double** %78, align 8
%80 = getelementptr double, double* %79, i64 %71
%81 = load double, double* %80, align 8
%82 = load double*, double** %54, align 8
%83 = getelementptr double, double* %82, i64 2
%84 = load double, double* %83, align 8
%85 = bitcast %jl_value_t* %61 to double**
%86 = load double*, double** %85, align 8
%87 = getelementptr double, double* %86, i64 %71
%88 = load double, double* %87, align 8
%89 = load double*, double** %54, align 8
%90 = getelementptr double, double* %89, i64 4
%91 = load double, double* %90, align 8
%92 = fmul double %75, %81
%93 = fmul double %77, %88
%94 = fadd double %92, %93
%95 = bitcast %jl_value_t* %65 to double**
%96 = load double*, double** %95, align 8
%97 = getelementptr double, double* %96, i64 %71
%98 = load double, double* %97, align 8
%99 = fmul double %84, %98
%100 = fadd double %94, %99
store %jl_value_t* %69, %jl_value_t** %18, align 8
%101 = bitcast %jl_value_t* %69 to double**
%102 = load double*, double** %101, align 8
%103 = getelementptr double, double* %102, i64 %71
%104 = load double, double* %103, align 8
%105 = fmul double %91, %104
%106 = fadd double %100, %105
%107 = call double @julia_sin_69053(double %106) #0
%108 = load %jl_value_t**, %jl_value_t*** %53, align 8
%109 = getelementptr %jl_value_t*, %jl_value_t** %108, i64 6
%110 = load %jl_value_t*, %jl_value_t** %109, align 8
%111 = icmp eq %jl_value_t* %110, null
br i1 %111, label %fail9, label %pass.10
fail9: ; preds = %pass.8
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.10: ; preds = %pass.8
store %jl_value_t* %110, %jl_value_t** %19, align 8
%112 = load %jl_value_t**, %jl_value_t*** %53, align 8
%113 = getelementptr %jl_value_t*, %jl_value_t** %112, i64 7
%114 = load %jl_value_t*, %jl_value_t** %113, align 8
%115 = icmp eq %jl_value_t* %114, null
br i1 %115, label %fail11, label %pass.12
fail11: ; preds = %pass.10
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.12: ; preds = %pass.10
store %jl_value_t* %114, %jl_value_t** %20, align 8
%116 = load %jl_value_t**, %jl_value_t*** %53, align 8
%117 = getelementptr %jl_value_t*, %jl_value_t** %116, i64 9
%118 = load %jl_value_t*, %jl_value_t** %117, align 8
%119 = icmp eq %jl_value_t* %118, null
br i1 %119, label %fail13, label %pass.14
fail13: ; preds = %pass.12
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.14: ; preds = %pass.12
store %jl_value_t* %118, %jl_value_t** %21, align 8
%120 = load %jl_value_t**, %jl_value_t*** %53, align 8
%121 = getelementptr %jl_value_t*, %jl_value_t** %120, i64 10
%122 = load %jl_value_t*, %jl_value_t** %121, align 8
%123 = icmp eq %jl_value_t* %122, null
br i1 %123, label %fail15, label %pass.16
fail15: ; preds = %pass.14
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.16: ; preds = %pass.14
%124 = load double*, double** %54, align 8
%125 = getelementptr double, double* %124, i64 6
%126 = load double, double* %125, align 8
%127 = getelementptr double, double* %124, i64 7
%128 = load double, double* %127, align 8
%129 = bitcast %jl_value_t* %110 to double**
%130 = load double*, double** %129, align 8
%131 = getelementptr double, double* %130, i64 %71
%132 = load double, double* %131, align 8
%133 = load double*, double** %54, align 8
%134 = getelementptr double, double* %133, i64 9
%135 = load double, double* %134, align 8
%136 = bitcast %jl_value_t* %114 to double**
%137 = load double*, double** %136, align 8
%138 = getelementptr double, double* %137, i64 %71
%139 = load double, double* %138, align 8
%140 = load double*, double** %54, align 8
%141 = getelementptr double, double* %140, i64 10
%142 = load double, double* %141, align 8
%143 = fmul double %126, %132
%144 = fmul double %128, %139
%145 = fadd double %143, %144
%146 = bitcast %jl_value_t* %118 to double**
%147 = load double*, double** %146, align 8
%148 = getelementptr double, double* %147, i64 %71
%149 = load double, double* %148, align 8
%150 = fmul double %135, %149
%151 = fadd double %145, %150
store %jl_value_t* %122, %jl_value_t** %22, align 8
%152 = bitcast %jl_value_t* %122 to double**
%153 = load double*, double** %152, align 8
%154 = getelementptr double, double* %153, i64 %71
%155 = load double, double* %154, align 8
%156 = fmul double %142, %155
%157 = fadd double %151, %156
%158 = call double inttoptr (i64 140511618171504 to double (double)*)(double %157)
%159 = load %jl_value_t**, %jl_value_t*** %53, align 8
%160 = getelementptr %jl_value_t*, %jl_value_t** %159, i64 11
%161 = load %jl_value_t*, %jl_value_t** %160, align 8
%162 = icmp eq %jl_value_t* %161, null
br i1 %162, label %fail17, label %pass.18
fail17: ; preds = %pass.16
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.18: ; preds = %pass.16
store %jl_value_t* %161, %jl_value_t** %23, align 8
%163 = load %jl_value_t**, %jl_value_t*** %53, align 8
%164 = getelementptr %jl_value_t*, %jl_value_t** %163, i64 13
%165 = load %jl_value_t*, %jl_value_t** %164, align 8
%166 = icmp eq %jl_value_t* %165, null
br i1 %166, label %fail19, label %pass.20
fail19: ; preds = %pass.18
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.20: ; preds = %pass.18
store %jl_value_t* %165, %jl_value_t** %24, align 8
%167 = load %jl_value_t**, %jl_value_t*** %53, align 8
%168 = getelementptr %jl_value_t*, %jl_value_t** %167, i64 14
%169 = load %jl_value_t*, %jl_value_t** %168, align 8
%170 = icmp eq %jl_value_t* %169, null
br i1 %170, label %fail21, label %pass.22
fail21: ; preds = %pass.20
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.22: ; preds = %pass.20
store %jl_value_t* %169, %jl_value_t** %25, align 8
%171 = load %jl_value_t**, %jl_value_t*** %53, align 8
%172 = getelementptr %jl_value_t*, %jl_value_t** %171, i64 15
%173 = load %jl_value_t*, %jl_value_t** %172, align 8
%174 = icmp eq %jl_value_t* %173, null
br i1 %174, label %fail23, label %pass.24
fail23: ; preds = %pass.22
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.24: ; preds = %pass.22
%175 = load double*, double** %54, align 8
%176 = getelementptr double, double* %175, i64 11
%177 = load double, double* %176, align 8
%178 = getelementptr double, double* %175, i64 13
%179 = load double, double* %178, align 8
%180 = bitcast %jl_value_t* %161 to double**
%181 = load double*, double** %180, align 8
%182 = getelementptr double, double* %181, i64 %71
%183 = load double, double* %182, align 8
%184 = load double*, double** %54, align 8
%185 = getelementptr double, double* %184, i64 14
%186 = load double, double* %185, align 8
%187 = bitcast %jl_value_t* %165 to double**
%188 = load double*, double** %187, align 8
%189 = getelementptr double, double* %188, i64 %71
%190 = load double, double* %189, align 8
%191 = load double*, double** %54, align 8
%192 = getelementptr double, double* %191, i64 15
%193 = load double, double* %192, align 8
%194 = fmul double %177, %183
%195 = fmul double %179, %190
%196 = fadd double %194, %195
%197 = bitcast %jl_value_t* %169 to double**
%198 = load double*, double** %197, align 8
%199 = getelementptr double, double* %198, i64 %71
%200 = load double, double* %199, align 8
%201 = fmul double %186, %200
%202 = fadd double %196, %201
store %jl_value_t* %173, %jl_value_t** %26, align 8
%203 = bitcast %jl_value_t* %173 to double**
%204 = load double*, double** %203, align 8
%205 = getelementptr double, double* %204, i64 %71
%206 = load double, double* %205, align 8
%207 = fmul double %193, %206
%208 = fadd double %202, %207
%209 = call double inttoptr (i64 140511618213248 to double (double)*)(double %208)
%210 = load %jl_value_t**, %jl_value_t*** %53, align 8
%211 = getelementptr %jl_value_t*, %jl_value_t** %210, i64 17
%212 = load %jl_value_t*, %jl_value_t** %211, align 8
%213 = icmp eq %jl_value_t* %212, null
br i1 %213, label %fail25, label %pass.26
fail25: ; preds = %pass.24
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.26: ; preds = %pass.24
store %jl_value_t* %212, %jl_value_t** %27, align 8
%214 = load %jl_value_t**, %jl_value_t*** %53, align 8
%215 = getelementptr %jl_value_t*, %jl_value_t** %214, i64 18
%216 = load %jl_value_t*, %jl_value_t** %215, align 8
%217 = icmp eq %jl_value_t* %216, null
br i1 %217, label %fail27, label %pass.28
fail27: ; preds = %pass.26
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.28: ; preds = %pass.26
store %jl_value_t* %216, %jl_value_t** %28, align 8
%218 = load %jl_value_t**, %jl_value_t*** %53, align 8
%219 = getelementptr %jl_value_t*, %jl_value_t** %218, i64 19
%220 = load %jl_value_t*, %jl_value_t** %219, align 8
%221 = icmp eq %jl_value_t* %220, null
br i1 %221, label %fail29, label %pass.30
fail29: ; preds = %pass.28
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.30: ; preds = %pass.28
store %jl_value_t* %220, %jl_value_t** %29, align 8
%222 = load %jl_value_t**, %jl_value_t*** %53, align 8
%223 = getelementptr %jl_value_t*, %jl_value_t** %222, i64 20
%224 = load %jl_value_t*, %jl_value_t** %223, align 8
%225 = icmp eq %jl_value_t* %224, null
br i1 %225, label %fail31, label %pass.32
fail31: ; preds = %pass.30
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.32: ; preds = %pass.30
store %jl_value_t* %224, %jl_value_t** %30, align 8
%226 = load %jl_value_t**, %jl_value_t*** %53, align 8
%227 = getelementptr %jl_value_t*, %jl_value_t** %226, i64 21
%228 = load %jl_value_t*, %jl_value_t** %227, align 8
%229 = icmp eq %jl_value_t* %228, null
br i1 %229, label %fail33, label %pass.34
fail33: ; preds = %pass.32
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.34: ; preds = %pass.32
store %jl_value_t* %228, %jl_value_t** %31, align 8
%230 = load %jl_value_t**, %jl_value_t*** %53, align 8
%231 = getelementptr %jl_value_t*, %jl_value_t** %230, i64 22
%232 = load %jl_value_t*, %jl_value_t** %231, align 8
%233 = icmp eq %jl_value_t* %232, null
br i1 %233, label %fail35, label %pass.36
fail35: ; preds = %pass.34
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.36: ; preds = %pass.34
store %jl_value_t* %232, %jl_value_t** %32, align 8
%234 = load %jl_value_t**, %jl_value_t*** %53, align 8
%235 = getelementptr %jl_value_t*, %jl_value_t** %234, i64 23
%236 = load %jl_value_t*, %jl_value_t** %235, align 8
%237 = icmp eq %jl_value_t* %236, null
br i1 %237, label %fail37, label %pass.38
fail37: ; preds = %pass.36
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.38: ; preds = %pass.36
store %jl_value_t* %236, %jl_value_t** %33, align 8
%238 = load %jl_value_t**, %jl_value_t*** %53, align 8
%239 = getelementptr %jl_value_t*, %jl_value_t** %238, i64 24
%240 = load %jl_value_t*, %jl_value_t** %239, align 8
%241 = icmp eq %jl_value_t* %240, null
br i1 %241, label %fail39, label %pass.40
fail39: ; preds = %pass.38
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.40: ; preds = %pass.38
store %jl_value_t* %240, %jl_value_t** %34, align 8
%242 = load %jl_value_t**, %jl_value_t*** %53, align 8
%243 = getelementptr %jl_value_t*, %jl_value_t** %242, i64 25
%244 = load %jl_value_t*, %jl_value_t** %243, align 8
%245 = icmp eq %jl_value_t* %244, null
br i1 %245, label %fail41, label %pass.42
fail41: ; preds = %pass.40
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.42: ; preds = %pass.40
store %jl_value_t* %244, %jl_value_t** %35, align 8
%246 = load %jl_value_t**, %jl_value_t*** %53, align 8
%247 = getelementptr %jl_value_t*, %jl_value_t** %246, i64 26
%248 = load %jl_value_t*, %jl_value_t** %247, align 8
%249 = icmp eq %jl_value_t* %248, null
br i1 %249, label %fail43, label %pass.44
fail43: ; preds = %pass.42
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.44: ; preds = %pass.42
store %jl_value_t* %248, %jl_value_t** %36, align 8
%250 = load %jl_value_t**, %jl_value_t*** %53, align 8
%251 = getelementptr %jl_value_t*, %jl_value_t** %250, i64 27
%252 = load %jl_value_t*, %jl_value_t** %251, align 8
%253 = icmp eq %jl_value_t* %252, null
br i1 %253, label %fail45, label %pass.46
fail45: ; preds = %pass.44
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.46: ; preds = %pass.44
store %jl_value_t* %252, %jl_value_t** %37, align 8
%254 = load %jl_value_t**, %jl_value_t*** %53, align 8
%255 = getelementptr %jl_value_t*, %jl_value_t** %254, i64 28
%256 = load %jl_value_t*, %jl_value_t** %255, align 8
%257 = icmp eq %jl_value_t* %256, null
br i1 %257, label %fail47, label %pass.48
fail47: ; preds = %pass.46
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.48: ; preds = %pass.46
store %jl_value_t* %256, %jl_value_t** %38, align 8
%258 = load %jl_value_t**, %jl_value_t*** %53, align 8
%259 = getelementptr %jl_value_t*, %jl_value_t** %258, i64 29
%260 = load %jl_value_t*, %jl_value_t** %259, align 8
%261 = icmp eq %jl_value_t* %260, null
br i1 %261, label %fail49, label %pass.50
fail49: ; preds = %pass.48
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.50: ; preds = %pass.48
store %jl_value_t* %260, %jl_value_t** %39, align 8
%262 = load %jl_value_t**, %jl_value_t*** %53, align 8
%263 = getelementptr %jl_value_t*, %jl_value_t** %262, i64 30
%264 = load %jl_value_t*, %jl_value_t** %263, align 8
%265 = icmp eq %jl_value_t* %264, null
br i1 %265, label %fail51, label %pass.52
fail51: ; preds = %pass.50
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.52: ; preds = %pass.50
store %jl_value_t* %264, %jl_value_t** %40, align 8
%266 = load %jl_value_t**, %jl_value_t*** %53, align 8
%267 = getelementptr %jl_value_t*, %jl_value_t** %266, i64 31
%268 = load %jl_value_t*, %jl_value_t** %267, align 8
%269 = icmp eq %jl_value_t* %268, null
br i1 %269, label %fail53, label %pass.54
fail53: ; preds = %pass.52
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.54: ; preds = %pass.52
store %jl_value_t* %268, %jl_value_t** %41, align 8
%270 = load %jl_value_t**, %jl_value_t*** %53, align 8
%271 = getelementptr %jl_value_t*, %jl_value_t** %270, i64 32
%272 = load %jl_value_t*, %jl_value_t** %271, align 8
%273 = icmp eq %jl_value_t* %272, null
br i1 %273, label %fail55, label %pass.56
fail55: ; preds = %pass.54
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.56: ; preds = %pass.54
store %jl_value_t* %272, %jl_value_t** %42, align 8
%274 = load %jl_value_t**, %jl_value_t*** %53, align 8
%275 = getelementptr %jl_value_t*, %jl_value_t** %274, i64 33
%276 = load %jl_value_t*, %jl_value_t** %275, align 8
%277 = icmp eq %jl_value_t* %276, null
br i1 %277, label %fail57, label %pass.58
fail57: ; preds = %pass.56
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.58: ; preds = %pass.56
store %jl_value_t* %276, %jl_value_t** %43, align 8
%278 = load %jl_value_t**, %jl_value_t*** %53, align 8
%279 = getelementptr %jl_value_t*, %jl_value_t** %278, i64 34
%280 = load %jl_value_t*, %jl_value_t** %279, align 8
%281 = icmp eq %jl_value_t* %280, null
br i1 %281, label %fail59, label %pass.60
fail59: ; preds = %pass.58
call void @jl_throw(%jl_value_t* inttoptr (i64 140512817729960 to %jl_value_t*))
unreachable
pass.60: ; preds = %pass.58
%282 = add i64 %"#temp#.065", 1
%283 = load double*, double** %54, align 8
%284 = getelementptr double, double* %283, i64 17
%285 = load double, double* %284, align 8
%286 = getelementptr double, double* %283, i64 18
%287 = load double, double* %286, align 8
%288 = bitcast %jl_value_t* %212 to double**
%289 = load double*, double** %288, align 8
%290 = getelementptr double, double* %289, i64 %71
%291 = load double, double* %290, align 8
%292 = load double*, double** %54, align 8
%293 = getelementptr double, double* %292, i64 19
%294 = load double, double* %293, align 8
%295 = bitcast %jl_value_t* %216 to double**
%296 = load double*, double** %295, align 8
%297 = getelementptr double, double* %296, i64 %71
%298 = load double, double* %297, align 8
%299 = load double*, double** %54, align 8
%300 = getelementptr double, double* %299, i64 20
%301 = load double, double* %300, align 8
%302 = fmul double %285, %291
%303 = fmul double %287, %298
%304 = fadd double %302, %303
%305 = bitcast %jl_value_t* %220 to double**
%306 = load double*, double** %305, align 8
%307 = getelementptr double, double* %306, i64 %71
%308 = load double, double* %307, align 8
%309 = fmul double %294, %308
%310 = fadd double %304, %309
%311 = bitcast %jl_value_t* %224 to double**
%312 = load double*, double** %311, align 8
%313 = getelementptr double, double* %312, i64 %71
%314 = load double, double* %313, align 8
%315 = fmul double %301, %314
%316 = fadd double %310, %315
%317 = load double*, double** %54, align 8
%318 = getelementptr double, double* %317, i64 21
%319 = load double, double* %318, align 8
%320 = getelementptr double, double* %317, i64 22
%321 = load double, double* %320, align 8
%322 = bitcast %jl_value_t* %228 to double**
%323 = load double*, double** %322, align 8
%324 = getelementptr double, double* %323, i64 %71
%325 = load double, double* %324, align 8
%326 = load double*, double** %54, align 8
%327 = getelementptr double, double* %326, i64 23
%328 = load double, double* %327, align 8
%329 = bitcast %jl_value_t* %232 to double**
%330 = load double*, double** %329, align 8
%331 = getelementptr double, double* %330, i64 %71
%332 = load double, double* %331, align 8
%333 = load double*, double** %54, align 8
%334 = getelementptr double, double* %333, i64 24
%335 = load double, double* %334, align 8
%336 = fmul double %319, %325
%337 = fmul double %321, %332
%338 = fadd double %336, %337
%339 = bitcast %jl_value_t* %236 to double**
%340 = load double*, double** %339, align 8
%341 = getelementptr double, double* %340, i64 %71
%342 = load double, double* %341, align 8
%343 = fmul double %328, %342
%344 = fadd double %338, %343
%345 = bitcast %jl_value_t* %240 to double**
%346 = load double*, double** %345, align 8
%347 = getelementptr double, double* %346, i64 %71
%348 = load double, double* %347, align 8
%349 = fmul double %335, %348
%350 = fadd double %344, %349
%351 = load double*, double** %54, align 8
%352 = getelementptr double, double* %351, i64 25
%353 = load double, double* %352, align 8
%354 = getelementptr double, double* %351, i64 26
%355 = load double, double* %354, align 8
%356 = bitcast %jl_value_t* %244 to double**
%357 = load double*, double** %356, align 8
%358 = getelementptr double, double* %357, i64 %71
%359 = load double, double* %358, align 8
%360 = load double*, double** %54, align 8
%361 = getelementptr double, double* %360, i64 27
%362 = load double, double* %361, align 8
%363 = bitcast %jl_value_t* %248 to double**
%364 = load double*, double** %363, align 8
%365 = getelementptr double, double* %364, i64 %71
%366 = load double, double* %365, align 8
%367 = load double*, double** %54, align 8
%368 = getelementptr double, double* %367, i64 28
%369 = load double, double* %368, align 8
%370 = fmul double %353, %359
%371 = fmul double %355, %366
%372 = fadd double %370, %371
%373 = bitcast %jl_value_t* %252 to double**
%374 = load double*, double** %373, align 8
%375 = getelementptr double, double* %374, i64 %71
%376 = load double, double* %375, align 8
%377 = fmul double %362, %376
%378 = fadd double %372, %377
%379 = bitcast %jl_value_t* %256 to double**
%380 = load double*, double** %379, align 8
%381 = getelementptr double, double* %380, i64 %71
%382 = load double, double* %381, align 8
%383 = fmul double %369, %382
%384 = fadd double %378, %383
%385 = load double*, double** %54, align 8
%386 = getelementptr double, double* %385, i64 29
%387 = load double, double* %386, align 8
%388 = getelementptr double, double* %385, i64 30
%389 = load double, double* %388, align 8
%390 = bitcast %jl_value_t* %260 to double**
%391 = load double*, double** %390, align 8
%392 = getelementptr double, double* %391, i64 %71
%393 = load double, double* %392, align 8
%394 = load double*, double** %54, align 8
%395 = getelementptr double, double* %394, i64 31
%396 = load double, double* %395, align 8
%397 = bitcast %jl_value_t* %264 to double**
%398 = load double*, double** %397, align 8
%399 = getelementptr double, double* %398, i64 %71
%400 = load double, double* %399, align 8
%401 = load double*, double** %54, align 8
%402 = getelementptr double, double* %401, i64 32
%403 = load double, double* %402, align 8
%404 = fmul double %387, %393
%405 = fmul double %389, %400
%406 = fadd double %404, %405
%407 = bitcast %jl_value_t* %268 to double**
%408 = load double*, double** %407, align 8
%409 = getelementptr double, double* %408, i64 %71
%410 = load double, double* %409, align 8
%411 = fmul double %396, %410
%412 = fadd double %406, %411
%413 = bitcast %jl_value_t* %272 to double**
%414 = load double*, double** %413, align 8
%415 = getelementptr double, double* %414, i64 %71
%416 = load double, double* %415, align 8
%417 = fmul double %403, %416
%418 = fadd double %412, %417
%419 = load double*, double** %54, align 8
%420 = getelementptr double, double* %419, i64 33
%421 = load double, double* %420, align 8
%422 = getelementptr double, double* %419, i64 34
%423 = load double, double* %422, align 8
%424 = bitcast %jl_value_t* %276 to double**
%425 = load double*, double** %424, align 8
%426 = getelementptr double, double* %425, i64 %71
%427 = load double, double* %426, align 8
%428 = fmul double %421, %427
store %jl_value_t* %280, %jl_value_t** %44, align 8
%429 = bitcast %jl_value_t* %280 to double**
%430 = load double*, double** %429, align 8
%431 = getelementptr double, double* %430, i64 %71
%432 = load double, double* %431, align 8
%433 = fmul double %423, %432
%434 = fadd double %428, %433
%435 = fadd double %107, %158
%436 = fadd double %435, %209
store %jl_value_t* inttoptr (i64 140512825693400 to %jl_value_t*), %jl_value_t** %4, align 8
%437 = call %jl_value_t* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16)
%438 = getelementptr inbounds %jl_value_t, %jl_value_t* %437, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140512815964912 to %jl_value_t*), %jl_value_t** %438, align 8
%439 = bitcast %jl_value_t* %437 to double*
store double %436, double* %439, align 8
store %jl_value_t* %437, %jl_value_t** %50, align 8
%440 = call %jl_value_t* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16)
%441 = getelementptr inbounds %jl_value_t, %jl_value_t* %440, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140512815964912 to %jl_value_t*), %jl_value_t** %441, align 8
%442 = bitcast %jl_value_t* %440 to double*
store double %316, double* %442, align 8
store %jl_value_t* %440, %jl_value_t** %49, align 8
%443 = call %jl_value_t* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16)
%444 = getelementptr inbounds %jl_value_t, %jl_value_t* %443, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140512815964912 to %jl_value_t*), %jl_value_t** %444, align 8
%445 = bitcast %jl_value_t* %443 to double*
store double %350, double* %445, align 8
store %jl_value_t* %443, %jl_value_t** %48, align 8
%446 = call %jl_value_t* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16)
%447 = getelementptr inbounds %jl_value_t, %jl_value_t* %446, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140512815964912 to %jl_value_t*), %jl_value_t** %447, align 8
%448 = bitcast %jl_value_t* %446 to double*
store double %384, double* %448, align 8
store %jl_value_t* %446, %jl_value_t** %47, align 8
%449 = call %jl_value_t* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16)
%450 = getelementptr inbounds %jl_value_t, %jl_value_t* %449, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140512815964912 to %jl_value_t*), %jl_value_t** %450, align 8
%451 = bitcast %jl_value_t* %449 to double*
store double %418, double* %451, align 8
store %jl_value_t* %449, %jl_value_t** %46, align 8
%452 = call %jl_value_t* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1432, i32 16)
%453 = getelementptr inbounds %jl_value_t, %jl_value_t* %452, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140512815964912 to %jl_value_t*), %jl_value_t** %453, align 8
%454 = bitcast %jl_value_t* %452 to double*
store double %434, double* %454, align 8
store %jl_value_t* %452, %jl_value_t** %45, align 8
%455 = call %jl_value_t* @julia_afoldl_69054(%jl_value_t* inttoptr (i64 140512867808456 to %jl_value_t*), %jl_value_t** %4, i32 7)
store %jl_value_t* %455, %jl_value_t** %6, align 8
%456 = bitcast %jl_value_t* %455 to double*
%457 = load double, double* %456, align 16
%458 = fadd double %73, %457
store double %458, double* %72, align 8
%459 = icmp eq i64 %"#temp#.065", %14
br i1 %459, label %L2.loopexit, label %if
}
julia> @code_llvm threadstest2(A,b,k)
define %jl_value_t* @julia_threadstest2_69058(%jl_value_t*, %jl_value_t*, %jl_value_t*) #0 {
top:
%thread_ptr = call i8* asm "movq %fs:0, $0", "=r"() #2
%ptls_i8 = getelementptr i8, i8* %thread_ptr, i64 -2672
%ptls = bitcast i8* %ptls_i8 to %jl_value_t***
%3 = alloca [6 x %jl_value_t*], align 8
%.sub = getelementptr inbounds [6 x %jl_value_t*], [6 x %jl_value_t*]* %3, i64 0, i64 0
%4 = getelementptr [6 x %jl_value_t*], [6 x %jl_value_t*]* %3, i64 0, i64 5
%5 = getelementptr [6 x %jl_value_t*], [6 x %jl_value_t*]* %3, i64 0, i64 2
%6 = getelementptr [6 x %jl_value_t*], [6 x %jl_value_t*]* %3, i64 0, i64 3
%7 = getelementptr [6 x %jl_value_t*], [6 x %jl_value_t*]* %3, i64 0, i64 4
%8 = bitcast %jl_value_t** %4 to i64*
store i64 0, i64* %8, align 8
%9 = bitcast [6 x %jl_value_t*]* %3 to i64*
%10 = bitcast %jl_value_t** %5 to i8*
call void @llvm.memset.p0i8.i64(i8* %10, i8 0, i64 16, i32 8, i1 false)
store i64 8, i64* %9, align 8
%11 = getelementptr [6 x %jl_value_t*], [6 x %jl_value_t*]* %3, i64 0, i64 1
%12 = bitcast i8* %ptls_i8 to i64*
%13 = load i64, i64* %12, align 8
%14 = bitcast %jl_value_t** %11 to i64*
store i64 %13, i64* %14, align 8
store %jl_value_t** %.sub, %jl_value_t*** %ptls, align 8
store %jl_value_t* null, %jl_value_t** %7, align 8
%15 = call %jl_value_t* @jl_gc_pool_alloc(i8* %ptls_i8, i32 1456, i32 32)
%16 = getelementptr inbounds %jl_value_t, %jl_value_t* %15, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140512900312528 to %jl_value_t*), %jl_value_t** %16, align 8
store %jl_value_t* %15, %jl_value_t** %5, align 8
store %jl_value_t* %0, %jl_value_t** %6, align 8
%17 = getelementptr inbounds %jl_value_t, %jl_value_t* %15, i64 0, i32 0
store %jl_value_t* %0, %jl_value_t** %17, align 8
%18 = getelementptr inbounds %jl_value_t, %jl_value_t* %15, i64 1, i32 0
%19 = getelementptr inbounds %jl_value_t, %jl_value_t* %15, i64 2, i32 0
%20 = bitcast %jl_value_t** %18 to i64*
store i64 0, i64* %20, align 8
store %jl_value_t* %1, %jl_value_t** %18, align 8
store %jl_value_t* %2, %jl_value_t** %19, align 8
store %jl_value_t* %15, %jl_value_t** %4, align 8
%21 = call %jl_value_t* @jl_f_svec(%jl_value_t* null, %jl_value_t** %4, i32 1)
store %jl_value_t* %21, %jl_value_t** %7, align 8
call void inttoptr (i64 140521647461760 to void (%jl_value_t*)*)(%jl_value_t* %21)
%22 = load i64, i64* %14, align 8
store i64 %22, i64* %12, align 8
ret %jl_value_t* %0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment