@@ -123,18 +123,26 @@ define i8 @assume_align_non_pow2(ptr %p) {
123
123
ret i8 %v
124
124
}
125
125
126
- ; TODO: Can fold alignment assumption into !align metadata on load.
127
126
define ptr @fold_assume_align_pow2_of_loaded_pointer_into_align_metadata (ptr %p ) {
128
127
; CHECK-LABEL: @fold_assume_align_pow2_of_loaded_pointer_into_align_metadata(
129
- ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
130
- ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i64 8) ]
128
+ ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0:![0-9]+]]
131
129
; CHECK-NEXT: ret ptr [[P2]]
132
130
;
133
131
%p2 = load ptr , ptr %p
134
132
call void @llvm.assume (i1 true ) [ "align" (ptr %p2 , i64 8 ) ]
135
133
ret ptr %p2
136
134
}
137
135
136
+ define ptr @fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata (ptr %p ) {
137
+ ; CHECK-LABEL: @fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata(
138
+ ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0]]
139
+ ; CHECK-NEXT: ret ptr [[P2]]
140
+ ;
141
+ %p2 = load ptr , ptr %p
142
+ call void @llvm.assume (i1 true ) [ "align" (ptr %p2 , i32 8 ) ]
143
+ ret ptr %p2
144
+ }
145
+
138
146
define ptr @dont_fold_assume_align_pow2_of_loaded_pointer_into_align_metadata_due_to_call (ptr %p ) {
139
147
; CHECK-LABEL: @dont_fold_assume_align_pow2_of_loaded_pointer_into_align_metadata_due_to_call(
140
148
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
@@ -171,3 +179,19 @@ define ptr @dont_fold_assume_align_zero_of_loaded_pointer_into_align_metadata(pt
171
179
call void @llvm.assume (i1 true ) [ "align" (ptr %p2 , i64 0 ) ]
172
180
ret ptr %p2
173
181
}
182
+
183
+ ; !align must have a constant integer alignment.
184
+ define ptr @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_metadata (ptr %p , i64 %align ) {
185
+ ; CHECK-LABEL: @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_metadata(
186
+ ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META1:![0-9]+]]
187
+ ; CHECK-NEXT: ret ptr [[P2]]
188
+ ;
189
+ %p2 = load ptr , ptr %p
190
+ call void @llvm.assume (i1 true ) [ "align" (ptr %p2 , i64 %align ) ]
191
+ ret ptr %p2
192
+ }
193
+
194
+ ;.
195
+ ; CHECK: [[META0]] = !{i64 8}
196
+ ; CHECK: [[META1]] = !{i64 1}
197
+ ;.
0 commit comments