@@ -3312,6 +3312,14 @@ namespace {
33123312 void initializeWithTake (IRGenFunction &IGF, Address dest, Address src,
33133313 SILType T, bool isOutlined,
33143314 bool zeroizeIfSensitive) const override {
3315+ if (TI->isBitwiseTakable (ResilienceExpansion::Maximal)) {
3316+ IGF.Builder .CreateMemCpy (
3317+ dest.getAddress (), llvm::MaybeAlign (dest.getAlignment ().getValue ()),
3318+ src.getAddress (), llvm::MaybeAlign (src.getAlignment ().getValue ()),
3319+ TI->getSize (IGF, T));
3320+ return ;
3321+ }
3322+
33153323 if (!ElementsAreABIAccessible) {
33163324 emitInitializeWithTakeCall (IGF, T, dest, src);
33173325 } else if (isOutlined || T.hasParameterizedExistential ()) {
@@ -5227,6 +5235,14 @@ namespace {
52275235 void initializeWithTake (IRGenFunction &IGF, Address dest, Address src,
52285236 SILType T, bool isOutlined,
52295237 bool zeroizeIfSensitive) const override {
5238+ if (TI->isBitwiseTakable (ResilienceExpansion::Maximal)) {
5239+ IGF.Builder .CreateMemCpy (
5240+ dest.getAddress (), llvm::MaybeAlign (dest.getAlignment ().getValue ()),
5241+ src.getAddress (), llvm::MaybeAlign (src.getAlignment ().getValue ()),
5242+ TI->getSize (IGF, T));
5243+ return ;
5244+ }
5245+
52305246 if (!ElementsAreABIAccessible) {
52315247 emitInitializeWithTakeCall (IGF, T, dest, src);
52325248 } else if (isOutlined || T.hasParameterizedExistential ()) {
0 commit comments