@@ -186,7 +186,7 @@ entry:
186
186
ret i32 %c
187
187
}
188
188
189
- ; FIXME: Should preserve metadata on loads, except !noundef and !invariant.load .
189
+ ; FIXME: Should preserve none-UB metadata on loads.
190
190
define ptr @preserve_load_metadata_after_select_transform1 (i1 %c , ptr dereferenceable (8 ) %a , ptr dereferenceable (8 ) %b ) {
191
191
; CHECK-LABEL: @preserve_load_metadata_after_select_transform1(
192
192
; CHECK-NEXT: entry:
@@ -197,10 +197,25 @@ define ptr @preserve_load_metadata_after_select_transform1(i1 %c, ptr dereferenc
197
197
;
198
198
entry:
199
199
%ptr.sel = select i1 %c , ptr %b , ptr %a
200
- %l.sel = load ptr , ptr %ptr.sel , align 1 , !tbaa !0 , !llvm.access.group !7 , !dereferenceable !9 , !noundef !{}, !invariant.load !7
200
+ %l.sel = load ptr , ptr %ptr.sel , align 1 , !tbaa !0 , !llvm.access.group !7 , !dereferenceable !9 , !noundef !{}, !invariant.load !7 , !align !9 , !nonnull !{}
201
201
ret ptr %l.sel
202
202
}
203
203
204
+ ; FIXME: Should preserve none-UB metadata on loads.
205
+ define i32 @preserve_load_metadata_after_select_transform_range (i1 %c , ptr dereferenceable (8 ) %a , ptr dereferenceable (8 ) %b ) {
206
+ ; CHECK-LABEL: @preserve_load_metadata_after_select_transform_range(
207
+ ; CHECK-NEXT: entry:
208
+ ; CHECK-NEXT: [[B_VAL:%.*]] = load i32, ptr [[B:%.*]], align 1
209
+ ; CHECK-NEXT: [[A_VAL:%.*]] = load i32, ptr [[A:%.*]], align 1
210
+ ; CHECK-NEXT: [[L_SEL:%.*]] = select i1 [[C:%.*]], i32 [[B_VAL]], i32 [[A_VAL]]
211
+ ; CHECK-NEXT: ret i32 [[L_SEL]]
212
+ ;
213
+ entry:
214
+ %ptr.sel = select i1 %c , ptr %b , ptr %a
215
+ %l.sel = load i32 , ptr %ptr.sel , align 1 , !tbaa !0 , !llvm.access.group !7 , !invariant.load !7 , !noundef !{}, !range !6
216
+ ret i32 %l.sel
217
+ }
218
+
204
219
define double @preserve_load_metadata_after_select_transform2 (ptr %a , ptr %b ) {
205
220
; CHECK-LABEL: @preserve_load_metadata_after_select_transform2(
206
221
; CHECK-NEXT: entry:
0 commit comments