@@ -47,3 +47,37 @@ ret: ; preds = %false, %true
4747 ; CHECK: call void @julia.pop_gc_frame(ptr %gcframe)
4848 ret ptr addrspace (10 ) %1
4949}
50+
51+ declare swiftcc void @sret_call_gc (ptr noalias nocapture noundef sret ({ ptr addrspace (10 ), i64 , i64 }), ptr noalias nocapture noundef, ptr nonnull swiftself )
52+
53+ declare ptr @julia.get_pgcstack ()
54+
55+ define hidden swiftcc void @sret_gc_root_phi (ptr nonnull swiftself %0 , i1 %unpredictable ) {
56+ top:
57+ ; CHECK-LABEL: @sret_gc_root_phi
58+ ; CHECK: %gcframe = call ptr @julia.new_gc_frame(i32 2)
59+ ; CHECK: call ptr @julia.get_gc_frame_slot(ptr %gcframe, i32 1)
60+ ; CHECK: call ptr @julia.get_gc_frame_slot(ptr %gcframe, i32 0)
61+ ; CHECK: %pgcstack = call ptr @julia.get_pgcstack()
62+ ; CHECK: call void @julia.push_gc_frame(ptr %gcframe, i32 2)
63+ ; CHECK: alloca [3 x i64], align 8
64+ %pgcstack = call ptr @julia.get_pgcstack ()
65+ %1 = alloca [3 x i64 ], align 8
66+ %2 = alloca ptr addrspace (10 ), align 8
67+ %3 = alloca ptr addrspace (10 ), align 8
68+ store i64 0 , ptr %2 , align 8
69+ store i64 0 , ptr %3 , align 8
70+ br i1 %unpredictable , label %true , label %false
71+
72+ true: ; preds = %top
73+ br label %ret
74+
75+ false: ; preds = %top
76+ br label %ret
77+
78+ ret: ; preds = %false, %true
79+ %4 = phi ptr [ %2 , %true ], [ %3 , %false ]
80+ call swiftcc void @sret_call_gc (ptr noalias nocapture noundef sret ({ ptr addrspace (10 ), i64 , i64 }) %1 , ptr noalias nocapture noundef %4 , ptr nonnull swiftself %0 )
81+ ; CHECK: call void @julia.pop_gc_frame(ptr %gcframe)
82+ ret void
83+ }
0 commit comments