@@ -194,6 +194,49 @@ if.end:
194194 ret i32 %add
195195}
196196
197+ define i32 @load_before_store_escape_addr_only (i64 %i , i32 %b ) {
198+ ; CHECK-LABEL: @load_before_store_escape_addr_only(
199+ ; CHECK-NEXT: entry:
200+ ; CHECK-NEXT: [[A:%.*]] = alloca [2 x i32], align 8
201+ ; CHECK-NEXT: store i64 4294967296, ptr [[A]], align 8
202+ ; CHECK-NEXT: call void @fork_some_threads(ptr captures(address) [[A]])
203+ ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i64 0, i64 [[I:%.*]]
204+ ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
205+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], [[B:%.*]]
206+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
207+ ; CHECK: if.then:
208+ ; CHECK-NEXT: store i32 [[B]], ptr [[ARRAYIDX]], align 4
209+ ; CHECK-NEXT: br label [[IF_END]]
210+ ; CHECK: if.end:
211+ ; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[A]], align 4
212+ ; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i64 0, i64 1
213+ ; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
214+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP2]]
215+ ; CHECK-NEXT: call void @join_some_threads()
216+ ; CHECK-NEXT: ret i32 [[ADD]]
217+ ;
218+ entry:
219+ %a = alloca [2 x i32 ], align 8
220+ store i64 4294967296 , ptr %a , align 8
221+ call void @fork_some_threads (ptr captures(address) %a )
222+ %arrayidx = getelementptr inbounds [2 x i32 ], ptr %a , i64 0 , i64 %i
223+ %0 = load i32 , ptr %arrayidx , align 4
224+ %cmp = icmp slt i32 %0 , %b
225+ br i1 %cmp , label %if.then , label %if.end
226+
227+ if.then:
228+ store i32 %b , ptr %arrayidx , align 4
229+ br label %if.end
230+
231+ if.end:
232+ %1 = load i32 , ptr %a , align 4
233+ %arrayidx2 = getelementptr inbounds [2 x i32 ], ptr %a , i64 0 , i64 1
234+ %2 = load i32 , ptr %arrayidx2 , align 4
235+ %add = add nsw i32 %1 , %2
236+ call void @join_some_threads ()
237+ ret i32 %add
238+ }
239+
197240define i64 @load_before_store_noescape_byval (ptr byval ([2 x i32 ]) %a , i64 %i , i32 %b ) {
198241; CHECK-LABEL: @load_before_store_noescape_byval(
199242; CHECK-NEXT: entry:
0 commit comments