clang: Remove some pointer bitcasts (#112324)
Obsolete since opaque pointers.
This commit is contained in:
@@ -1288,9 +1288,8 @@ static llvm::Value *EmitBitTestIntrinsic(CodeGenFunction &CGF,
|
||||
// Bit = BitBaseI8[BitPos >> 3] & (1 << (BitPos & 0x7)) != 0;
|
||||
Value *ByteIndex = CGF.Builder.CreateAShr(
|
||||
BitPos, llvm::ConstantInt::get(BitPos->getType(), 3), "bittest.byteidx");
|
||||
Value *BitBaseI8 = CGF.Builder.CreatePointerCast(BitBase, CGF.Int8PtrTy);
|
||||
Address ByteAddr(CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, BitBaseI8,
|
||||
ByteIndex, "bittest.byteaddr"),
|
||||
Address ByteAddr(CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, BitBase, ByteIndex,
|
||||
"bittest.byteaddr"),
|
||||
CGF.Int8Ty, CharUnits::One());
|
||||
Value *PosLow =
|
||||
CGF.Builder.CreateAnd(CGF.Builder.CreateTrunc(BitPos, CGF.Int8Ty),
|
||||
@@ -5658,14 +5657,13 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
|
||||
*Arg3 = EmitScalarExpr(E->getArg(3));
|
||||
llvm::FunctionType *FTy = llvm::FunctionType::get(
|
||||
Int32Ty, llvm::ArrayRef<llvm::Type *>(ArgTys), false);
|
||||
Value *BCast = Builder.CreatePointerCast(Arg3, I8PTy);
|
||||
// We know the third argument is an integer type, but we may need to cast
|
||||
// it to i32.
|
||||
if (Arg2->getType() != Int32Ty)
|
||||
Arg2 = Builder.CreateZExtOrTrunc(Arg2, Int32Ty);
|
||||
return RValue::get(
|
||||
EmitRuntimeCall(CGM.CreateRuntimeFunction(FTy, Name),
|
||||
{Arg0, Arg1, Arg2, BCast, PacketSize, PacketAlign}));
|
||||
{Arg0, Arg1, Arg2, Arg3, PacketSize, PacketAlign}));
|
||||
}
|
||||
}
|
||||
// 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,
|
||||
Value *Dst = EmitScalarExpr(E->getArg(0));
|
||||
Value *Val = EmitScalarExpr(E->getArg(1));
|
||||
Value *Size = EmitScalarExpr(E->getArg(2));
|
||||
Dst = Builder.CreatePointerCast(Dst, Int8PtrTy);
|
||||
Val = Builder.CreateTrunc(Val, Int8Ty);
|
||||
Size = Builder.CreateIntCast(Size, Int64Ty, false);
|
||||
return Builder.CreateCall(
|
||||
@@ -11342,34 +11339,27 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
|
||||
}
|
||||
|
||||
if (MTEIntrinsicID != Intrinsic::not_intrinsic) {
|
||||
llvm::Type *T = ConvertType(E->getType());
|
||||
|
||||
if (MTEIntrinsicID == Intrinsic::aarch64_irg) {
|
||||
Value *Pointer = EmitScalarExpr(E->getArg(0));
|
||||
Value *Mask = EmitScalarExpr(E->getArg(1));
|
||||
|
||||
Pointer = Builder.CreatePointerCast(Pointer, Int8PtrTy);
|
||||
Mask = Builder.CreateZExt(Mask, Int64Ty);
|
||||
Value *RV = Builder.CreateCall(
|
||||
CGM.getIntrinsic(MTEIntrinsicID), {Pointer, Mask});
|
||||
return Builder.CreatePointerCast(RV, T);
|
||||
return Builder.CreateCall(CGM.getIntrinsic(MTEIntrinsicID),
|
||||
{Pointer, Mask});
|
||||
}
|
||||
if (MTEIntrinsicID == Intrinsic::aarch64_addg) {
|
||||
Value *Pointer = EmitScalarExpr(E->getArg(0));
|
||||
Value *TagOffset = EmitScalarExpr(E->getArg(1));
|
||||
|
||||
Pointer = Builder.CreatePointerCast(Pointer, Int8PtrTy);
|
||||
TagOffset = Builder.CreateZExt(TagOffset, Int64Ty);
|
||||
Value *RV = Builder.CreateCall(
|
||||
CGM.getIntrinsic(MTEIntrinsicID), {Pointer, TagOffset});
|
||||
return Builder.CreatePointerCast(RV, T);
|
||||
return Builder.CreateCall(CGM.getIntrinsic(MTEIntrinsicID),
|
||||
{Pointer, TagOffset});
|
||||
}
|
||||
if (MTEIntrinsicID == Intrinsic::aarch64_gmi) {
|
||||
Value *Pointer = EmitScalarExpr(E->getArg(0));
|
||||
Value *ExcludedMask = EmitScalarExpr(E->getArg(1));
|
||||
|
||||
ExcludedMask = Builder.CreateZExt(ExcludedMask, Int64Ty);
|
||||
Pointer = Builder.CreatePointerCast(Pointer, Int8PtrTy);
|
||||
return Builder.CreateCall(
|
||||
CGM.getIntrinsic(MTEIntrinsicID), {Pointer, ExcludedMask});
|
||||
}
|
||||
@@ -11378,25 +11368,20 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
|
||||
// return address same as input address.
|
||||
if (MTEIntrinsicID == Intrinsic::aarch64_ldg) {
|
||||
Value *TagAddress = EmitScalarExpr(E->getArg(0));
|
||||
TagAddress = Builder.CreatePointerCast(TagAddress, Int8PtrTy);
|
||||
Value *RV = Builder.CreateCall(
|
||||
CGM.getIntrinsic(MTEIntrinsicID), {TagAddress, TagAddress});
|
||||
return Builder.CreatePointerCast(RV, T);
|
||||
return Builder.CreateCall(CGM.getIntrinsic(MTEIntrinsicID),
|
||||
{TagAddress, TagAddress});
|
||||
}
|
||||
// Although it is possible to supply a different tag (to set)
|
||||
// to this intrinsic (as first arg), for now we supply
|
||||
// the tag that is in input address arg (common use case).
|
||||
if (MTEIntrinsicID == Intrinsic::aarch64_stg) {
|
||||
Value *TagAddress = EmitScalarExpr(E->getArg(0));
|
||||
TagAddress = Builder.CreatePointerCast(TagAddress, Int8PtrTy);
|
||||
return Builder.CreateCall(
|
||||
CGM.getIntrinsic(MTEIntrinsicID), {TagAddress, TagAddress});
|
||||
Value *TagAddress = EmitScalarExpr(E->getArg(0));
|
||||
return Builder.CreateCall(CGM.getIntrinsic(MTEIntrinsicID),
|
||||
{TagAddress, TagAddress});
|
||||
}
|
||||
if (MTEIntrinsicID == Intrinsic::aarch64_subp) {
|
||||
Value *PointerA = EmitScalarExpr(E->getArg(0));
|
||||
Value *PointerB = EmitScalarExpr(E->getArg(1));
|
||||
PointerA = Builder.CreatePointerCast(PointerA, Int8PtrTy);
|
||||
PointerB = Builder.CreatePointerCast(PointerB, Int8PtrTy);
|
||||
return Builder.CreateCall(
|
||||
CGM.getIntrinsic(MTEIntrinsicID), {PointerA, PointerB});
|
||||
}
|
||||
|
||||
@@ -1771,14 +1771,6 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
|
||||
EmitNewInitializer(*this, E, allocType, elementTy, result, numElements,
|
||||
allocSizeWithoutCookie);
|
||||
llvm::Value *resultPtr = result.emitRawPointer(*this);
|
||||
if (E->isArray()) {
|
||||
// NewPtr is a pointer to the base element type. If we're
|
||||
// allocating an array of arrays, we'll need to cast back to the
|
||||
// array pointer type.
|
||||
llvm::Type *resultType = ConvertTypeForMem(E->getType());
|
||||
if (resultPtr->getType() != resultType)
|
||||
resultPtr = Builder.CreateBitCast(resultPtr, resultType);
|
||||
}
|
||||
|
||||
// Deactivate the 'operator delete' cleanup if we finished
|
||||
// initialization.
|
||||
@@ -1805,7 +1797,7 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
|
||||
}
|
||||
|
||||
void CodeGenFunction::EmitDeleteCall(const FunctionDecl *DeleteFD,
|
||||
llvm::Value *Ptr, QualType DeleteTy,
|
||||
llvm::Value *DeletePtr, QualType DeleteTy,
|
||||
llvm::Value *NumElements,
|
||||
CharUnits CookieSize) {
|
||||
assert((!NumElements && CookieSize.isZero()) ||
|
||||
@@ -1819,7 +1811,6 @@ void CodeGenFunction::EmitDeleteCall(const FunctionDecl *DeleteFD,
|
||||
|
||||
// Pass the pointer itself.
|
||||
QualType ArgTy = *ParamTypeIt++;
|
||||
llvm::Value *DeletePtr = Builder.CreateBitCast(Ptr, ConvertType(ArgTy));
|
||||
DeleteArgs.add(RValue::get(DeletePtr), ArgTy);
|
||||
|
||||
// Pass the std::destroying_delete tag if present.
|
||||
|
||||
Reference in New Issue
Block a user