@@ -186,9 +186,24 @@ entry:
186
186
ret i32 %c
187
187
}
188
188
189
+ ; FIXME: Should preserve metadata on loads, except !noundef and !invariant.load.
190
+ define ptr @preserve_load_metadata_after_select_transform1 (i1 %c , ptr dereferenceable (8 ) %a , ptr dereferenceable (8 ) %b ) {
191
+ ; CHECK-LABEL: @preserve_load_metadata_after_select_transform1(
192
+ ; CHECK-NEXT: entry:
193
+ ; CHECK-NEXT: [[B_VAL:%.*]] = load ptr, ptr [[B:%.*]], align 1
194
+ ; CHECK-NEXT: [[A_VAL:%.*]] = load ptr, ptr [[A:%.*]], align 1
195
+ ; CHECK-NEXT: [[L_SEL:%.*]] = select i1 [[C:%.*]], ptr [[B_VAL]], ptr [[A_VAL]]
196
+ ; CHECK-NEXT: ret ptr [[L_SEL]]
197
+ ;
198
+ entry:
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
201
+ ret ptr %l.sel
202
+ }
203
+
189
204
; FIXME: Should preserve metadata on loads.
190
- define double @preserve_load_metadata_after_select_transform (ptr %a , ptr %b ) {
191
- ; CHECK-LABEL: @preserve_load_metadata_after_select_transform (
205
+ define double @preserve_load_metadata_after_select_transform2 (ptr %a , ptr %b ) {
206
+ ; CHECK-LABEL: @preserve_load_metadata_after_select_transform2 (
192
207
; CHECK-NEXT: entry:
193
208
; CHECK-NEXT: [[L_A:%.*]] = load double, ptr [[A:%.*]], align 8
194
209
; CHECK-NEXT: [[L_B:%.*]] = load double, ptr [[B:%.*]], align 8
0 commit comments