@@ -489,127 +489,3 @@ define void @test_scc_argmem_read_2(ptr %p) {
489489 call void @test_scc_argmem_read_1 (ptr %p )
490490 ret void
491491}
492-
493- define i64 @select_same_obj (i1 %c , ptr %p , i64 %x ) {
494- ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read)
495- ; FNATTRS-LABEL: define i64 @select_same_obj
496- ; FNATTRS-SAME: (i1 [[C:%.*]], ptr nocapture readonly [[P:%.*]], i64 [[X:%.*]]) #[[ATTR1]] {
497- ; FNATTRS-NEXT: entry:
498- ; FNATTRS-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i64 [[X]]
499- ; FNATTRS-NEXT: [[P3:%.*]] = select i1 [[C]], ptr [[P]], ptr [[P2]]
500- ; FNATTRS-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
501- ; FNATTRS-NEXT: ret i64 [[R]]
502- ;
503- ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
504- ; ATTRIBUTOR-LABEL: define i64 @select_same_obj
505- ; ATTRIBUTOR-SAME: (i1 [[C:%.*]], ptr nocapture nofree readonly [[P:%.*]], i64 [[X:%.*]]) #[[ATTR0]] {
506- ; ATTRIBUTOR-NEXT: entry:
507- ; ATTRIBUTOR-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i64 [[X]]
508- ; ATTRIBUTOR-NEXT: [[P3:%.*]] = select i1 [[C]], ptr [[P]], ptr [[P2]]
509- ; ATTRIBUTOR-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
510- ; ATTRIBUTOR-NEXT: ret i64 [[R]]
511- ;
512- entry:
513- %p2 = getelementptr i8 , ptr %p , i64 %x
514- %p3 = select i1 %c , ptr %p , ptr %p2
515- %r = load i64 , ptr %p3
516- ret i64 %r
517- }
518-
519- ; FIXME: This could be `memory(argmem: read)`.
520- define i64 @select_different_obj (i1 %c , ptr %p , ptr %p2 ) {
521- ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, inaccessiblemem: none)
522- ; FNATTRS-LABEL: define i64 @select_different_obj
523- ; FNATTRS-SAME: (i1 [[C:%.*]], ptr nocapture readonly [[P:%.*]], ptr nocapture readonly [[P2:%.*]]) #[[ATTR3]] {
524- ; FNATTRS-NEXT: entry:
525- ; FNATTRS-NEXT: [[P3:%.*]] = select i1 [[C]], ptr [[P]], ptr [[P2]]
526- ; FNATTRS-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
527- ; FNATTRS-NEXT: ret i64 [[R]]
528- ;
529- ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
530- ; ATTRIBUTOR-LABEL: define i64 @select_different_obj
531- ; ATTRIBUTOR-SAME: (i1 [[C:%.*]], ptr nocapture nofree readonly [[P:%.*]], ptr nocapture nofree readonly [[P2:%.*]]) #[[ATTR0]] {
532- ; ATTRIBUTOR-NEXT: entry:
533- ; ATTRIBUTOR-NEXT: [[P3:%.*]] = select i1 [[C]], ptr [[P]], ptr [[P2]]
534- ; ATTRIBUTOR-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
535- ; ATTRIBUTOR-NEXT: ret i64 [[R]]
536- ;
537- entry:
538- %p3 = select i1 %c , ptr %p , ptr %p2
539- %r = load i64 , ptr %p3
540- ret i64 %r
541- }
542-
543- define i64 @phi_same_obj (i1 %c , ptr %p , i64 %x ) {
544- ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read)
545- ; FNATTRS-LABEL: define i64 @phi_same_obj
546- ; FNATTRS-SAME: (i1 [[C:%.*]], ptr nocapture readonly [[P:%.*]], i64 [[X:%.*]]) #[[ATTR1]] {
547- ; FNATTRS-NEXT: entry:
548- ; FNATTRS-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i64 [[X]]
549- ; FNATTRS-NEXT: br i1 [[C]], label [[IF:%.*]], label [[JOIN:%.*]]
550- ; FNATTRS: if:
551- ; FNATTRS-NEXT: br label [[JOIN]]
552- ; FNATTRS: join:
553- ; FNATTRS-NEXT: [[P3:%.*]] = phi ptr [ [[P]], [[IF]] ], [ [[P2]], [[ENTRY:%.*]] ]
554- ; FNATTRS-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
555- ; FNATTRS-NEXT: ret i64 [[R]]
556- ;
557- ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read)
558- ; ATTRIBUTOR-LABEL: define i64 @phi_same_obj
559- ; ATTRIBUTOR-SAME: (i1 [[C:%.*]], ptr nocapture nofree readonly [[P:%.*]], i64 [[X:%.*]]) #[[ATTR1]] {
560- ; ATTRIBUTOR-NEXT: entry:
561- ; ATTRIBUTOR-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i64 [[X]]
562- ; ATTRIBUTOR-NEXT: br i1 [[C]], label [[IF:%.*]], label [[JOIN:%.*]]
563- ; ATTRIBUTOR: if:
564- ; ATTRIBUTOR-NEXT: br label [[JOIN]]
565- ; ATTRIBUTOR: join:
566- ; ATTRIBUTOR-NEXT: [[P3:%.*]] = phi ptr [ [[P]], [[IF]] ], [ [[P2]], [[ENTRY:%.*]] ]
567- ; ATTRIBUTOR-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
568- ; ATTRIBUTOR-NEXT: ret i64 [[R]]
569- ;
570- entry:
571- %p2 = getelementptr i8 , ptr %p , i64 %x
572- br i1 %c , label %if , label %join
573- if:
574- br label %join
575- join:
576- %p3 = phi ptr [ %p , %if ], [ %p2 , %entry ]
577- %r = load i64 , ptr %p3
578- ret i64 %r
579- }
580-
581- ; FIXME: This could be `memory(argmem: read)`.
582- define i64 @phi_different_obj (i1 %c , ptr %p , ptr %p2 ) {
583- ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(read, inaccessiblemem: none)
584- ; FNATTRS-LABEL: define i64 @phi_different_obj
585- ; FNATTRS-SAME: (i1 [[C:%.*]], ptr nocapture readonly [[P:%.*]], ptr nocapture readonly [[P2:%.*]]) #[[ATTR3]] {
586- ; FNATTRS-NEXT: entry:
587- ; FNATTRS-NEXT: br i1 [[C]], label [[IF:%.*]], label [[JOIN:%.*]]
588- ; FNATTRS: if:
589- ; FNATTRS-NEXT: br label [[JOIN]]
590- ; FNATTRS: join:
591- ; FNATTRS-NEXT: [[P3:%.*]] = phi ptr [ [[P]], [[IF]] ], [ [[P2]], [[ENTRY:%.*]] ]
592- ; FNATTRS-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
593- ; FNATTRS-NEXT: ret i64 [[R]]
594- ;
595- ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read)
596- ; ATTRIBUTOR-LABEL: define i64 @phi_different_obj
597- ; ATTRIBUTOR-SAME: (i1 [[C:%.*]], ptr nocapture nofree readonly [[P:%.*]], ptr nocapture nofree readonly [[P2:%.*]]) #[[ATTR1]] {
598- ; ATTRIBUTOR-NEXT: entry:
599- ; ATTRIBUTOR-NEXT: br i1 [[C]], label [[IF:%.*]], label [[JOIN:%.*]]
600- ; ATTRIBUTOR: if:
601- ; ATTRIBUTOR-NEXT: br label [[JOIN]]
602- ; ATTRIBUTOR: join:
603- ; ATTRIBUTOR-NEXT: [[P3:%.*]] = phi ptr [ [[P]], [[IF]] ], [ [[P2]], [[ENTRY:%.*]] ]
604- ; ATTRIBUTOR-NEXT: [[R:%.*]] = load i64, ptr [[P3]], align 4
605- ; ATTRIBUTOR-NEXT: ret i64 [[R]]
606- ;
607- entry:
608- br i1 %c , label %if , label %join
609- if:
610- br label %join
611- join:
612- %p3 = phi ptr [ %p , %if ], [ %p2 , %entry ]
613- %r = load i64 , ptr %p3
614- ret i64 %r
615- }
0 commit comments