@@ -79,3 +79,73 @@ ret: ; preds = %false, %true
7979 ; CHECK: call void @julia.pop_gc_frame(ptr %gcframe)
8080 ret void
8181}
82+
83+
84+ define hidden swiftcc void @sret_gc_root_phi_select (ptr nonnull swiftself %0 , i1 %unpredictable , i1 %unpredictable2 ) {
85+ top:
86+ ; CHECK-LABEL: @sret_gc_root_phi_select
87+ ; CHECK: %gcframe = call ptr @julia.new_gc_frame(i32 3)
88+ ; CHECK: call ptr @julia.get_gc_frame_slot(ptr %gcframe, i32 2)
89+ ; CHECK: call ptr @julia.get_gc_frame_slot(ptr %gcframe, i32 1)
90+ ; CHECK: call ptr @julia.get_gc_frame_slot(ptr %gcframe, i32 0)
91+ ; CHECK: %pgcstack = call ptr @julia.get_pgcstack()
92+ ; CHECK: call void @julia.push_gc_frame(ptr %gcframe, i32 3)
93+ ; CHECK: alloca [3 x i64], align 8
94+ %pgcstack = call ptr @julia.get_pgcstack ()
95+ %1 = alloca [3 x i64 ], align 8
96+ %2 = alloca ptr addrspace (10 ), align 8
97+ %3 = alloca ptr addrspace (10 ), align 8
98+ %4 = alloca ptr addrspace (10 ), align 8
99+ store i64 0 , ptr %2 , align 8
100+ store i64 0 , ptr %3 , align 8
101+ store i64 0 , ptr %4 , align 8
102+ br i1 %unpredictable , label %true , label %false
103+
104+ true: ; preds = %top
105+ br label %ret
106+
107+ false: ; preds = %top
108+ br label %ret
109+
110+ ret: ; preds = %false, %true
111+ %5 = phi ptr [ %2 , %true ], [ %3 , %false ]
112+ %6 = select i1 %unpredictable2 , ptr %4 , ptr %5
113+ call swiftcc void @sret_call_gc (ptr noalias nocapture noundef sret ({ ptr addrspace (10 ), i64 , i64 }) %1 , ptr noalias nocapture noundef %6 , ptr nonnull swiftself %0 )
114+ ; CHECK: call void @julia.pop_gc_frame(ptr %gcframe)
115+ ret void
116+ }
117+
118+ define hidden swiftcc void @sret_gc_root_select_phi (ptr nonnull swiftself %0 , i1 %unpredictable , i1 %unpredictable2 ) {
119+ top:
120+ ; CHECK-LABEL: @sret_gc_root_select_phi
121+ ; CHECK: %gcframe = call ptr @julia.new_gc_frame(i32 3)
122+ ; CHECK: call ptr @julia.get_gc_frame_slot(ptr %gcframe, i32 2)
123+ ; CHECK: call ptr @julia.get_gc_frame_slot(ptr %gcframe, i32 1)
124+ ; CHECK: call ptr @julia.get_gc_frame_slot(ptr %gcframe, i32 0)
125+ ; CHECK: %pgcstack = call ptr @julia.get_pgcstack()
126+ ; CHECK: call void @julia.push_gc_frame(ptr %gcframe, i32 3)
127+ ; CHECK: alloca [3 x i64], align 8
128+ %pgcstack = call ptr @julia.get_pgcstack ()
129+ %1 = alloca [3 x i64 ], align 8
130+ %2 = alloca ptr addrspace (10 ), align 8
131+ %3 = alloca ptr addrspace (10 ), align 8
132+ %4 = alloca ptr addrspace (10 ), align 8
133+ store i64 0 , ptr %2 , align 8
134+ store i64 0 , ptr %3 , align 8
135+ store i64 0 , ptr %4 , align 8
136+ %5 = select i1 %unpredictable2 , ptr %3 , ptr %4
137+ br i1 %unpredictable , label %true , label %false
138+
139+ true: ; preds = %top
140+ br label %ret
141+
142+ false: ; preds = %top
143+ br label %ret
144+
145+ ret: ; preds = %false, %true
146+ %6 = phi ptr [ %2 , %true ], [ %5 , %false ]
147+
148+ call swiftcc void @sret_call_gc (ptr noalias nocapture noundef sret ({ ptr addrspace (10 ), i64 , i64 }) %1 , ptr noalias nocapture noundef %6 , ptr nonnull swiftself %0 )
149+ ; CHECK: call void @julia.pop_gc_frame(ptr %gcframe)
150+ ret void
151+ }
0 commit comments