@@ -692,6 +692,31 @@ func ispod_test() {
692
692
var f = Builtin . ispod ( Builtin . NativeObject. self)
693
693
}
694
694
695
+ // CHECK-LABEL: define {{.*}} @{{.*}}generic_isbitwisetakable_test
696
+ func generic_isbitwisetakable_test< T> ( _: T ) {
697
+ // CHECK: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[T:%.*]], i32 9
698
+ // CHECK-NEXT: [[T1:%.*]] = load i8*, i8** [[T0]]
699
+ // CHECK-NEXT: [[FLAGS:%.*]] = ptrtoint i8* [[T1]] to i64
700
+ // CHECK-NEXT: [[ISNOTBITWISETAKABLE:%.*]] = and i64 [[FLAGS]], 1048576
701
+ // CHECK-NEXT: [[ISBITWISETAKABLE:%.*]] = icmp eq i64 [[ISNOTBITWISETAKABLE]], 0
702
+ // CHECK-NEXT: store i1 [[ISBITWISETAKABLE]], i1* [[S:%.*]]
703
+ var s = Builtin . isbitwisetakable ( T . self)
704
+ }
705
+
706
+ // CHECK-LABEL: define {{.*}} @{{.*}}isbitwisetakable_test
707
+ func isbitwisetakable_test( ) {
708
+ // CHECK: store i1 true, i1*
709
+ // CHECK: store i1 true, i1*
710
+ // CHECK: store i1 true, i1*
711
+ // CHECK: store i1 true, i1*
712
+ // CHECK: store i1 false, i1*
713
+ var t1 = Builtin . isbitwisetakable ( Int . self)
714
+ var t2 = Builtin . isbitwisetakable ( C . self)
715
+ var t3 = Builtin . isbitwisetakable ( Abc . self)
716
+ var t4 = Builtin . isbitwisetakable ( Empty . self)
717
+ var f = Builtin . isbitwisetakable ( W . self)
718
+ }
719
+
695
720
// CHECK-LABEL: define {{.*}} @{{.*}}is_same_metatype
696
721
func is_same_metatype_test( _ t1: Any . Type , _ t2: Any . Type ) {
697
722
// CHECK: [[MT1_AS_PTR:%.*]] = bitcast %swift.type* %0 to i8*
0 commit comments