@@ -1411,3 +1411,40 @@ entry(%instance : $FC):
1411
1411
return %retval : $()
1412
1412
}
1413
1413
1414
+ sil_global private @g_token : $Builtin.Word
1415
+ sil_global private @g2_token : $Builtin.Word
1416
+
1417
+ sil @g_init : $@convention(c) () -> ()
1418
+
1419
+ // CHECK-LABEL: sil @cse_builtin_once :
1420
+ // CHECK: builtin
1421
+ // CHECK-NOT: builtin
1422
+ // CHECK: } // end sil function 'cse_builtin_once'
1423
+ sil @cse_builtin_once : $@convention(thin) () -> () {
1424
+ bb0:
1425
+ %1 = global_addr @g_token : $*Builtin.Word
1426
+ %2 = address_to_pointer %1 : $*Builtin.Word to $Builtin.RawPointer
1427
+ %3 = function_ref @g_init : $@convention(c) () -> ()
1428
+ %4 = builtin "once"(%2 : $Builtin.RawPointer, %3 : $@convention(c) () -> ()) : $()
1429
+ %5 = builtin "once"(%2 : $Builtin.RawPointer, %3 : $@convention(c) () -> ()) : $()
1430
+ %r1 = tuple ()
1431
+ return %r1 : $()
1432
+ }
1433
+
1434
+ // CHECK-LABEL: sil @dont_cse_builtin_once_different_token :
1435
+ // CHECK: builtin
1436
+ // CHECK: builtin
1437
+ // CHECK: } // end sil function 'dont_cse_builtin_once_different_token'
1438
+ sil @dont_cse_builtin_once_different_token : $@convention(thin) () -> () {
1439
+ bb0:
1440
+ %1 = global_addr @g_token : $*Builtin.Word
1441
+ %2 = address_to_pointer %1 : $*Builtin.Word to $Builtin.RawPointer
1442
+ %3 = global_addr @g2_token : $*Builtin.Word
1443
+ %4 = address_to_pointer %3 : $*Builtin.Word to $Builtin.RawPointer
1444
+ %5 = function_ref @g_init : $@convention(c) () -> ()
1445
+ %6 = builtin "once"(%2 : $Builtin.RawPointer, %5 : $@convention(c) () -> ()) : $()
1446
+ %7 = builtin "once"(%4 : $Builtin.RawPointer, %5 : $@convention(c) () -> ()) : $()
1447
+ %r1 = tuple ()
1448
+ return %r1 : $()
1449
+ }
1450
+
0 commit comments