Skip to content

Commit 72fdfcf

Browse files
nikicGeorgeARM
authored andcommitted
[SimplifyCFG] Add test for addr-only capture in store speculation (NFC)
1 parent d8f69ba commit 72fdfcf

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

llvm/test/Transforms/SimplifyCFG/speculate-store.ll

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
197240
define 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

Comments
 (0)