@@ -652,17 +652,17 @@ bb0(%0 : $*T, %1 : $*S):
652
652
// instead of value witness functions to load and store the value of a generic type.
653
653
// CHECK-IRGEN-LABEL: define linkonce_odr hidden void @_T016eager_specialize18copyValueAndReturnxx_xz1stlFxxxRlze31_lItilr_Tp5(i32* noalias nocapture sret, i32* noalias nocapture dereferenceable(4), i32* nocapture dereferenceable(4), %swift.type* %"\CF\84_0_0")
654
654
// CHECK-IRGEN: entry:
655
- // CHECK-IRGEN-NEXT: %3 = load i32, i32* %2, align 4
656
- // CHECK-IRGEN-NEXT: store i32 %3, i32* %0, align 4
655
+ // CHECK-IRGEN-NEXT: %3 = load i32, i32* %2
656
+ // CHECK-IRGEN-NEXT: store i32 %3, i32* %0
657
657
// CHECK-IRGEN-NEXT: ret void
658
658
// CHECK-IRGEN-NEXT:}
659
659
660
660
// Check that a specialization for _Trivial(64) uses direct loads and stores
661
661
// instead of value witness functions to load and store the value of a generic type.
662
662
// CHECK-IRGEN-LABEL: define linkonce_odr hidden void @_T016eager_specialize18copyValueAndReturnxx_xz1stlFxxxRlze63_lItilr_Tp5(i64* noalias nocapture sret, i64* noalias nocapture dereferenceable(8), i64* nocapture dereferenceable(8), %swift.type* %"\CF\84_0_0")
663
663
// CHECK-IRGEN: entry:
664
- // CHECK-IRGEN-NEXT: %3 = load i64, i64* %2, align 8
665
- // CHECK-IRGEN-NEXT: store i64 %3, i64* %0, align 8
664
+ // CHECK-IRGEN-NEXT: %3 = load i64, i64* %2
665
+ // CHECK-IRGEN-NEXT: store i64 %3, i64* %0
666
666
// CHECK-IRGEN-NEXT: ret void
667
667
// CHECK-IRGEN-NEXT: }
668
668
@@ -671,23 +671,22 @@ bb0(%0 : $*T, %1 : $*S):
671
671
// CHECK-IRGEN-LABEL: define linkonce_odr hidden void @_T016eager_specialize19copyValueAndReturn2xx_xz1stlFxxxRlzTlItilr_Tp5(%swift.opaque* noalias nocapture sret, %swift.opaque* noalias nocapture, %swift.opaque* nocapture, %swift.type* %"\CF\84_0_0")
672
672
// CHECK-IRGEN-NEXT: entry:
673
673
// CHECK-IRGEN-NEXT: %3 = bitcast %swift.type* %"\CF\84_0_0" to i8***
674
- // CHECK-IRGEN-NEXT: %4 = getelementptr inbounds i8**, i8*** %3, i64 -1
675
- // CHECK-IRGEN-NEXT: %"\CF\84_0_0.valueWitnesses" = load i8**, i8*** %4, align 8, !invariant.load !11, !dereferenceable !12
676
- // CHECK-IRGEN-NEXT: %5 = getelementptr inbounds i8*, i8** %"\CF\84_0_0.valueWitnesses", i32 6
677
- // CHECK-IRGEN-NEXT: %6 = load i8*, i8** %5, align 8, !invariant.load !11
678
- // CHECK-IRGEN-NEXT: %initializeWithCopy = bitcast i8* %6 to %swift.opaque* (%swift.opaque*, %swift.opaque*, %swift.type*)*
679
- // CHECK-IRGEN-NEXT: %7 = call %swift.opaque* %initializeWithCopy(%swift.opaque* %0, %swift.opaque* %2, %swift.type* %"\CF\84_0_0") #3
674
+ // CHECK-IRGEN-NEXT: %4 = getelementptr inbounds i8**, i8*** %3, i{{.*}} -1
675
+ // CHECK-IRGEN-NEXT: %"\CF\84_0_0.valueWitnesses" = load i8**, i8*** %4
676
+ // CHECK-IRGEN-NEXT: %5 = getelementptr inbounds i8*, i8** %"\CF\84_0_0.valueWitnesses"
677
+ // CHECK-IRGEN-NEXT: %6 = load i8*, i8** %5
678
+ // CHECK-IRGEN-NEXT: %initializeWithCopy = {{.*}}
679
+ // CHECK-IRGEN-NEXT: %7 = call {{.*}} %initializeWithCopy
680
680
// CHECK-IRGEN-NEXT: ret void
681
681
// CHECK-IRGEN-NEXT: }
682
682
683
683
// Check that a specialization for _RefCountedObject just copies the fixed-size reference,
684
684
// and call retain/release directly, instead of calling the value witness functions.
685
- // CHECK-IRGEN-LABEL: define linkonce_odr hidden void @_T016eager_specialize19copyValueAndReturn3xx_xz1stlFxxxRlzRlItilr_Tp5(%objc_object** noalias nocapture sret, %objc_object** noalias nocapture dereferenceable(8), %objc_object** nocapture dereferenceable(8), %swift.type* %"\CF\84_0_0")
685
+ // The matching patterns in this test are rather non-precise to cover both objc and non-objc platforms.
686
+ // CHECK-IRGEN-LABEL: define{{.*}}@_T016eager_specialize19copyValueAndReturn3xx_xz1stlFxxxRlzRlItilr_Tp5
686
687
// CHECK-IRGEN: entry:
687
- // CHECK-IRGEN-NEXT: %3 = load %objc_object*, %objc_object** %2, align 8
688
- // CHECK-IRGEN-NEXT: call void @swift_unknownRetain(%objc_object* %3) #3
689
- // CHECK-IRGEN-NEXT: store %objc_object* %3, %objc_object** %0, align 8
690
- // CHECK-IRGEN-NEXT: %toDestroy = load %objc_object*, %objc_object** %1, align 8
691
- // CHECK-IRGEN-NEXT: call void @swift_unknownRelease(%objc_object* %toDestroy) #3
692
- // CHECK-IRGEN-NEXT: ret void
693
- // CHECK-IRGEN-NEXT: }
688
+ // CHECK-IRGEN-NOT: ret void
689
+ // CHECK-IRGEN: call {{.*}}etain
690
+ // CHECK-IRGEN-NOT: ret void
691
+ // CHECK-IRGEN: call {{.*}}elease
692
+ // CHECK-IRGEN: ret void
0 commit comments