@@ -1458,3 +1458,176 @@ bb3:
1458
1458
%r = tuple ()
1459
1459
return %r : $()
1460
1460
}
1461
+
1462
+ // CHECK-LABEL: sil [ossa] @isNativeUnavailable1 :
1463
+ // CHECK: [[ISNATIVE:%.*]] = function_ref @arrayPropertyIsNative :
1464
+ // CHECK: bb1:
1465
+ // CHECK: [[CHECKBOUNDS:%.*]] = function_ref @checkbounds :
1466
+ // CHECK: apply [[ISNATIVE]]
1467
+ // CHECK: apply [[CHECKBOUNDS]]
1468
+ // CHECK: bb2
1469
+ // CHECK-LABEL: } // end sil function 'isNativeUnavailable1'
1470
+ sil [ossa] @isNativeUnavailable1 : $@convention(thin) (Int32, @owned ArrayInt) -> Int32 {
1471
+ bb0(%0 : $Int32, %1 : @owned $ArrayInt):
1472
+ %2 = integer_literal $Builtin.Int1, -1
1473
+ %3 = struct $Bool (%2)
1474
+ %4 = struct_extract %0, #Int32._value
1475
+ %5 = integer_literal $Builtin.Int32, 0
1476
+ %6 = builtin "cmp_eq_Int32"(%5, %4) : $Builtin.Int1
1477
+ %7 = begin_borrow %1
1478
+ %8 = copy_value %7
1479
+ %9 = function_ref @arrayPropertyIsNative : $@convention(method) (@guaranteed ArrayInt) -> Bool
1480
+ %10 = apply %9(%7) : $@convention(method) (@guaranteed ArrayInt) -> Bool
1481
+ end_borrow %7
1482
+ cond_br %6, bb2, bb1
1483
+
1484
+ bb1:
1485
+ br bb3(%5)
1486
+
1487
+ bb2:
1488
+ destroy_value %8
1489
+ destroy_value %1
1490
+ br bb6(%5)
1491
+
1492
+ bb3(%17 : $Builtin.Int32):
1493
+ %18 = struct $Int32 (%17)
1494
+ %19 = function_ref @checkbounds : $@convention(method) (Int32, Bool, @guaranteed ArrayInt) -> _DependenceToken
1495
+ %20 = apply %19(%18, %10, %8) : $@convention(method) (Int32, Bool, @guaranteed ArrayInt) -> _DependenceToken
1496
+ %21 = integer_literal $Builtin.Int32, 1
1497
+ %22 = integer_literal $Builtin.Int1, -1
1498
+ %23 = builtin "sadd_with_overflow_Int32"(%17, %21, %22) : $(Builtin.Int32, Builtin.Int1)
1499
+ %24 = tuple_extract %23, 0
1500
+ %25 = tuple_extract %23, 1
1501
+ cond_fail %25, ""
1502
+ %27 = builtin "cmp_eq_Int32"(%24, %4) : $Builtin.Int1
1503
+ cond_br %27, bb5, bb4
1504
+
1505
+ bb4:
1506
+ br bb3(%24)
1507
+
1508
+ bb5:
1509
+ destroy_value %8
1510
+ destroy_value %1
1511
+ br bb6(%24)
1512
+
1513
+ bb6(%33 : $Builtin.Int32):
1514
+ %34 = struct $Int32 (%33)
1515
+ return %34
1516
+ }
1517
+
1518
+ // CHECK-LABEL: sil [ossa] @isNativeUnavailable2 :
1519
+ // CHECK: [[ISNATIVE:%.*]] = function_ref @arrayPropertyIsNative :
1520
+ // CHECK: bb1:
1521
+ // CHECK: [[CHECKBOUNDS:%.*]] = function_ref @checkbounds :
1522
+ // CHECK: apply [[ISNATIVE]]
1523
+ // CHECK: apply [[CHECKBOUNDS]]
1524
+ // CHECK: bb2
1525
+ // CHECK-LABEL: } // end sil function 'isNativeUnavailable2'
1526
+ sil [ossa] @isNativeUnavailable2 : $@convention(thin) (Int32, @owned ArrayInt) -> Int32 {
1527
+ bb0(%0 : $Int32, %1 : @owned $ArrayInt):
1528
+ %2 = integer_literal $Builtin.Int1, -1
1529
+ %3 = struct $Bool (%2)
1530
+ %4 = struct_extract %0, #Int32._value
1531
+ %5 = integer_literal $Builtin.Int32, 0
1532
+ %6 = builtin "cmp_eq_Int32"(%5, %4) : $Builtin.Int1
1533
+ %7 = copy_value %1
1534
+ %8 = copy_value %7
1535
+ %9 = function_ref @arrayPropertyIsNative : $@convention(method) (@guaranteed ArrayInt) -> Bool
1536
+ %10 = apply %9(%7) : $@convention(method) (@guaranteed ArrayInt) -> Bool
1537
+ destroy_value %7
1538
+ cond_br %6, bb2, bb1
1539
+
1540
+ bb1:
1541
+ br bb3(%5)
1542
+
1543
+ bb2:
1544
+ destroy_value %8
1545
+ destroy_value %1
1546
+ br bb6(%5)
1547
+
1548
+ bb3(%17 : $Builtin.Int32):
1549
+ %18 = struct $Int32 (%17)
1550
+ %19 = function_ref @checkbounds : $@convention(method) (Int32, Bool, @guaranteed ArrayInt) -> _DependenceToken
1551
+ %20 = apply %19(%18, %10, %8) : $@convention(method) (Int32, Bool, @guaranteed ArrayInt) -> _DependenceToken
1552
+ %21 = integer_literal $Builtin.Int32, 1
1553
+ %22 = integer_literal $Builtin.Int1, -1
1554
+ %23 = builtin "sadd_with_overflow_Int32"(%17, %21, %22) : $(Builtin.Int32, Builtin.Int1)
1555
+ %24 = tuple_extract %23, 0
1556
+ %25 = tuple_extract %23, 1
1557
+ cond_fail %25, ""
1558
+ %27 = builtin "cmp_eq_Int32"(%24, %4) : $Builtin.Int1
1559
+ cond_br %27, bb5, bb4
1560
+
1561
+ bb4:
1562
+ br bb3(%24)
1563
+
1564
+ bb5:
1565
+ destroy_value %8
1566
+ destroy_value %1
1567
+ br bb6(%24)
1568
+
1569
+ bb6(%33 : $Builtin.Int32):
1570
+ %34 = struct $Int32 (%33)
1571
+ return %34
1572
+ }
1573
+
1574
+ struct Wrapper {
1575
+ let arr: ArrayInt
1576
+ }
1577
+
1578
+ // CHECK-LABEL: sil [ossa] @isNativeUnavailable3 :
1579
+ // CHECK: [[ISNATIVE:%.*]] = function_ref @arrayPropertyIsNative :
1580
+ // CHECK: bb1:
1581
+ // CHECK: [[CHECKBOUNDS:%.*]] = function_ref @checkbounds :
1582
+ // CHECK: apply [[ISNATIVE]]
1583
+ // CHECK: apply [[CHECKBOUNDS]]
1584
+ // CHECK: bb2
1585
+ // CHECK-LABEL: } // end sil function 'isNativeUnavailable3'
1586
+ sil [ossa] @isNativeUnavailable3 : $@convention(thin) (Int32, @owned Wrapper) -> Int32 {
1587
+ bb0(%0 : $Int32, %1 : @owned $Wrapper):
1588
+ %2 = integer_literal $Builtin.Int1, -1
1589
+ %3 = struct $Bool (%2)
1590
+ %4 = struct_extract %0, #Int32._value
1591
+ %5 = integer_literal $Builtin.Int32, 0
1592
+ %6 = builtin "cmp_eq_Int32"(%5, %4) : $Builtin.Int1
1593
+ %7 = begin_borrow %1
1594
+ %7a = struct_extract %7, #Wrapper.arr
1595
+ %8 = copy_value %7a
1596
+ %9 = function_ref @arrayPropertyIsNative : $@convention(method) (@guaranteed ArrayInt) -> Bool
1597
+ %10 = apply %9(%7a) : $@convention(method) (@guaranteed ArrayInt) -> Bool
1598
+ end_borrow %7
1599
+ cond_br %6, bb2, bb1
1600
+
1601
+ bb1:
1602
+ br bb3(%5)
1603
+
1604
+ bb2:
1605
+ destroy_value %8
1606
+ destroy_value %1
1607
+ br bb6(%5)
1608
+
1609
+ bb3(%17 : $Builtin.Int32):
1610
+ %18 = struct $Int32 (%17)
1611
+ %19 = function_ref @checkbounds : $@convention(method) (Int32, Bool, @guaranteed ArrayInt) -> _DependenceToken
1612
+ %20 = apply %19(%18, %10, %8) : $@convention(method) (Int32, Bool, @guaranteed ArrayInt) -> _DependenceToken
1613
+ %21 = integer_literal $Builtin.Int32, 1
1614
+ %22 = integer_literal $Builtin.Int1, -1
1615
+ %23 = builtin "sadd_with_overflow_Int32"(%17, %21, %22) : $(Builtin.Int32, Builtin.Int1)
1616
+ %24 = tuple_extract %23, 0
1617
+ %25 = tuple_extract %23, 1
1618
+ cond_fail %25, ""
1619
+ %27 = builtin "cmp_eq_Int32"(%24, %4) : $Builtin.Int1
1620
+ cond_br %27, bb5, bb4
1621
+
1622
+ bb4:
1623
+ br bb3(%24)
1624
+
1625
+ bb5:
1626
+ destroy_value %8
1627
+ destroy_value %1
1628
+ br bb6(%24)
1629
+
1630
+ bb6(%33 : $Builtin.Int32):
1631
+ %34 = struct $Int32 (%33)
1632
+ return %34
1633
+ }
0 commit comments