Skip to content

Commit 0ecd4ff

Browse files
Merge pull request #39686 from aschwaighofer/update_deprecated_decls_irgen
Fix some deprecated uses of IRBuilder API
2 parents 854cb66 + 8f159cf commit 0ecd4ff

12 files changed

+114
-46
lines changed

lib/IRGen/GenCall.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2020,7 +2020,9 @@ std::pair<llvm::Value *, llvm::Value *> irgen::getAsyncFunctionAndSize(
20202020
} else if (auto *function = functionPointer.getRawAsyncFunction()) {
20212021
fn = function;
20222022
} else {
2023-
llvm::Value *addrPtr = IGF.Builder.CreateStructGEP(getAFPPtr(), 0);
2023+
llvm::Value *addrPtr = IGF.Builder.CreateStructGEP(
2024+
getAFPPtr()->getType()->getScalarType()->getPointerElementType(),
2025+
getAFPPtr(), 0);
20242026
fn = IGF.emitLoadOfRelativePointer(
20252027
Address(addrPtr, IGF.IGM.getPointerAlignment()), /*isFar*/ false,
20262028
/*expectedType*/ functionPointer.getFunctionType()->getPointerTo());
@@ -2037,7 +2039,9 @@ std::pair<llvm::Value *, llvm::Value *> irgen::getAsyncFunctionAndSize(
20372039
initialContextSize.getValue());
20382040
} else {
20392041
assert(!functionPointer.useStaticContextSize());
2040-
auto *sizePtr = IGF.Builder.CreateStructGEP(getAFPPtr(), 1);
2042+
auto *sizePtr = IGF.Builder.CreateStructGEP(
2043+
getAFPPtr()->getType()->getScalarType()->getPointerElementType(),
2044+
getAFPPtr(), 1);
20412045
size = IGF.Builder.CreateLoad(sizePtr, IGF.IGM.getPointerAlignment());
20422046
}
20432047
}
@@ -4830,7 +4834,9 @@ llvm::Value *FunctionPointer::getPointer(IRGenFunction &IGF) const {
48304834
}
48314835
auto *descriptorPtr =
48324836
IGF.Builder.CreateBitCast(fnPtr, IGF.IGM.AsyncFunctionPointerPtrTy);
4833-
auto *addrPtr = IGF.Builder.CreateStructGEP(descriptorPtr, 0);
4837+
auto *addrPtr = IGF.Builder.CreateStructGEP(
4838+
descriptorPtr->getType()->getScalarType()->getPointerElementType(),
4839+
descriptorPtr, 0);
48344840
auto *result = IGF.emitLoadOfRelativePointer(
48354841
Address(addrPtr, IGF.IGM.getPointerAlignment()), /*isFar*/ false,
48364842
/*expectedType*/ getFunctionType()->getPointerTo());

lib/IRGen/GenClass.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,8 @@ llvm::Value *IRGenFunction::emitByteOffsetGEP(llvm::Value *base,
478478
const llvm::Twine &name) {
479479
assert(offset->getType() == IGM.SizeTy || offset->getType() == IGM.Int32Ty);
480480
auto addr = Builder.CreateBitCast(base, IGM.Int8PtrTy);
481-
addr = Builder.CreateInBoundsGEP(addr, offset);
481+
addr = Builder.CreateInBoundsGEP(
482+
addr->getType()->getScalarType()->getPointerElementType(), addr, offset);
482483
return Builder.CreateBitCast(addr, objectType->getPointerTo(), name);
483484
}
484485

lib/IRGen/GenHeap.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1852,7 +1852,9 @@ static llvm::Value *emitLoadOfHeapMetadataRef(IRGenFunction &IGF,
18521852
structTy = dyn_cast<llvm::StructType>(eltTy);
18531853
} while (structTy != nullptr);
18541854

1855-
slot = IGF.Builder.CreateInBoundsGEP(object, indexes);
1855+
slot = IGF.Builder.CreateInBoundsGEP(
1856+
object->getType()->getScalarType()->getPointerElementType(), object,
1857+
indexes);
18561858

18571859
if (!suppressCast) {
18581860
slot = IGF.Builder.CreateBitCast(slot,

lib/IRGen/GenKeyPath.cpp

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ bindPolymorphicArgumentsFromComponentIndices(IRGenFunction &IGF,
8787
requirements.size() * IGF.IGM.getPointerSize().getValue());
8888

8989
auto genericArgsOffset = IGF.Builder.CreateSub(size, genericArgsSize);
90-
args = IGF.Builder.CreateInBoundsGEP(args, genericArgsOffset);
90+
args = IGF.Builder.CreateInBoundsGEP(
91+
args->getType()->getScalarType()->getPointerElementType(), args,
92+
genericArgsOffset);
9193
}
9294
bindFromGenericRequirementsBuffer(IGF, requirements,
9395
Address(args, IGF.IGM.getPointerAlignment()),
@@ -414,7 +416,10 @@ getWitnessTableForComputedComponent(IRGenModule &IGM,
414416
} else {
415417
offset = llvm::ConstantInt::get(IGM.SizeTy, 0);
416418
}
417-
auto elt = IGF.Builder.CreateInBoundsGEP(componentArgsBuf, offset);
419+
auto elt = IGF.Builder.CreateInBoundsGEP(componentArgsBuf->getType()
420+
->getScalarType()
421+
->getPointerElementType(),
422+
componentArgsBuf, offset);
418423
auto eltAddr = ti.getAddressForPointer(
419424
IGF.Builder.CreateBitCast(elt, ti.getStorageType()->getPointerTo()));
420425
ti.destroy(IGF, eltAddr, ty,
@@ -466,8 +471,12 @@ getWitnessTableForComputedComponent(IRGenModule &IGM,
466471
} else {
467472
offset = llvm::ConstantInt::get(IGM.SizeTy, 0);
468473
}
469-
auto sourceElt = IGF.Builder.CreateInBoundsGEP(sourceArgsBuf, offset);
470-
auto destElt = IGF.Builder.CreateInBoundsGEP(destArgsBuf, offset);
474+
auto sourceElt = IGF.Builder.CreateInBoundsGEP(
475+
sourceArgsBuf->getType()->getScalarType()->getPointerElementType(),
476+
sourceArgsBuf, offset);
477+
auto destElt = IGF.Builder.CreateInBoundsGEP(
478+
destArgsBuf->getType()->getScalarType()->getPointerElementType(),
479+
destArgsBuf, offset);
471480
auto sourceEltAddr = ti.getAddressForPointer(
472481
IGF.Builder.CreateBitCast(sourceElt,
473482
ti.getStorageType()->getPointerTo()));
@@ -487,10 +496,14 @@ getWitnessTableForComputedComponent(IRGenModule &IGM,
487496
auto notAlignMask = IGF.Builder.CreateNot(envAlignMask);
488497
offset = IGF.Builder.CreateAdd(offset, envAlignMask);
489498
offset = IGF.Builder.CreateAnd(offset, notAlignMask);
490-
491-
auto sourceEnv = IGF.Builder.CreateInBoundsGEP(sourceArgsBuf, offset);
492-
auto destEnv = IGF.Builder.CreateInBoundsGEP(destArgsBuf, offset);
493-
499+
500+
auto sourceEnv = IGF.Builder.CreateInBoundsGEP(
501+
sourceArgsBuf->getType()->getScalarType()->getPointerElementType(),
502+
sourceArgsBuf, offset);
503+
auto destEnv = IGF.Builder.CreateInBoundsGEP(
504+
destArgsBuf->getType()->getScalarType()->getPointerElementType(),
505+
destArgsBuf, offset);
506+
494507
auto align = IGM.getPointerAlignment().getValue();
495508
IGF.Builder.CreateMemCpy(destEnv, llvm::MaybeAlign(align), sourceEnv,
496509
llvm::MaybeAlign(align),
@@ -601,8 +614,10 @@ getInitializerForComputedComponent(IRGenModule &IGM,
601614
offset = IGF.Builder.CreateAdd(offset, alignMask);
602615
offset = IGF.Builder.CreateAnd(offset, notAlignMask);
603616
}
604-
605-
auto ptr = IGF.Builder.CreateInBoundsGEP(src, offset);
617+
618+
auto ptr = IGF.Builder.CreateInBoundsGEP(
619+
src->getType()->getScalarType()->getPointerElementType(), src,
620+
offset);
606621
auto addr = ti.getAddressForPointer(IGF.Builder.CreateBitCast(
607622
ptr, ti.getStorageType()->getPointerTo()));
608623
srcAddresses.push_back(addr);
@@ -630,8 +645,10 @@ getInitializerForComputedComponent(IRGenModule &IGM,
630645
offset = IGF.Builder.CreateAdd(offset, alignMask);
631646
offset = IGF.Builder.CreateAnd(offset, notAlignMask);
632647
}
633-
634-
auto ptr = IGF.Builder.CreateInBoundsGEP(dest, offset);
648+
649+
auto ptr = IGF.Builder.CreateInBoundsGEP(
650+
dest->getType()->getScalarType()->getPointerElementType(), dest,
651+
offset);
635652
auto destAddr = ti.getAddressForPointer(IGF.Builder.CreateBitCast(
636653
ptr, ti.getStorageType()->getPointerTo()));
637654

@@ -660,7 +677,9 @@ getInitializerForComputedComponent(IRGenModule &IGM,
660677
auto notGenericEnvAlignMask = IGF.Builder.CreateNot(genericEnvAlignMask);
661678
offset = IGF.Builder.CreateAdd(offset, genericEnvAlignMask);
662679
offset = IGF.Builder.CreateAnd(offset, notGenericEnvAlignMask);
663-
destGenericEnv = IGF.Builder.CreateInBoundsGEP(dest, offset);
680+
destGenericEnv = IGF.Builder.CreateInBoundsGEP(
681+
dest->getType()->getScalarType()->getPointerElementType(), dest,
682+
offset);
664683
}
665684

666685
auto align = IGM.getPointerAlignment().getValue();

lib/IRGen/GenOpaque.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,8 @@ llvm::Value *irgen::emitInvariantLoadOfOpaqueWitness(IRGenFunction &IGF,
343343
assert(table->getType() == IGF.IGM.WitnessTablePtrTy);
344344

345345
// GEP to the appropriate index.
346-
llvm::Value *slot = IGF.Builder.CreateInBoundsGEP(table, index);
346+
llvm::Value *slot = IGF.Builder.CreateInBoundsGEP(
347+
table->getType()->getScalarType()->getPointerElementType(), table, index);
347348

348349
if (slotPtr) *slotPtr = slot;
349350

lib/IRGen/GenStruct.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -306,9 +306,12 @@ namespace {
306306
// the compiler's idea of the offset.
307307
auto metadataBytes =
308308
IGF.Builder.CreateBitCast(metadata, IGF.IGM.Int8PtrTy);
309-
auto fieldOffsetPtr =
310-
IGF.Builder.CreateInBoundsGEP(metadataBytes,
311-
IGF.IGM.getSize(scanner.FieldOffset - scanner.AddressPoint));
309+
auto fieldOffsetPtr = IGF.Builder.CreateInBoundsGEP(
310+
metadataBytes->getType()
311+
->getScalarType()
312+
->getPointerElementType(),
313+
metadataBytes,
314+
IGF.IGM.getSize(scanner.FieldOffset - scanner.AddressPoint));
312315
fieldOffsetPtr =
313316
IGF.Builder.CreateBitCast(fieldOffsetPtr,
314317
IGF.IGM.Int32Ty->getPointerTo());

lib/IRGen/GenTuple.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ namespace {
8383
IGF.IGM.getSize(Size(index)), // [index]
8484
llvm::ConstantInt::get(IGF.IGM.Int32Ty, 1) // .Offset
8585
};
86-
auto slot = IGF.Builder.CreateInBoundsGEP(asTuple, indices);
86+
auto slot = IGF.Builder.CreateInBoundsGEP(
87+
asTuple->getType()->getScalarType()->getPointerElementType(), asTuple,
88+
indices);
8789

8890
return IGF.Builder.CreateLoad(slot, IGF.IGM.getPointerAlignment(),
8991
metadata->getName()

lib/IRGen/GenValueWitness.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,11 +1367,15 @@ Address TypeInfo::indexArray(IRGenFunction &IGF, Address base,
13671367
if (size->getType() != index->getType())
13681368
size = IGF.Builder.CreateZExtOrTrunc(size, index->getType());
13691369
llvm::Value *distance = IGF.Builder.CreateNSWMul(index, size);
1370-
destValue = IGF.Builder.CreateInBoundsGEP(byteAddr, distance);
1370+
destValue = IGF.Builder.CreateInBoundsGEP(
1371+
byteAddr->getType()->getScalarType()->getPointerElementType(), byteAddr,
1372+
distance);
13711373
destValue = IGF.Builder.CreateBitCast(destValue, base.getType());
13721374
} else {
13731375
// We don't expose a non-inbounds GEP operation.
1374-
destValue = IGF.Builder.CreateInBoundsGEP(base.getAddress(), index);
1376+
destValue = IGF.Builder.CreateInBoundsGEP(
1377+
base.getAddress()->getType()->getScalarType()->getPointerElementType(),
1378+
base.getAddress(), index);
13751379
stride = fixedTI->getFixedStride();
13761380
}
13771381
if (auto *IndexConst = dyn_cast<llvm::ConstantInt>(index)) {

lib/IRGen/IRBuilder.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ class IRBuilder : public IRBuilderBase {
124124

125125
llvm::LoadInst *CreateLoad(llvm::Value *addr, Alignment align,
126126
const llvm::Twine &name = "") {
127-
llvm::LoadInst *load = IRBuilderBase::CreateLoad(addr, name);
127+
llvm::LoadInst *load = IRBuilderBase::CreateLoad(
128+
addr->getType()->getPointerElementType(), addr, name);
128129
load->setAlignment(llvm::MaybeAlign(align.getValue()).valueOrOne());
129130
return load;
130131
}

lib/IRGen/IRGenFunction.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,9 @@ Address IRGenFunction::emitAddressAtOffset(llvm::Value *base, Offset offset,
446446
auto scaledIndex =
447447
int64_t(byteOffset.getValue()) / int64_t(objectSize.getValue());
448448
auto indexValue = IGM.getSize(Size(scaledIndex));
449-
auto slotPtr = Builder.CreateInBoundsGEP(base, indexValue);
449+
auto slotPtr = Builder.CreateInBoundsGEP(
450+
base->getType()->getScalarType()->getPointerElementType(), base,
451+
indexValue);
450452

451453
return Address(slotPtr, objectAlignment);
452454
}
@@ -684,8 +686,11 @@ void IRGenFunction::emitAwaitAsyncContinuation(
684686
// swift_continuation_await, emit the old inline sequence. This can
685687
// be removed as soon as we're sure that such SDKs don't exist.
686688
if (!useContinuationAwait) {
687-
auto contAwaitSyncAddr =
688-
Builder.CreateStructGEP(AsyncCoroutineCurrentContinuationContext, 1);
689+
auto contAwaitSyncAddr = Builder.CreateStructGEP(
690+
AsyncCoroutineCurrentContinuationContext->getType()
691+
->getScalarType()
692+
->getPointerElementType(),
693+
AsyncCoroutineCurrentContinuationContext, 1);
689694

690695
auto pendingV = llvm::ConstantInt::get(
691696
contAwaitSyncAddr->getType()->getPointerElementType(),
@@ -754,9 +759,13 @@ void IRGenFunction::emitAwaitAsyncContinuation(
754759
// to the error destination.
755760
if (optionalErrorBB) {
756761
auto normalContBB = createBasicBlock("await.async.normal");
757-
auto contErrResultAddr = Address(
758-
Builder.CreateStructGEP(AsyncCoroutineCurrentContinuationContext, 2),
759-
pointerAlignment);
762+
auto contErrResultAddr =
763+
Address(Builder.CreateStructGEP(
764+
AsyncCoroutineCurrentContinuationContext->getType()
765+
->getScalarType()
766+
->getPointerElementType(),
767+
AsyncCoroutineCurrentContinuationContext, 2),
768+
pointerAlignment);
760769
auto errorRes = Builder.CreateLoad(contErrResultAddr);
761770
auto nullError = llvm::Constant::getNullValue(errorRes->getType());
762771
auto hasError = Builder.CreateICmpNE(errorRes, nullError);
@@ -769,8 +778,11 @@ void IRGenFunction::emitAwaitAsyncContinuation(
769778
// result slot, load from the temporary we created during
770779
// get_async_continuation.
771780
if (!isIndirectResult) {
772-
auto contResultAddrAddr =
773-
Builder.CreateStructGEP(AsyncCoroutineCurrentContinuationContext, 3);
781+
auto contResultAddrAddr = Builder.CreateStructGEP(
782+
AsyncCoroutineCurrentContinuationContext->getType()
783+
->getScalarType()
784+
->getPointerElementType(),
785+
AsyncCoroutineCurrentContinuationContext, 3);
774786
auto resultAddrVal =
775787
Builder.CreateLoad(Address(contResultAddrAddr, pointerAlignment));
776788
// Take the result.

lib/IRGen/IRGenSIL.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,7 +1010,8 @@ class IRGenSILFunction :
10101010
auto shadow = Alloca.getAddress();
10111011
auto inst = cast<llvm::Instruction>(shadow);
10121012
llvm::IRBuilder<> builder(inst->getNextNode());
1013-
shadow = builder.CreateLoad(shadow);
1013+
shadow = builder.CreateLoad(shadow->getType()->getPointerElementType(),
1014+
shadow);
10141015
copy.push_back(shadow);
10151016
return;
10161017
}
@@ -2482,7 +2483,9 @@ void IRGenSILFunction::visitDifferentiabilityWitnessFunctionInst(
24822483
llvm_unreachable("Not yet implemented");
24832484
}
24842485

2485-
diffWitness = Builder.CreateStructGEP(diffWitness, offset);
2486+
diffWitness = Builder.CreateStructGEP(
2487+
diffWitness->getType()->getScalarType()->getPointerElementType(),
2488+
diffWitness, offset);
24862489
diffWitness = Builder.CreateLoad(diffWitness, IGM.getPointerAlignment());
24872490

24882491
auto fnType = cast<SILFunctionType>(i->getType().getASTType());
@@ -5148,7 +5151,8 @@ void IRGenSILFunction::emitDebugInfoForAllocStack(AllocStackInst *i,
51485151
ValueDomPoints.push_back({shadow, getActiveDominancePoint()});
51495152
auto inst = cast<llvm::Instruction>(shadow);
51505153
llvm::IRBuilder<> builder(inst->getNextNode());
5151-
addr = builder.CreateLoad(shadow);
5154+
addr =
5155+
builder.CreateLoad(shadow->getType()->getPointerElementType(), shadow);
51525156
}
51535157

51545158
bindArchetypes(DbgTy.getType());
@@ -6243,8 +6247,12 @@ void IRGenSILFunction::visitKeyPathInst(swift::KeyPathInst *I) {
62436247
for (unsigned i : indices(I->getAllOperands())) {
62446248
auto operand = I->getAllOperands()[i].get();
62456249
auto &ti = getTypeInfo(operand->getType());
6246-
auto ptr = Builder.CreateInBoundsGEP(argsBuf.getAddress(),
6247-
operandOffsets[i]);
6250+
auto ptr =
6251+
Builder.CreateInBoundsGEP(argsBuf.getAddress()
6252+
->getType()
6253+
->getScalarType()
6254+
->getPointerElementType(),
6255+
argsBuf.getAddress(), operandOffsets[i]);
62486256
auto addr = ti.getAddressForPointer(
62496257
Builder.CreateBitCast(ptr, ti.getStorageType()->getPointerTo()));
62506258
if (operand->getType().isAddress()) {
@@ -6334,8 +6342,9 @@ void IRGenSILFunction::visitIndexRawPointerInst(swift::IndexRawPointerInst *i) {
63346342
llvm::Value *index = indexValues.claimNext();
63356343

63366344
// We don't expose a non-inbounds GEP operation.
6337-
llvm::Value *destValue = Builder.CreateInBoundsGEP(base, index);
6338-
6345+
llvm::Value *destValue = Builder.CreateInBoundsGEP(
6346+
base->getType()->getScalarType()->getPointerElementType(), base, index);
6347+
63396348
Explosion result;
63406349
result.add(destValue);
63416350
setLoweredExplosion(i, result);

lib/IRGen/TypeLayout.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,9 @@ llvm::Value *TypeLayoutEntry::getEnumTagSinglePayloadGeneric(
402402
// Read the value stored in the extra tag bytes.
403403
auto *valueAddr =
404404
Builder.CreateBitOrPointerCast(addr.getAddress(), IGM.Int8PtrTy);
405-
auto *extraTagBitsAddr = Builder.CreateInBoundsGEP(valueAddr, size);
405+
auto *extraTagBitsAddr = Builder.CreateInBoundsGEP(
406+
valueAddr->getType()->getScalarType()->getPointerElementType(), valueAddr,
407+
size);
406408
auto *extraTagBits = emitGetTag(IGF, Address(extraTagBitsAddr, Alignment(1)),
407409
numExtraTagBytes);
408410

@@ -505,8 +507,11 @@ void TypeLayoutEntry::storeEnumTagSinglePayloadGeneric(
505507

506508
auto *valueAddr =
507509
Builder.CreateBitOrPointerCast(addr.getAddress(), IGM.Int8PtrTy);
508-
auto extraTagBitsAddr =
509-
Address(Builder.CreateInBoundsGEP(valueAddr, size), Alignment(1));
510+
auto extraTagBitsAddr = Address(
511+
Builder.CreateInBoundsGEP(
512+
valueAddr->getType()->getScalarType()->getPointerElementType(),
513+
valueAddr, size),
514+
Alignment(1));
510515

511516
// Do we need extra tag bytes.
512517
auto *entryBB = Builder.GetInsertBlock();
@@ -2226,8 +2231,11 @@ EnumTypeLayoutEntry::getMultiPalyloadEnumTagByteAddrAndNumBytes(
22262231
auto payloadSize = maxPayloadSize(IGF);
22272232
auto *valueAddr =
22282233
Builder.CreateBitOrPointerCast(addr.getAddress(), IGM.Int8PtrTy);
2229-
auto extraTagBytesAddr =
2230-
Address(Builder.CreateInBoundsGEP(valueAddr, payloadSize), Alignment(1));
2234+
auto extraTagBytesAddr = Address(
2235+
Builder.CreateInBoundsGEP(
2236+
valueAddr->getType()->getScalarType()->getPointerElementType(),
2237+
valueAddr, payloadSize),
2238+
Alignment(1));
22312239
auto numPayloads = IGM.getInt32(cases.size());
22322240
auto emptyCaseCount = IGM.getInt32(numEmptyCases);
22332241

0 commit comments

Comments
 (0)