@@ -186,9 +186,24 @@ entry:
186186 ret i32 %c
187187}
188188
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+
189204; 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 (
192207; CHECK-NEXT: entry:
193208; CHECK-NEXT: [[L_A:%.*]] = load double, ptr [[A:%.*]], align 8
194209; CHECK-NEXT: [[L_B:%.*]] = load double, ptr [[B:%.*]], align 8
0 commit comments