Skip to content

Commit 2268c8c

Browse files
committed
[PhaseOrdering] Add eest making sure alignment doesn't get dropped.
1 parent ebc7efb commit 2268c8c

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -passes='default<O3>' -S %s | FileCheck %s
3+
4+
target triple = "arm64-apple-macosx"
5+
6+
declare void @llvm.assume(i1 noundef)
7+
8+
define i32 @entry(ptr %0) {
9+
; CHECK-LABEL: define i32 @entry(
10+
; CHECK-SAME: ptr nocapture [[TMP0:%.*]]) local_unnamed_addr {
11+
; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP0]], align 8
12+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP2]], i64 4) ]
13+
; CHECK-NEXT: [[DOT0_COPYLOAD_I_I_I:%.*]] = load i32, ptr [[TMP2]], align 4
14+
; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @swap(i32 [[DOT0_COPYLOAD_I_I_I]])
15+
; CHECK-NEXT: [[TMP4:%.*]] = load ptr, ptr [[TMP0]], align 8
16+
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP4]], i64 4
17+
; CHECK-NEXT: store ptr [[TMP5]], ptr [[TMP0]], align 8
18+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP5]], i64 4) ]
19+
; CHECK-NEXT: [[DOT0_COPYLOAD_I_I_I1:%.*]] = load i32, ptr [[TMP5]], align 4
20+
; CHECK-NEXT: [[TMP6:%.*]] = tail call i32 @swap(i32 [[DOT0_COPYLOAD_I_I_I1]])
21+
; CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP0]], align 8
22+
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[TMP7]], i64 4
23+
; CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP0]], align 8
24+
; CHECK-NEXT: ret i32 [[TMP6]]
25+
;
26+
%2 = call i32 @fn1(ptr %0)
27+
%3 = call i32 @fn1(ptr %0)
28+
ret i32 %3
29+
}
30+
31+
32+
define i32 @fn1(ptr %0) {
33+
; CHECK-LABEL: define i32 @fn1(
34+
; CHECK-SAME: ptr nocapture [[TMP0:%.*]]) local_unnamed_addr {
35+
; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP0]], align 8
36+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP2]], i64 4) ]
37+
; CHECK-NEXT: [[DOT0_COPYLOAD_I_I:%.*]] = load i32, ptr [[TMP2]], align 4
38+
; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @swap(i32 [[DOT0_COPYLOAD_I_I]])
39+
; CHECK-NEXT: [[TMP4:%.*]] = load ptr, ptr [[TMP0]], align 8
40+
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP4]], i64 4
41+
; CHECK-NEXT: store ptr [[TMP5]], ptr [[TMP0]], align 8
42+
; CHECK-NEXT: ret i32 [[TMP3]]
43+
;
44+
%2 = call i32 @fn2(ptr %0)
45+
ret i32 %2
46+
}
47+
48+
define i32 @fn2(ptr %0) {
49+
; CHECK-LABEL: define i32 @fn2(
50+
; CHECK-SAME: ptr nocapture [[TMP0:%.*]]) local_unnamed_addr {
51+
; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP0]], align 8
52+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP2]], i64 4) ]
53+
; CHECK-NEXT: [[DOT0_COPYLOAD_I:%.*]] = load i32, ptr [[TMP2]], align 4
54+
; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @swap(i32 [[DOT0_COPYLOAD_I]])
55+
; CHECK-NEXT: [[TMP4:%.*]] = load ptr, ptr [[TMP0]], align 8
56+
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP4]], i64 4
57+
; CHECK-NEXT: store ptr [[TMP5]], ptr [[TMP0]], align 8
58+
; CHECK-NEXT: ret i32 [[TMP3]]
59+
;
60+
%2 = load ptr, ptr %0, align 8
61+
%3 = call i32 @load_assume_aligned(ptr %2)
62+
%4 = load ptr, ptr %0, align 8
63+
%5 = getelementptr i8, ptr %4, i64 4
64+
store ptr %5, ptr %0, align 8
65+
ret i32 %3
66+
}
67+
68+
define i32 @load_assume_aligned(ptr %0) {
69+
; CHECK-LABEL: define i32 @load_assume_aligned(
70+
; CHECK-SAME: ptr [[TMP0:%.*]]) local_unnamed_addr {
71+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 4) ]
72+
; CHECK-NEXT: [[DOT0_COPYLOAD:%.*]] = load i32, ptr [[TMP0]], align 4
73+
; CHECK-NEXT: [[TMP2:%.*]] = tail call i32 @swap(i32 [[DOT0_COPYLOAD]])
74+
; CHECK-NEXT: ret i32 [[TMP2]]
75+
;
76+
call void @llvm.assume(i1 true) [ "align"(ptr %0, i64 4) ]
77+
%.0.copyload = load i32, ptr %0, align 1
78+
%2 = call i32 @swap(i32 %.0.copyload)
79+
ret i32 %2
80+
}
81+
82+
declare i32 @swap(i32)

0 commit comments

Comments
 (0)