Advertisement
Guest User

Untitled

a guest
Jan 11th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 2.69 KB | None | 0 0
  1. julia> mutable struct MyRef{T}
  2.        value::T
  3.        end
  4.  
  5. julia> getstring(x)::String = x.value
  6. getstring (generic function with 1 method)
  7.  
  8. julia> const data = "blah"
  9. "blah"
  10. ##################################################################################################
  11. julia> @code_llvm getstring(MyRef(data))
  12.  
  13. define i8** @julia_getstring_63008(i8** dereferenceable(8)) #0 !dbg !5 {
  14. top:
  15.   %1 = bitcast i8** %0 to i8***
  16.   %2 = load i8**, i8*** %1, align 8
  17.   ret i8** %2
  18. }
  19. ###################################################################################################
  20. julia> @code_llvm getstring(WeakRef(data))
  21.  
  22. define i8** @julia_getstring_63014(i8** dereferenceable(8)) #0 !dbg !5 {
  23. top:
  24.   %ptls_i8 = call i8* asm "movq %fs:0, $0;\0Aaddq $$-10888, $0", "=r,~{dirflag},~{fpsr},~{flags}"() #4
  25.   %ptls = bitcast i8* %ptls_i8 to i8****
  26.   %1 = alloca [6 x i8**], align 8
  27.   %.sub = getelementptr inbounds [6 x i8**], [6 x i8**]* %1, i64 0, i64 0
  28.   %2 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 3
  29.   %3 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 2
  30.   %4 = bitcast i8*** %2 to i8*
  31.   call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 24, i32 8, i1 false)
  32.   %5 = bitcast [6 x i8**]* %1 to i64*
  33.   store i64 8, i64* %5, align 8
  34.   %6 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 1
  35.   %7 = bitcast i8* %ptls_i8 to i64*
  36.   %8 = load i64, i64* %7, align 8
  37.   %9 = bitcast i8*** %6 to i64*
  38.   store i64 %8, i64* %9, align 8
  39.   store i8*** %.sub, i8**** %ptls, align 8
  40.   store i8** null, i8*** %3, align 8
  41.   %10 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 5
  42.   %11 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 4
  43.   %12 = bitcast i8** %0 to i64*
  44.   %13 = load i64, i64* %12, align 8
  45.   %14 = bitcast i8*** %10 to i64*
  46.   store i64 %13, i64* %14, align 8
  47.   store i8** inttoptr (i64 139839536319024 to i8**), i8*** %2, align 8
  48.   store i8** inttoptr (i64 139839536306576 to i8**), i8*** %11, align 8
  49.   %15 = call i8** @jl_apply_generic(i8*** %2, i32 3)
  50.   store i8** %15, i8*** %3, align 8
  51.   %16 = getelementptr i8*, i8** %15, i64 -1
  52.   %17 = bitcast i8** %16 to i64*
  53.   %18 = load i64, i64* %17, align 8
  54.   %19 = and i64 %18, -16
  55.   %20 = inttoptr i64 %19 to i8**
  56.   %21 = icmp eq i8** %20, inttoptr (i64 139839536306576 to i8**)
  57.   br i1 %21, label %pass, label %fail
  58.  
  59. fail:                                             ; preds = %top
  60.   call void @jl_type_error_rt(i8* inttoptr (i64 40263792 to i8*), i8* inttoptr (i64 42846240 to i8*), i8** inttoptr (i64 139839536306576 to i8**), i8** %15)
  61.   unreachable
  62.  
  63. pass:                                             ; preds = %top
  64.   %22 = load i64, i64* %9, align 8
  65.   store i64 %22, i64* %7, align 8
  66.   ret i8** %15
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement