[cfe-commits] r79178 - /cfe/trunk/lib/CodeGen/CodeGenModule.cpp
Anders Carlsson
andersca at mac.com
Sat Aug 15 22:55:31 PDT 2009
Author: andersca
Date: Sun Aug 16 00:55:31 2009
New Revision: 79178
URL: http://llvm.org/viewvc/llvm-project?rev=79178&view=rev
Log:
No need to append extra padding now that we don't create packed structs for simple cases like the constant string.
Modified:
cfe/trunk/lib/CodeGen/CodeGenModule.cpp
Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=79178&r1=79177&r2=79178&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sun Aug 16 00:55:31 2009
@@ -1288,32 +1288,6 @@
return MemSetFn = getIntrinsic(llvm::Intrinsic::memset, &IntPtr, 1);
}
-static void appendFieldAndPadding(CodeGenModule &CGM,
- std::vector<llvm::Constant*>& Fields,
- FieldDecl *FieldD, FieldDecl *NextFieldD,
- llvm::Constant* Field,
- RecordDecl* RD, const llvm::StructType *STy) {
- // Append the field.
- Fields.push_back(Field);
-
- int StructFieldNo = CGM.getTypes().getLLVMFieldNo(FieldD);
-
- int NextStructFieldNo;
- if (!NextFieldD) {
- NextStructFieldNo = STy->getNumElements();
- } else {
- NextStructFieldNo = CGM.getTypes().getLLVMFieldNo(NextFieldD);
- }
-
- // Append padding
- for (int i = StructFieldNo + 1; i < NextStructFieldNo; i++) {
- llvm::Constant *C =
- llvm::Constant::getNullValue(STy->getElementType(StructFieldNo + 1));
-
- Fields.push_back(C);
- }
-}
-
static llvm::StringMapEntry<llvm::Constant*> &
GetConstantCFStringEntry(llvm::StringMap<llvm::Constant*> &Map,
const StringLiteral *Literal,
@@ -1403,32 +1377,21 @@
}
QualType CFTy = getContext().getCFConstantStringType();
- RecordDecl *CFRD = CFTy->getAs<RecordType>()->getDecl();
const llvm::StructType *STy =
cast<llvm::StructType>(getTypes().ConvertType(CFTy));
- std::vector<llvm::Constant*> Fields;
- RecordDecl::field_iterator Field = CFRD->field_begin();
+ std::vector<llvm::Constant*> Fields(4);
// Class pointer.
- FieldDecl *CurField = *Field++;
- FieldDecl *NextField = *Field++;
- appendFieldAndPadding(*this, Fields, CurField, NextField,
- CFConstantStringClassRef, CFRD, STy);
+ Fields[0] = CFConstantStringClassRef;
// Flags.
- CurField = NextField;
- NextField = *Field++;
const llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
- appendFieldAndPadding(*this, Fields, CurField, NextField,
- isUTF16 ? llvm::ConstantInt::get(Ty, 0x07d0)
- : llvm::ConstantInt::get(Ty, 0x07C8),
- CFRD, STy);
-
+ Fields[1] = isUTF16 ? llvm::ConstantInt::get(Ty, 0x07d0) :
+ llvm::ConstantInt::get(Ty, 0x07C8);
+
// String pointer.
- CurField = NextField;
- NextField = *Field++;
llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str());
const char *Sect, *Prefix;
@@ -1458,16 +1421,11 @@
unsigned Align = getContext().getTypeAlign(getContext().ShortTy)/8;
GV->setAlignment(Align);
}
- appendFieldAndPadding(*this, Fields, CurField, NextField,
- llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2),
- CFRD, STy);
-
+ Fields[2] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2);
+
// String length.
- CurField = NextField;
- NextField = 0;
Ty = getTypes().ConvertType(getContext().LongTy);
- appendFieldAndPadding(*this, Fields, CurField, NextField,
- llvm::ConstantInt::get(Ty, StringLength), CFRD, STy);
+ Fields[3] = llvm::ConstantInt::get(Ty, StringLength);
// The struct.
C = llvm::ConstantStruct::get(STy, Fields);
More information about the cfe-commits
mailing list