@@ -3262,13 +3262,29 @@ void EnumTypeLayoutEntry::storeMultiPayloadValue(IRGenFunction &IGF,
32623262 Address enumAddr) const {
32633263 auto &IGM = IGF.IGM ;
32643264 auto &Builder = IGF.Builder ;
3265+
3266+ auto emptyBB = IGF.createBasicBlock (" empty-payload" );
3267+ auto nonEmptyBB = IGF.createBasicBlock (" non-empty-payload" );
3268+ auto contBB = IGF.createBasicBlock (" " );
3269+
32653270 auto truncSize = Builder.CreateZExtOrTrunc (maxPayloadSize (IGF), IGM.Int32Ty );
3271+ auto empty =
3272+ Builder.CreateICmpEQ (truncSize, llvm::ConstantInt::get (IGM.Int32Ty , 0 ));
3273+
3274+ Builder.CreateCondBr (empty, emptyBB, nonEmptyBB);
3275+
3276+ Builder.emitBlock (nonEmptyBB);
32663277 auto four = IGM.getInt32 (4 );
32673278 auto sizeGTE4 = Builder.CreateICmpUGE (truncSize, four);
32683279 auto sizeClampedTo4 = Builder.CreateSelect (sizeGTE4, four, truncSize);
32693280 Builder.CreateMemSet (enumAddr, llvm::ConstantInt::get (IGF.IGM .Int8Ty , 0 ),
32703281 truncSize);
32713282 emitStore1to4Bytes (IGF, enumAddr, value, sizeClampedTo4);
3283+ Builder.CreateBr (contBB);
3284+
3285+ Builder.emitBlock (emptyBB);
3286+ Builder.CreateBr (contBB);
3287+ Builder.emitBlock (contBB);
32723288}
32733289
32743290void EnumTypeLayoutEntry::storeEnumTagSinglePayloadForMultiPayloadEnum (
0 commit comments