Skip to content

Commit 34ee77c

Browse files
committed
[SimplifyCFG] Add tests for #89672 (NFC)
1 parent 4127a69 commit 34ee77c

File tree

1 file changed

+64
-16
lines changed

1 file changed

+64
-16
lines changed

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

Lines changed: 64 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,14 @@ define i32 @load_before_store_noescape(i64 %i, i32 %b) {
120120
; CHECK-NEXT: [[A:%.*]] = alloca [2 x i32], align 8
121121
; CHECK-NEXT: store i64 4294967296, ptr [[A]], align 8
122122
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i64 0, i64 [[I:%.*]]
123-
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
124-
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], [[B:%.*]]
125-
; CHECK-NEXT: [[SPEC_STORE_SELECT:%.*]] = select i1 [[CMP]], i32 [[B]], i32 [[TMP1]]
123+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
124+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], [[B:%.*]]
125+
; CHECK-NEXT: [[SPEC_STORE_SELECT:%.*]] = select i1 [[CMP]], i32 [[B]], i32 [[TMP0]]
126126
; CHECK-NEXT: store i32 [[SPEC_STORE_SELECT]], ptr [[ARRAYIDX]], align 4
127-
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4
127+
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[A]], align 4
128128
; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i64 0, i64 1
129-
; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
130-
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], [[TMP3]]
129+
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
130+
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP2]]
131131
; CHECK-NEXT: ret i32 [[ADD]]
132132
;
133133
entry:
@@ -158,17 +158,17 @@ define i32 @load_before_store_escape(i64 %i, i32 %b) {
158158
; CHECK-NEXT: store i64 4294967296, ptr [[A]], align 8
159159
; CHECK-NEXT: call void @fork_some_threads(ptr [[A]])
160160
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i64 0, i64 [[I:%.*]]
161-
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
162-
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], [[B:%.*]]
161+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
162+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], [[B:%.*]]
163163
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
164164
; CHECK: if.then:
165165
; CHECK-NEXT: store i32 [[B]], ptr [[ARRAYIDX]], align 4
166166
; CHECK-NEXT: br label [[IF_END]]
167167
; CHECK: if.end:
168-
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4
168+
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[A]], align 4
169169
; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i64 0, i64 1
170-
; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
171-
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], [[TMP3]]
170+
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
171+
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP2]]
172172
; CHECK-NEXT: call void @join_some_threads()
173173
; CHECK-NEXT: ret i32 [[ADD]]
174174
;
@@ -205,18 +205,18 @@ define i32 @not_alone_in_block(i64 %i, i32 %b) {
205205
; CHECK-NEXT: [[A:%.*]] = alloca [2 x i32], align 8
206206
; CHECK-NEXT: store i64 4294967296, ptr [[A]], align 8
207207
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i64 0, i64 [[I:%.*]]
208-
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
209-
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], [[B:%.*]]
208+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
209+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], [[B:%.*]]
210210
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
211211
; CHECK: if.then:
212212
; CHECK-NEXT: store i32 [[B]], ptr [[ARRAYIDX]], align 4
213213
; CHECK-NEXT: store i32 [[B]], ptr [[A]], align 4
214214
; CHECK-NEXT: br label [[IF_END]]
215215
; CHECK: if.end:
216-
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[A]], align 4
216+
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[A]], align 4
217217
; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i64 0, i64 1
218-
; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
219-
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], [[TMP3]]
218+
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
219+
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP2]]
220220
; CHECK-NEXT: ret i32 [[ADD]]
221221
;
222222
entry:
@@ -240,6 +240,54 @@ if.end:
240240
ret i32 %add
241241
}
242242

243+
; FIXME: This is a miscompile.
244+
define void @wrong_align_store(ptr %A, i32 %B, i32 %C, i32 %D) {
245+
; CHECK-LABEL: @wrong_align_store(
246+
; CHECK-NEXT: entry:
247+
; CHECK-NEXT: store i32 [[B:%.*]], ptr [[A:%.*]], align 4
248+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[D:%.*]], 42
249+
; CHECK-NEXT: [[SPEC_STORE_SELECT:%.*]] = select i1 [[CMP]], i32 [[C:%.*]], i32 [[B]]
250+
; CHECK-NEXT: store i32 [[SPEC_STORE_SELECT]], ptr [[A]], align 8
251+
; CHECK-NEXT: ret void
252+
;
253+
entry:
254+
store i32 %B, ptr %A, align 4
255+
%cmp = icmp sgt i32 %D, 42
256+
br i1 %cmp, label %if.then, label %ret.end
257+
258+
if.then:
259+
store i32 %C, ptr %A, align 8
260+
br label %ret.end
261+
262+
ret.end:
263+
ret void
264+
}
265+
266+
; FIXME: This is a miscompile.
267+
define void @wrong_align_load(i32 %C, i32 %D) {
268+
; CHECK-LABEL: @wrong_align_load(
269+
; CHECK-NEXT: entry:
270+
; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4
271+
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4
272+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[D:%.*]], 42
273+
; CHECK-NEXT: [[SPEC_STORE_SELECT:%.*]] = select i1 [[CMP]], i32 [[C:%.*]], i32 [[TMP0]]
274+
; CHECK-NEXT: store i32 [[SPEC_STORE_SELECT]], ptr [[A]], align 8
275+
; CHECK-NEXT: ret void
276+
;
277+
entry:
278+
%A = alloca i32, align 4
279+
load i32, ptr %A, align 4
280+
%cmp = icmp sgt i32 %D, 42
281+
br i1 %cmp, label %if.then, label %ret.end
282+
283+
if.then:
284+
store i32 %C, ptr %A, align 8
285+
br label %ret.end
286+
287+
ret.end:
288+
ret void
289+
}
290+
243291
; CHECK: !0 = !{!"branch_weights", i32 3, i32 5}
244292
!0 = !{!"branch_weights", i32 3, i32 5}
245293

0 commit comments

Comments
 (0)