Skip to content

Commit 84ee629

Browse files
authored
clang: Remove some pointer bitcasts (llvm#112324)
Obsolete since opaque pointers.
1 parent b0a2546 commit 84ee629

File tree

2 files changed

+13
-37
lines changed

2 files changed

+13
-37
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,9 +1288,8 @@ static llvm::Value *EmitBitTestIntrinsic(CodeGenFunction &CGF,
12881288
// Bit = BitBaseI8[BitPos >> 3] & (1 << (BitPos & 0x7)) != 0;
12891289
Value *ByteIndex = CGF.Builder.CreateAShr(
12901290
BitPos, llvm::ConstantInt::get(BitPos->getType(), 3), "bittest.byteidx");
1291-
Value *BitBaseI8 = CGF.Builder.CreatePointerCast(BitBase, CGF.Int8PtrTy);
1292-
Address ByteAddr(CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, BitBaseI8,
1293-
ByteIndex, "bittest.byteaddr"),
1291+
Address ByteAddr(CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, BitBase, ByteIndex,
1292+
"bittest.byteaddr"),
12941293
CGF.Int8Ty, CharUnits::One());
12951294
Value *PosLow =
12961295
CGF.Builder.CreateAnd(CGF.Builder.CreateTrunc(BitPos, CGF.Int8Ty),
@@ -5658,14 +5657,13 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
56585657
*Arg3 = EmitScalarExpr(E->getArg(3));
56595658
llvm::FunctionType *FTy = llvm::FunctionType::get(
56605659
Int32Ty, llvm::ArrayRef<llvm::Type *>(ArgTys), false);
5661-
Value *BCast = Builder.CreatePointerCast(Arg3, I8PTy);
56625660
// We know the third argument is an integer type, but we may need to cast
56635661
// it to i32.
56645662
if (Arg2->getType() != Int32Ty)
56655663
Arg2 = Builder.CreateZExtOrTrunc(Arg2, Int32Ty);
56665664
return RValue::get(
56675665
EmitRuntimeCall(CGM.CreateRuntimeFunction(FTy, Name),
5668-
{Arg0, Arg1, Arg2, BCast, PacketSize, PacketAlign}));
5666+
{Arg0, Arg1, Arg2, Arg3, PacketSize, PacketAlign}));
56695667
}
56705668
}
56715669
// OpenCL v2.0 s6.13.16 ,s9.17.3.5 - Built-in pipe reserve read and write
@@ -11317,7 +11315,6 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
1131711315
Value *Dst = EmitScalarExpr(E->getArg(0));
1131811316
Value *Val = EmitScalarExpr(E->getArg(1));
1131911317
Value *Size = EmitScalarExpr(E->getArg(2));
11320-
Dst = Builder.CreatePointerCast(Dst, Int8PtrTy);
1132111318
Val = Builder.CreateTrunc(Val, Int8Ty);
1132211319
Size = Builder.CreateIntCast(Size, Int64Ty, false);
1132311320
return Builder.CreateCall(
@@ -11342,34 +11339,27 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
1134211339
}
1134311340

1134411341
if (MTEIntrinsicID != Intrinsic::not_intrinsic) {
11345-
llvm::Type *T = ConvertType(E->getType());
11346-
1134711342
if (MTEIntrinsicID == Intrinsic::aarch64_irg) {
1134811343
Value *Pointer = EmitScalarExpr(E->getArg(0));
1134911344
Value *Mask = EmitScalarExpr(E->getArg(1));
1135011345

11351-
Pointer = Builder.CreatePointerCast(Pointer, Int8PtrTy);
1135211346
Mask = Builder.CreateZExt(Mask, Int64Ty);
11353-
Value *RV = Builder.CreateCall(
11354-
CGM.getIntrinsic(MTEIntrinsicID), {Pointer, Mask});
11355-
return Builder.CreatePointerCast(RV, T);
11347+
return Builder.CreateCall(CGM.getIntrinsic(MTEIntrinsicID),
11348+
{Pointer, Mask});
1135611349
}
1135711350
if (MTEIntrinsicID == Intrinsic::aarch64_addg) {
1135811351
Value *Pointer = EmitScalarExpr(E->getArg(0));
1135911352
Value *TagOffset = EmitScalarExpr(E->getArg(1));
1136011353

11361-
Pointer = Builder.CreatePointerCast(Pointer, Int8PtrTy);
1136211354
TagOffset = Builder.CreateZExt(TagOffset, Int64Ty);
11363-
Value *RV = Builder.CreateCall(
11364-
CGM.getIntrinsic(MTEIntrinsicID), {Pointer, TagOffset});
11365-
return Builder.CreatePointerCast(RV, T);
11355+
return Builder.CreateCall(CGM.getIntrinsic(MTEIntrinsicID),
11356+
{Pointer, TagOffset});
1136611357
}
1136711358
if (MTEIntrinsicID == Intrinsic::aarch64_gmi) {
1136811359
Value *Pointer = EmitScalarExpr(E->getArg(0));
1136911360
Value *ExcludedMask = EmitScalarExpr(E->getArg(1));
1137011361

1137111362
ExcludedMask = Builder.CreateZExt(ExcludedMask, Int64Ty);
11372-
Pointer = Builder.CreatePointerCast(Pointer, Int8PtrTy);
1137311363
return Builder.CreateCall(
1137411364
CGM.getIntrinsic(MTEIntrinsicID), {Pointer, ExcludedMask});
1137511365
}
@@ -11378,25 +11368,20 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
1137811368
// return address same as input address.
1137911369
if (MTEIntrinsicID == Intrinsic::aarch64_ldg) {
1138011370
Value *TagAddress = EmitScalarExpr(E->getArg(0));
11381-
TagAddress = Builder.CreatePointerCast(TagAddress, Int8PtrTy);
11382-
Value *RV = Builder.CreateCall(
11383-
CGM.getIntrinsic(MTEIntrinsicID), {TagAddress, TagAddress});
11384-
return Builder.CreatePointerCast(RV, T);
11371+
return Builder.CreateCall(CGM.getIntrinsic(MTEIntrinsicID),
11372+
{TagAddress, TagAddress});
1138511373
}
1138611374
// Although it is possible to supply a different tag (to set)
1138711375
// to this intrinsic (as first arg), for now we supply
1138811376
// the tag that is in input address arg (common use case).
1138911377
if (MTEIntrinsicID == Intrinsic::aarch64_stg) {
11390-
Value *TagAddress = EmitScalarExpr(E->getArg(0));
11391-
TagAddress = Builder.CreatePointerCast(TagAddress, Int8PtrTy);
11392-
return Builder.CreateCall(
11393-
CGM.getIntrinsic(MTEIntrinsicID), {TagAddress, TagAddress});
11378+
Value *TagAddress = EmitScalarExpr(E->getArg(0));
11379+
return Builder.CreateCall(CGM.getIntrinsic(MTEIntrinsicID),
11380+
{TagAddress, TagAddress});
1139411381
}
1139511382
if (MTEIntrinsicID == Intrinsic::aarch64_subp) {
1139611383
Value *PointerA = EmitScalarExpr(E->getArg(0));
1139711384
Value *PointerB = EmitScalarExpr(E->getArg(1));
11398-
PointerA = Builder.CreatePointerCast(PointerA, Int8PtrTy);
11399-
PointerB = Builder.CreatePointerCast(PointerB, Int8PtrTy);
1140011385
return Builder.CreateCall(
1140111386
CGM.getIntrinsic(MTEIntrinsicID), {PointerA, PointerB});
1140211387
}

clang/lib/CodeGen/CGExprCXX.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1771,14 +1771,6 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
17711771
EmitNewInitializer(*this, E, allocType, elementTy, result, numElements,
17721772
allocSizeWithoutCookie);
17731773
llvm::Value *resultPtr = result.emitRawPointer(*this);
1774-
if (E->isArray()) {
1775-
// NewPtr is a pointer to the base element type. If we're
1776-
// allocating an array of arrays, we'll need to cast back to the
1777-
// array pointer type.
1778-
llvm::Type *resultType = ConvertTypeForMem(E->getType());
1779-
if (resultPtr->getType() != resultType)
1780-
resultPtr = Builder.CreateBitCast(resultPtr, resultType);
1781-
}
17821774

17831775
// Deactivate the 'operator delete' cleanup if we finished
17841776
// initialization.
@@ -1805,7 +1797,7 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
18051797
}
18061798

18071799
void CodeGenFunction::EmitDeleteCall(const FunctionDecl *DeleteFD,
1808-
llvm::Value *Ptr, QualType DeleteTy,
1800+
llvm::Value *DeletePtr, QualType DeleteTy,
18091801
llvm::Value *NumElements,
18101802
CharUnits CookieSize) {
18111803
assert((!NumElements && CookieSize.isZero()) ||
@@ -1819,7 +1811,6 @@ void CodeGenFunction::EmitDeleteCall(const FunctionDecl *DeleteFD,
18191811

18201812
// Pass the pointer itself.
18211813
QualType ArgTy = *ParamTypeIt++;
1822-
llvm::Value *DeletePtr = Builder.CreateBitCast(Ptr, ConvertType(ArgTy));
18231814
DeleteArgs.add(RValue::get(DeletePtr), ArgTy);
18241815

18251816
// Pass the std::destroying_delete tag if present.

0 commit comments

Comments
 (0)