From b63e4bfe73188f7d68065f5b274e169491e593d2 Mon Sep 17 00:00:00 2001 From: Mark Seaborn Date: Mon, 9 Sep 2013 10:32:47 -0700 Subject: PNaCl bitcode: Remove TYPE_CODE_POINTER entries from type table There are now no uses of pointer type IDs in PNaCl bitcode, so we can stop outputting pointer types into the type table. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3671 TEST=test/NaCl/Bitcode/*.ll Review URL: https://codereview.chromium.org/23600013 --- lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp | 4 +++- lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp | 22 ++++++++++++---------- lib/Bitcode/NaCl/Writer/NaClValueEnumerator.h | 4 +--- 3 files changed, 16 insertions(+), 14 deletions(-) (limited to 'lib/Bitcode/NaCl') diff --git a/lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp b/lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp index 923d0b2c1e..cd4a894ef0 100644 --- a/lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp +++ b/lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp @@ -227,6 +227,8 @@ static void WriteTypeTable(const NaClValueEnumerator &VE, TypeVals.push_back(cast(T)->getBitWidth()); break; case Type::PointerTyID: { + if (PNaClVersion >= 2) + report_fatal_error("Pointer types are not supported in PNaCl bitcode"); PointerType *PTy = cast(T); // POINTER: [pointee type, address space] Code = naclbitc::TYPE_CODE_POINTER; @@ -550,7 +552,7 @@ static void EmitFnForwardTypeRef(const Value *V, VE.InsertFnForwardTypeRef(ValID)) { SmallVector Vals; Vals.push_back(ValID); - Vals.push_back(VE.getTypeID(VE.NormalizeScalarType(V->getType()))); + Vals.push_back(VE.getTypeID(VE.NormalizeType(V->getType()))); Stream.EmitRecord(naclbitc::FUNC_CODE_INST_FORWARDTYPEREF, Vals, FUNCTION_INST_FORWARDTYPEREF_ABBREV); } diff --git a/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp b/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp index cabdc420c6..f1ae2584e1 100644 --- a/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp +++ b/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp @@ -298,25 +298,27 @@ void NaClValueEnumerator::EnumerateValue(const Value *VIn) { } -Type *NaClValueEnumerator::NormalizeScalarType(Type *Ty) const { - // Strip pointer types. - if (Ty->isPointerTy() && PNaClVersion >= 2) - Ty = IntPtrType; - return Ty; -} - Type *NaClValueEnumerator::NormalizeType(Type *Ty) const { + if (PNaClVersion == 1) + return Ty; + + if (Ty->isPointerTy()) + return IntPtrType; if (FunctionType *FTy = dyn_cast(Ty)) { SmallVector ArgTypes; for (unsigned I = 0, E = FTy->getNumParams(); I < E; ++I) - ArgTypes.push_back(NormalizeScalarType(FTy->getParamType(I))); - Ty = FunctionType::get(NormalizeScalarType(FTy->getReturnType()), - ArgTypes, false); + ArgTypes.push_back(NormalizeType(FTy->getParamType(I))); + return FunctionType::get(NormalizeType(FTy->getReturnType()), + ArgTypes, false); } return Ty; } void NaClValueEnumerator::EnumerateType(Type *Ty, bool InsideOptimizeTypes) { + // Pointer types do not need to be given type IDs. + if (Ty->isPointerTy() && PNaClVersion >= 2) + Ty = Ty->getPointerElementType(); + Ty = NormalizeType(Ty); // The label type does not need to be given a type ID. diff --git a/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.h b/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.h index e756beb2f2..cc43c7a1e2 100644 --- a/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.h +++ b/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.h @@ -154,14 +154,12 @@ public: return T == IntPtrType; } - Type *NormalizeScalarType(Type *Ty) const; + Type *NormalizeType(Type *Ty) const; private: void OptimizeTypes(const Module *M); void OptimizeConstants(unsigned CstStart, unsigned CstEnd); - Type *NormalizeType(Type *Ty) const; - void EnumerateValue(const Value *V); void EnumerateType(Type *T, bool InsideOptimizeTypes=false); void EnumerateOperandType(const Value *V); -- cgit v1.2.3-70-g09d2