mirror of
https://github.com/intel/llvm.git
synced 2026-02-01 00:46:45 +08:00
Revert [OpenCL] AMDGCN: Fix size_t type
due to regressions in test/CodeGen/exprs.c on certain platforms. llvm-svn: 279127
This commit is contained in:
@@ -294,11 +294,6 @@ public:
|
||||
return AddrSpace == 0 ? PointerAlign : getPointerAlignV(AddrSpace);
|
||||
}
|
||||
|
||||
/// \brief Return the maximum width of pointers on this target.
|
||||
virtual uint64_t getMaxPointerWidth() const {
|
||||
return PointerWidth;
|
||||
}
|
||||
|
||||
/// \brief Return the size of '_Bool' and C++ 'bool' for this target, in bits.
|
||||
unsigned getBoolWidth() const { return BoolWidth; }
|
||||
|
||||
|
||||
@@ -306,9 +306,8 @@ void TargetInfo::adjust(const LangOptions &Opts) {
|
||||
}
|
||||
LongDoubleWidth = LongDoubleAlign = 128;
|
||||
|
||||
unsigned MaxPointerWidth = getMaxPointerWidth();
|
||||
assert(MaxPointerWidth == 32 || MaxPointerWidth == 64);
|
||||
bool Is32BitArch = MaxPointerWidth == 32;
|
||||
assert(PointerWidth == 32 || PointerWidth == 64);
|
||||
bool Is32BitArch = PointerWidth == 32;
|
||||
SizeType = Is32BitArch ? UnsignedInt : UnsignedLong;
|
||||
PtrDiffType = Is32BitArch ? SignedInt : SignedLong;
|
||||
IntPtrType = Is32BitArch ? SignedInt : SignedLong;
|
||||
|
||||
@@ -2004,10 +2004,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t getMaxPointerWidth() const override {
|
||||
return getTriple().getArch() == llvm::Triple::amdgcn ? 64 : 32;
|
||||
}
|
||||
|
||||
const char * getClobbers() const override {
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -787,7 +787,7 @@ Value *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType SrcType,
|
||||
// Handle pointer conversions next: pointers can only be converted to/from
|
||||
// other pointers and integers. Check for pointer types in terms of LLVM, as
|
||||
// some native types (like Obj-C id) may map to a pointer type.
|
||||
if (auto DstPT = dyn_cast<llvm::PointerType>(DstTy)) {
|
||||
if (isa<llvm::PointerType>(DstTy)) {
|
||||
// The source value may be an integer, or a pointer.
|
||||
if (isa<llvm::PointerType>(SrcTy))
|
||||
return Builder.CreateBitCast(Src, DstTy, "conv");
|
||||
@@ -795,7 +795,7 @@ Value *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType SrcType,
|
||||
assert(SrcType->isIntegerType() && "Not ptr->ptr or int->ptr conversion?");
|
||||
// First, convert to the correct width so that we control the kind of
|
||||
// extension.
|
||||
llvm::Type *MiddleTy = CGF.CGM.getDataLayout().getIntPtrType(DstPT);
|
||||
llvm::Type *MiddleTy = CGF.IntPtrTy;
|
||||
bool InputSigned = SrcType->isSignedIntegerOrEnumerationType();
|
||||
llvm::Value* IntResult =
|
||||
Builder.CreateIntCast(Src, MiddleTy, InputSigned, "conv");
|
||||
@@ -1510,13 +1510,12 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) {
|
||||
|
||||
// First, convert to the correct width so that we control the kind of
|
||||
// extension.
|
||||
auto DestLLVMTy = ConvertType(DestTy);
|
||||
llvm::Type *MiddleTy = CGF.CGM.getDataLayout().getIntPtrType(DestLLVMTy);
|
||||
llvm::Type *MiddleTy = CGF.IntPtrTy;
|
||||
bool InputSigned = E->getType()->isSignedIntegerOrEnumerationType();
|
||||
llvm::Value* IntResult =
|
||||
Builder.CreateIntCast(Src, MiddleTy, InputSigned, "conv");
|
||||
|
||||
return Builder.CreateIntToPtr(IntResult, DestLLVMTy);
|
||||
return Builder.CreateIntToPtr(IntResult, ConvertType(DestTy));
|
||||
}
|
||||
case CK_PointerToIntegral:
|
||||
assert(!DestTy->isBooleanType() && "bool should use PointerToBool");
|
||||
@@ -2427,7 +2426,6 @@ static Value *emitPointerArithmetic(CodeGenFunction &CGF,
|
||||
|
||||
Value *pointer = op.LHS;
|
||||
Expr *pointerOperand = expr->getLHS();
|
||||
auto PtrTy = cast<llvm::PointerType>(pointer->getType());
|
||||
Value *index = op.RHS;
|
||||
Expr *indexOperand = expr->getRHS();
|
||||
|
||||
@@ -2438,12 +2436,11 @@ static Value *emitPointerArithmetic(CodeGenFunction &CGF,
|
||||
}
|
||||
|
||||
unsigned width = cast<llvm::IntegerType>(index->getType())->getBitWidth();
|
||||
auto &DL = CGF.CGM.getDataLayout();
|
||||
if (width != DL.getTypeSizeInBits(PtrTy)) {
|
||||
if (width != CGF.PointerWidthInBits) {
|
||||
// Zero-extend or sign-extend the pointer value according to
|
||||
// whether the index is signed or not.
|
||||
bool isSigned = indexOperand->getType()->isSignedIntegerOrEnumerationType();
|
||||
index = CGF.Builder.CreateIntCast(index, DL.getIntPtrType(PtrTy), isSigned,
|
||||
index = CGF.Builder.CreateIntCast(index, CGF.PtrDiffTy, isSigned,
|
||||
"idx.ext");
|
||||
}
|
||||
|
||||
|
||||
@@ -101,13 +101,10 @@ CodeGenModule::CodeGenModule(ASTContext &C, const HeaderSearchOptions &HSO,
|
||||
PointerWidthInBits = C.getTargetInfo().getPointerWidth(0);
|
||||
PointerAlignInBytes =
|
||||
C.toCharUnitsFromBits(C.getTargetInfo().getPointerAlign(0)).getQuantity();
|
||||
SizeSizeInBytes =
|
||||
C.toCharUnitsFromBits(C.getTargetInfo().getMaxPointerWidth()).getQuantity();
|
||||
IntAlignInBytes =
|
||||
C.toCharUnitsFromBits(C.getTargetInfo().getIntAlign()).getQuantity();
|
||||
IntTy = llvm::IntegerType::get(LLVMContext, C.getTargetInfo().getIntWidth());
|
||||
IntPtrTy = llvm::IntegerType::get(LLVMContext,
|
||||
C.getTargetInfo().getMaxPointerWidth());
|
||||
IntPtrTy = llvm::IntegerType::get(LLVMContext, PointerWidthInBits);
|
||||
Int8PtrTy = Int8Ty->getPointerTo(0);
|
||||
Int8PtrPtrTy = Int8PtrTy->getPointerTo(0);
|
||||
|
||||
|
||||
@@ -80,14 +80,9 @@ struct CodeGenTypeCache {
|
||||
union {
|
||||
unsigned char PointerAlignInBytes;
|
||||
unsigned char PointerSizeInBytes;
|
||||
};
|
||||
|
||||
/// The size and alignment of size_t.
|
||||
union {
|
||||
unsigned char SizeSizeInBytes; // sizeof(size_t)
|
||||
unsigned char SizeAlignInBytes;
|
||||
};
|
||||
|
||||
CharUnits getSizeSize() const {
|
||||
return CharUnits::fromQuantity(SizeSizeInBytes);
|
||||
}
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
// RUN: %clang_cc1 %s -cl-std=CL2.0 -finclude-default-header -emit-llvm -O0 -triple spir-unknown-unknown -o - | FileCheck --check-prefix=SZ32 %s
|
||||
// RUN: %clang_cc1 %s -cl-std=CL2.0 -finclude-default-header -emit-llvm -O0 -triple spir64-unknown-unknown -o - | FileCheck --check-prefix=SZ64 --check-prefix=SZ64ONLY %s
|
||||
// RUN: %clang_cc1 %s -cl-std=CL2.0 -finclude-default-header -emit-llvm -O0 -triple amdgcn-- -o - | FileCheck --check-prefix=SZ64 --check-prefix=AMDONLY %s
|
||||
|
||||
//SZ32: define{{.*}} i32 @test_ptrtoint_private(i8* %x)
|
||||
//SZ32: ptrtoint i8* %{{.*}} to i32
|
||||
//SZ64: define{{.*}} i64 @test_ptrtoint_private(i8* %x)
|
||||
//SZ64: ptrtoint i8* %{{.*}} to i64
|
||||
size_t test_ptrtoint_private(private char* x) {
|
||||
return (size_t)x;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i32 @test_ptrtoint_global(i8 addrspace(1)* %x)
|
||||
//SZ32: ptrtoint i8 addrspace(1)* %{{.*}} to i32
|
||||
//SZ64: define{{.*}} i64 @test_ptrtoint_global(i8 addrspace(1)* %x)
|
||||
//SZ64: ptrtoint i8 addrspace(1)* %{{.*}} to i64
|
||||
intptr_t test_ptrtoint_global(global char* x) {
|
||||
return (intptr_t)x;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i32 @test_ptrtoint_constant(i8 addrspace(2)* %x)
|
||||
//SZ32: ptrtoint i8 addrspace(2)* %{{.*}} to i32
|
||||
//SZ64: define{{.*}} i64 @test_ptrtoint_constant(i8 addrspace(2)* %x)
|
||||
//SZ64: ptrtoint i8 addrspace(2)* %{{.*}} to i64
|
||||
uintptr_t test_ptrtoint_constant(constant char* x) {
|
||||
return (uintptr_t)x;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i32 @test_ptrtoint_local(i8 addrspace(3)* %x)
|
||||
//SZ32: ptrtoint i8 addrspace(3)* %{{.*}} to i32
|
||||
//SZ64: define{{.*}} i64 @test_ptrtoint_local(i8 addrspace(3)* %x)
|
||||
//SZ64: ptrtoint i8 addrspace(3)* %{{.*}} to i64
|
||||
size_t test_ptrtoint_local(local char* x) {
|
||||
return (size_t)x;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i32 @test_ptrtoint_generic(i8 addrspace(4)* %x)
|
||||
//SZ32: ptrtoint i8 addrspace(4)* %{{.*}} to i32
|
||||
//SZ64: define{{.*}} i64 @test_ptrtoint_generic(i8 addrspace(4)* %x)
|
||||
//SZ64: ptrtoint i8 addrspace(4)* %{{.*}} to i64
|
||||
size_t test_ptrtoint_generic(generic char* x) {
|
||||
return (size_t)x;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i8* @test_inttoptr_private(i32 %x)
|
||||
//SZ32: inttoptr i32 %{{.*}} to i8*
|
||||
//SZ64: define{{.*}} i8* @test_inttoptr_private(i64 %x)
|
||||
//AMDONLY: trunc i64 %{{.*}} to i32
|
||||
//AMDONLY: inttoptr i32 %{{.*}} to i8*
|
||||
//SZ64ONLY: inttoptr i64 %{{.*}} to i8*
|
||||
private char* test_inttoptr_private(size_t x) {
|
||||
return (private char*)x;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i8 addrspace(1)* @test_inttoptr_global(i32 %x)
|
||||
//SZ32: inttoptr i32 %{{.*}} to i8 addrspace(1)*
|
||||
//SZ64: define{{.*}} i8 addrspace(1)* @test_inttoptr_global(i64 %x)
|
||||
//SZ64: inttoptr i64 %{{.*}} to i8 addrspace(1)*
|
||||
global char* test_inttoptr_global(size_t x) {
|
||||
return (global char*)x;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i8 addrspace(3)* @test_add_local(i8 addrspace(3)* %x, i32 %y)
|
||||
//SZ32: getelementptr inbounds i8, i8 addrspace(3)* %{{.*}}, i32
|
||||
//SZ64: define{{.*}} i8 addrspace(3)* @test_add_local(i8 addrspace(3)* %x, i64 %y)
|
||||
//AMDONLY: trunc i64 %{{.*}} to i32
|
||||
//AMDONLY: getelementptr inbounds i8, i8 addrspace(3)* %{{.*}}, i32
|
||||
//SZ64ONLY: getelementptr inbounds i8, i8 addrspace(3)* %{{.*}}, i64
|
||||
local char* test_add_local(local char* x, ptrdiff_t y) {
|
||||
return x + y;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i8 addrspace(1)* @test_add_global(i8 addrspace(1)* %x, i32 %y)
|
||||
//SZ32: getelementptr inbounds i8, i8 addrspace(1)* %{{.*}}, i32
|
||||
//SZ64: define{{.*}} i8 addrspace(1)* @test_add_global(i8 addrspace(1)* %x, i64 %y)
|
||||
//SZ64: getelementptr inbounds i8, i8 addrspace(1)* %{{.*}}, i64
|
||||
global char* test_add_global(global char* x, ptrdiff_t y) {
|
||||
return x + y;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i32 @test_sub_local(i8 addrspace(3)* %x, i8 addrspace(3)* %y)
|
||||
//SZ32: ptrtoint i8 addrspace(3)* %{{.*}} to i32
|
||||
//SZ32: ptrtoint i8 addrspace(3)* %{{.*}} to i32
|
||||
//SZ64: define{{.*}} i64 @test_sub_local(i8 addrspace(3)* %x, i8 addrspace(3)* %y)
|
||||
//SZ64: ptrtoint i8 addrspace(3)* %{{.*}} to i64
|
||||
//SZ64: ptrtoint i8 addrspace(3)* %{{.*}} to i64
|
||||
ptrdiff_t test_sub_local(local char* x, local char *y) {
|
||||
return x - y;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i32 @test_sub_private(i8* %x, i8* %y)
|
||||
//SZ32: ptrtoint i8* %{{.*}} to i32
|
||||
//SZ32: ptrtoint i8* %{{.*}} to i32
|
||||
//SZ64: define{{.*}} i64 @test_sub_private(i8* %x, i8* %y)
|
||||
//SZ64: ptrtoint i8* %{{.*}} to i64
|
||||
//SZ64: ptrtoint i8* %{{.*}} to i64
|
||||
ptrdiff_t test_sub_private(private char* x, private char *y) {
|
||||
return x - y;
|
||||
}
|
||||
|
||||
//SZ32: define{{.*}} i32 @test_sub_mix(i8* %x, i8 addrspace(4)* %y)
|
||||
//SZ32: ptrtoint i8* %{{.*}} to i32
|
||||
//SZ32: ptrtoint i8 addrspace(4)* %{{.*}} to i32
|
||||
//SZ64: define{{.*}} i64 @test_sub_mix(i8* %x, i8 addrspace(4)* %y)
|
||||
//SZ64: ptrtoint i8* %{{.*}} to i64
|
||||
//SZ64: ptrtoint i8 addrspace(4)* %{{.*}} to i64
|
||||
ptrdiff_t test_sub_mix(private char* x, generic char *y) {
|
||||
return x - y;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user