Created
May 27, 2015 20:55
-
-
Save ArchRobison/da1f26b658f8afd91699 to your computer and use it in GitHub Desktop.
Example LLVM code just before pass LICM runs.
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 Attrs: sspreq | |
define void @julia_foo_21080(%jl_value_t*, %jl_value_t*) #3 { | |
top: | |
%2 = bitcast %jl_value_t* %0 to i8**, !dbg !356 | |
%3 = load i8** %2, align 8, !dbg !356, !tbaa %jtbaa_arrayptr | |
%4 = bitcast i8* %3 to float*, !dbg !356 | |
%5 = getelementptr inbounds %jl_value_t* %0, i64 3, i32 0, !dbg !356 | |
%6 = bitcast %jl_value_t** %5 to i64*, !dbg !356 | |
%7 = load i64* %6, align 8, !dbg !356, !tbaa %jtbaa_arraysize | |
%8 = getelementptr inbounds %jl_value_t* %1, i64 6, !dbg !362 | |
%9 = bitcast %jl_value_t* %8 to i64*, !dbg !362 | |
%10 = load i64* %9, align 8, !dbg !362 | |
%11 = icmp sgt i64 %10, 0, !dbg !362 | |
br i1 %11, label %L3.preheader, label %L23, !dbg !362 | |
L3.preheader: ; preds = %top | |
br label %L3, !dbg !362 | |
L3: ; preds = %L3.preheader, %L21 | |
%"#s2.0" = phi i64 [ %12, %L21 ], [ 1, %L3.preheader ] | |
%12 = add i64 %"#s2.0", 1, !dbg !362 | |
%13 = getelementptr %jl_value_t* %1, i64 5, !dbg !364 | |
%14 = bitcast %jl_value_t* %13 to i64*, !dbg !364 | |
%15 = load i64* %14, align 8, !dbg !364 | |
%16 = icmp sgt i64 %15, 0, !dbg !364 | |
%17 = select i1 %16, i64 %15, i64 0, !dbg !364 | |
br label %L9, !dbg !367 | |
L9: ; preds = %L3, %L18 | |
%"#s1.0" = phi i64 [ 0, %L3 ], [ %18, %L18 ] | |
%18 = add i64 %"#s1.0", 1, !dbg !367 | |
%19 = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %17, i64 1), !dbg !368 | |
%20 = extractvalue { i64, i1 } %19, 1, !dbg !368 | |
br i1 %20, label %fail, label %pass, !dbg !368 | |
fail: ; preds = %L9 | |
%21 = load %jl_value_t** @jl_overflow_exception, align 8, !dbg !368 | |
call void @jl_throw_with_superfluous_argument(%jl_value_t* %21, i32 67), !dbg !368 | |
unreachable, !dbg !368 | |
pass: ; preds = %L9 | |
%22 = extractvalue { i64, i1 } %19, 0, !dbg !368 | |
%23 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %22, i64 1), !dbg !368 | |
%24 = extractvalue { i64, i1 } %23, 1, !dbg !368 | |
br i1 %24, label %fail10, label %pass11, !dbg !368 | |
fail10: ; preds = %pass | |
%25 = load %jl_value_t** @jl_overflow_exception, align 8, !dbg !368 | |
call void @jl_throw_with_superfluous_argument(%jl_value_t* %25, i32 67), !dbg !368 | |
unreachable, !dbg !368 | |
pass11: ; preds = %pass | |
%26 = extractvalue { i64, i1 } %23, 0, !dbg !368 | |
%27 = icmp slt i64 %26, 1, !dbg !369 | |
br i1 %27, label %L18, label %if12, !dbg !369 | |
if12: ; preds = %pass11 | |
%28 = add i64 %"#s2.0", -1, !dbg !370 | |
%29 = mul i64 %28, %7, !dbg !370 | |
%30 = getelementptr inbounds %jl_value_t* %1, i64 0, i32 0, !dbg !370 | |
%31 = getelementptr %jl_value_t* %1, i64 1, !dbg !370 | |
%32 = bitcast %jl_value_t* %31 to i64*, !dbg !370 | |
%33 = getelementptr inbounds %jl_value_t* %1, i64 3, !dbg !370 | |
%34 = bitcast %jl_value_t* %33 to i64*, !dbg !370 | |
%35 = add i64 %"#s2.0", -2, !dbg !370 | |
br label %L14 | |
L14: ; preds = %if12, %L14 | |
%"##i#1697.0" = phi i64 [ 0, %if12 ], [ %56, %L14 ] | |
%36 = add i64 %"##i#1697.0", %29, !dbg !370 | |
%37 = getelementptr float* %4, i64 %36, !dbg !370 | |
%38 = load float* %37, align 4, !dbg !370, !tbaa %jtbaa_user, !llvm.mem.parallel_loop_access !372 | |
%39 = load %jl_value_t** %30, align 8, !dbg !370, !tbaa %jtbaa_immut, !llvm.mem.parallel_loop_access !372 | |
%40 = load i64* %32, align 8, !dbg !370, !llvm.mem.parallel_loop_access !372 | |
%41 = load i64* %34, align 8, !dbg !370, !llvm.mem.parallel_loop_access !372 | |
%42 = getelementptr inbounds %jl_value_t* %39, i64 3, i32 0, !dbg !370 | |
%43 = bitcast %jl_value_t** %42 to i64*, !dbg !370 | |
%44 = load i64* %43, align 8, !dbg !370, !tbaa %jtbaa_arraysize, !llvm.mem.parallel_loop_access !372 | |
%45 = add i64 %35, %41, !dbg !370 | |
%46 = mul i64 %45, %44, !dbg !370 | |
%47 = add i64 %"##i#1697.0", -1, !dbg !370 | |
%48 = add i64 %47, %40, !dbg !370 | |
%49 = add i64 %48, %46, !dbg !370 | |
%50 = bitcast %jl_value_t* %39 to i8**, !dbg !370 | |
%51 = load i8** %50, align 8, !dbg !370, !tbaa %jtbaa_arrayptr, !llvm.mem.parallel_loop_access !372 | |
%52 = bitcast i8* %51 to float*, !dbg !370 | |
%53 = getelementptr float* %52, i64 %49, !dbg !370 | |
%54 = load float* %53, align 4, !dbg !370, !tbaa %jtbaa_user, !llvm.mem.parallel_loop_access !372 | |
%55 = fadd float %38, %54, !dbg !370 | |
store float %55, float* %37, align 4, !dbg !370, !tbaa %jtbaa_user, !llvm.mem.parallel_loop_access !372 | |
%56 = add i64 %"##i#1697.0", 1, !dbg !375, !simd_loop !373 | |
%57 = icmp slt i64 %56, %26, !dbg !376 | |
br i1 %57, label %L14, label %L18.loopexit, !dbg !376, !llvm.loop.parallel !373 | |
L18.loopexit: ; preds = %L14 | |
br label %L18 | |
L18: ; preds = %L18.loopexit, %pass11 | |
%58 = icmp eq i64 %"#s1.0", 0, !dbg !377 | |
br i1 %58, label %L21, label %L9, !dbg !377 | |
L21: ; preds = %L18 | |
%.op = add i64 %10, 1, !dbg !378 | |
%59 = select i1 %11, i64 %.op, i64 1, !dbg !378 | |
%60 = icmp eq i64 %12, %59, !dbg !378 | |
br i1 %60, label %L23.loopexit, label %L3, !dbg !378 | |
L23.loopexit: ; preds = %L21 | |
br label %L23 | |
L23: ; preds = %L23.loopexit, %top | |
ret void, !dbg !378 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment