Skip to content

Instantly share code, notes, and snippets.

@singam-sanjay
Created May 11, 2017 11:59
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 singam-sanjay/af88c6c91dd9ef46aba593923178d907 to your computer and use it in GitHub Desktop.
Save singam-sanjay/af88c6c91dd9ef46aba593923178d907 to your computer and use it in GitHub Desktop.
LLVM IR of add_mat
; ModuleID = 'add_mat'
source_filename = "add_mat"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: sspstrong
define void @julia_add_mat_64414(i8** dereferenceable(40), i8** dereferenceable(40)) #0 !dbg !5 {
top:
br label %top.split, !dbg !22
top.split: ; preds = %top
call void @llvm.dbg.value(metadata i8** null, i64 0, metadata !15, metadata !23), !dbg !22
call void @llvm.dbg.value(metadata i8** null, i64 0, metadata !16, metadata !23), !dbg !22
call void @llvm.dbg.value(metadata i8** %0, i64 0, metadata !15, metadata !23), !dbg !22
%2 = bitcast i8** %0 to double**
%3 = load double*, double** %2, align 8, !tbaa !24
%4 = getelementptr i8*, i8** %0, i64 3
%5 = bitcast i8** %4 to i64*
%6 = load i64, i64* %5, align 8, !tbaa !24
call void @llvm.dbg.value(metadata i8** %1, i64 0, metadata !16, metadata !23), !dbg !22
%7 = bitcast i8** %1 to double**
%8 = load double*, double** %7, align 8, !tbaa !24
%9 = getelementptr i8*, i8** %1, i64 3
%10 = bitcast i8** %9 to i64*
%11 = load i64, i64* %10, align 8, !tbaa !24
%12 = getelementptr i8*, i8** %0, i64 4, !dbg !22
%13 = bitcast i8** %12 to i64*, !dbg !22
%14 = load i64, i64* %13, align 8, !dbg !22, !tbaa !24
call void @llvm.dbg.value(metadata i64 %6, i64 0, metadata !20, metadata !23), !dbg !22
call void @llvm.dbg.value(metadata i64 %6, i64 0, metadata !20, metadata !23), !dbg !22
%15 = icmp sgt i64 %6, 0, !dbg !27
%16 = select i1 %15, i64 %6, i64 0, !dbg !27
%17 = icmp slt i64 %6, 1, !dbg !27
br i1 %17, label %L33, label %if.lr.ph, !dbg !27
if.lr.ph: ; preds = %top.split
br label %if, !dbg !27
L20.L11.loopexit_crit_edge: ; preds = %if3
br label %L11.loopexit, !dbg !28
L11.loopexit: ; preds = %L20.L11.loopexit_crit_edge, %if
%18 = icmp eq i64 %"#temp#1.010", %16, !dbg !27
br i1 %18, label %L11.L33_crit_edge, label %if, !dbg !27
if: ; preds = %if.lr.ph, %L11.loopexit
%"#temp#1.010" = phi i64 [ 1, %if.lr.ph ], [ %19, %L11.loopexit ]
%19 = add i64 %"#temp#1.010", 1, !dbg !27
call void @llvm.dbg.value(metadata i64 %14, i64 0, metadata !21, metadata !23), !dbg !22
call void @llvm.dbg.value(metadata i64 %14, i64 0, metadata !21, metadata !23), !dbg !22
%20 = icmp sgt i64 %14, 0, !dbg !28
%21 = select i1 %20, i64 %14, i64 0, !dbg !28
%22 = icmp slt i64 %14, 1, !dbg !28
br i1 %22, label %L11.loopexit, label %if3.lr.ph, !dbg !28
if3.lr.ph: ; preds = %if
br label %if3, !dbg !28
L11.L33_crit_edge: ; preds = %L11.loopexit
br label %L33, !dbg !27
L33: ; preds = %L11.L33_crit_edge, %top.split
ret void, !dbg !29
if3: ; preds = %if3.lr.ph, %if3
%"#temp#.09" = phi i64 [ 1, %if3.lr.ph ], [ %23, %if3 ]
%23 = add i64 %"#temp#.09", 1, !dbg !28
call void @llvm.dbg.value(metadata i64 %"#temp#1.010", i64 0, metadata !19, metadata !23), !dbg !22
call void @llvm.dbg.value(metadata i64 %"#temp#.09", i64 0, metadata !17, metadata !23), !dbg !22
%24 = add i64 %"#temp#1.010", -1, !dbg !29
%25 = add i64 %"#temp#.09", -1, !dbg !29
%26 = mul i64 %25, %6, !dbg !29
%27 = add i64 %24, %26, !dbg !29
%28 = getelementptr double, double* %3, i64 %27, !dbg !29
%29 = load double, double* %28, align 8, !dbg !29, !tbaa !30
call void @llvm.dbg.value(metadata i64 %"#temp#1.010", i64 0, metadata !19, metadata !23), !dbg !22
call void @llvm.dbg.value(metadata i64 %"#temp#.09", i64 0, metadata !17, metadata !23), !dbg !22
%30 = mul i64 %25, %11, !dbg !29
%31 = add i64 %24, %30, !dbg !29
%32 = getelementptr double, double* %8, i64 %31, !dbg !29
%33 = load double, double* %32, align 8, !dbg !29, !tbaa !30
%34 = fadd double %29, %33, !dbg !29
call void @llvm.dbg.value(metadata i64 %"#temp#1.010", i64 0, metadata !19, metadata !23), !dbg !22
call void @llvm.dbg.value(metadata i64 %"#temp#.09", i64 0, metadata !17, metadata !23), !dbg !22
store double %34, double* %28, align 8, !dbg !29, !tbaa !30
%35 = icmp eq i64 %"#temp#.09", %21, !dbg !28
br i1 %35, label %L20.L11.loopexit_crit_edge, label %if3, !dbg !28
}
define i8** @jlcall_add_mat_64413(i8**, i8***, i32) #1 {
top:
br label %top.split
top.split: ; preds = %top
%3 = load i8**, i8*** %1, align 8
%4 = getelementptr i8**, i8*** %1, i64 1
%5 = load i8**, i8*** %4, align 8
call void @julia_add_mat_64414(i8** %3, i8** %5)
ret i8** inttoptr (i64 139931689598992 to i8**)
}
declare i8**** @jl_get_ptls_states()
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #2
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i32, i1) #3
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #3
declare void @jl_enter_handler(i8*)
; Function Attrs: returns_twice
declare i32 @__sigsetjmp(i8*, i32) #4
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2
attributes #0 = { sspstrong "no-frame-pointer-elim"="true" }
attributes #1 = { "no-frame-pointer-elim"="true" }
attributes #2 = { nounwind readnone }
attributes #3 = { argmemonly nounwind }
attributes #4 = { returns_twice }
!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2}
!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 1, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_C89, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4)
!3 = !DIFile(filename: "REPL[2]", directory: ".")
!4 = !{}
!5 = distinct !DISubprogram(name: "add_mat", linkageName: "julia_add_mat_64414", scope: null, file: !3, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !12)
!6 = !DISubroutineType(types: !7)
!7 = !{!8, !8}
!8 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64, align: 64)
!9 = !DICompositeType(tag: DW_TAG_structure_type, name: "jl_value_t", file: !10, line: 71, align: 64, elements: !11)
!10 = !DIFile(filename: "julia.h", directory: "")
!11 = !{!8}
!12 = !{!13, !15, !16, !17, !19, !20, !21}
!13 = !DILocalVariable(name: "#self#", arg: 1, scope: !5, file: !3, line: 2, type: !14)
!14 = !DICompositeType(tag: DW_TAG_structure_type, name: "#add_mat", align: 8, elements: !4, runtimeLang: DW_LANG_Julia, identifier: "#add_mat_64394")
!15 = !DILocalVariable(name: "a", arg: 2, scope: !5, file: !3, line: 2, type: !8)
!16 = !DILocalVariable(name: "b", arg: 3, scope: !5, file: !3, line: 2, type: !8)
!17 = !DILocalVariable(name: "j", scope: !5, file: !3, line: 2, type: !18)
!18 = !DIBasicType(name: "Int64", size: 64, encoding: DW_ATE_unsigned)
!19 = !DILocalVariable(name: "i", scope: !5, file: !3, line: 2, type: !18)
!20 = !DILocalVariable(name: "ni", scope: !5, file: !3, line: 2, type: !18)
!21 = !DILocalVariable(name: "nj", scope: !5, file: !3, line: 2, type: !18)
!22 = !DILocation(line: 2, scope: !5)
!23 = !DIExpression()
!24 = !{!25, !25, i64 0, i64 1}
!25 = !{!"jtbaa_const", !26, i64 0}
!26 = !{!"jtbaa"}
!27 = !DILocation(line: 3, scope: !5)
!28 = !DILocation(line: 4, scope: !5)
!29 = !DILocation(line: 5, scope: !5)
!30 = !{!31, !31, i64 0}
!31 = !{!"jtbaa_arraybuf", !32, i64 0}
!32 = !{!"jtbaa_data", !26, i64 0}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment