Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- julia> mutable struct MyRef{T}
- value::T
- end
- julia> getstring(x)::String = x.value
- getstring (generic function with 1 method)
- julia> const data = "blah"
- "blah"
- ##################################################################################################
- julia> @code_llvm getstring(MyRef(data))
- define i8** @julia_getstring_63008(i8** dereferenceable(8)) #0 !dbg !5 {
- top:
- %1 = bitcast i8** %0 to i8***
- %2 = load i8**, i8*** %1, align 8
- ret i8** %2
- }
- ###################################################################################################
- julia> @code_llvm getstring(WeakRef(data))
- define i8** @julia_getstring_63014(i8** dereferenceable(8)) #0 !dbg !5 {
- top:
- %ptls_i8 = call i8* asm "movq %fs:0, $0;\0Aaddq $$-10888, $0", "=r,~{dirflag},~{fpsr},~{flags}"() #4
- %ptls = bitcast i8* %ptls_i8 to i8****
- %1 = alloca [6 x i8**], align 8
- %.sub = getelementptr inbounds [6 x i8**], [6 x i8**]* %1, i64 0, i64 0
- %2 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 3
- %3 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 2
- %4 = bitcast i8*** %2 to i8*
- call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 24, i32 8, i1 false)
- %5 = bitcast [6 x i8**]* %1 to i64*
- store i64 8, i64* %5, align 8
- %6 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 1
- %7 = bitcast i8* %ptls_i8 to i64*
- %8 = load i64, i64* %7, align 8
- %9 = bitcast i8*** %6 to i64*
- store i64 %8, i64* %9, align 8
- store i8*** %.sub, i8**** %ptls, align 8
- store i8** null, i8*** %3, align 8
- %10 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 5
- %11 = getelementptr [6 x i8**], [6 x i8**]* %1, i64 0, i64 4
- %12 = bitcast i8** %0 to i64*
- %13 = load i64, i64* %12, align 8
- %14 = bitcast i8*** %10 to i64*
- store i64 %13, i64* %14, align 8
- store i8** inttoptr (i64 139839536319024 to i8**), i8*** %2, align 8
- store i8** inttoptr (i64 139839536306576 to i8**), i8*** %11, align 8
- %15 = call i8** @jl_apply_generic(i8*** %2, i32 3)
- store i8** %15, i8*** %3, align 8
- %16 = getelementptr i8*, i8** %15, i64 -1
- %17 = bitcast i8** %16 to i64*
- %18 = load i64, i64* %17, align 8
- %19 = and i64 %18, -16
- %20 = inttoptr i64 %19 to i8**
- %21 = icmp eq i8** %20, inttoptr (i64 139839536306576 to i8**)
- br i1 %21, label %pass, label %fail
- fail: ; preds = %top
- 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)
- unreachable
- pass: ; preds = %top
- %22 = load i64, i64* %9, align 8
- store i64 %22, i64* %7, align 8
- ret i8** %15
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement