Skip to content

Commit bdaada6

Browse files
committed
Add a utility to generate a known-trivial load
1 parent 60d2a93 commit bdaada6

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

lib/SILGen/SILGenBuilder.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,20 @@ ManagedValue SILGenBuilder::createLoadTake(SILLocation loc, ManagedValue v,
486486
return SGF.emitManagedRValueWithCleanup(result, lowering);
487487
}
488488

489+
ManagedValue SILGenBuilder::createLoadTrivial(SILLocation loc,
490+
ManagedValue addr) {
491+
#ifndef NDEBUG
492+
auto &lowering = SGF.getTypeLowering(addr.getType());
493+
assert(lowering.isTrivial());
494+
assert((!lowering.isAddressOnly() || !SGF.silConv.useLoweredAddresses()) &&
495+
"cannot load an unloadable type");
496+
assert(!addr.hasCleanup());
497+
#endif
498+
auto value = createLoad(loc, addr.getValue(),
499+
LoadOwnershipQualifier::Trivial);
500+
return ManagedValue::forObjectRValueWithoutOwnership(value);
501+
}
502+
489503
ManagedValue SILGenBuilder::createLoadCopy(SILLocation loc, ManagedValue v) {
490504
auto &lowering = SGF.getTypeLowering(v.getType());
491505
return createLoadCopy(loc, v, lowering);

lib/SILGen/SILGenBuilder.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,8 @@ class SILGenBuilder : public SILBuilder {
267267
ManagedValue createLoadCopy(SILLocation loc, ManagedValue addr,
268268
const TypeLowering &lowering);
269269

270+
ManagedValue createLoadTrivial(SILLocation loc, ManagedValue addr);
271+
270272
/// Create a SILArgument for an input parameter. Asserts if used to create a
271273
/// function argument for an out parameter.
272274
ManagedValue createInputFunctionArgument(

0 commit comments

Comments
 (0)