@@ -194,6 +194,49 @@ if.end:
194
194
ret i32 %add
195
195
}
196
196
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
+
197
240
define i64 @load_before_store_noescape_byval (ptr byval ([2 x i32 ]) %a , i64 %i , i32 %b ) {
198
241
; CHECK-LABEL: @load_before_store_noescape_byval(
199
242
; CHECK-NEXT: entry:
0 commit comments