@@ -200,6 +200,11 @@ class LoweredValue {
200
200
}
201
201
ExternalUnion<Kind, Members, getMemberIndexForKind> Storage;
202
202
203
+ explicit LoweredValue (llvm::Value *singletonValue)
204
+ : kind(Kind::SingletonExplosion) {
205
+ Storage.emplace <SingletonExplosion>(kind, singletonValue);
206
+ }
207
+
203
208
public:
204
209
205
210
// / Create an address value without a stack restore point.
@@ -275,6 +280,10 @@ class LoweredValue {
275
280
Storage.moveConstruct (kind, std::move (lv.Storage ));
276
281
}
277
282
283
+ static LoweredValue forSingletonExplosion (llvm::Value *value) {
284
+ return LoweredValue (value);
285
+ }
286
+
278
287
LoweredValue &operator =(LoweredValue &&lv) {
279
288
Storage.moveAssign (kind, lv.kind , std::move (lv.Storage ));
280
289
kind = lv.kind ;
@@ -491,6 +500,10 @@ class IRGenSILFunction :
491
500
assert (v->getType ().isObject () && " explosion for address value?!" );
492
501
setLoweredValue (v, LoweredValue (e));
493
502
}
503
+ void setLoweredSingletonExplosion (SILValue v, llvm::Value *value) {
504
+ assert (v->getType ().isObject () && " explosion for address value?!" );
505
+ setLoweredValue (v, LoweredValue::forSingletonExplosion (value));
506
+ }
494
507
495
508
void setCorrespondingLoweredValues (SILInstructionResultArray results,
496
509
Explosion &allValues) {
0 commit comments