272b6fa0f0 
								
							 
						 
						
							
							
								
								Simplify AppendTailPadding() by converting its parameter to CharUnits. No  
							
							... 
							
							
							
							change in functionality intended.
llvm-svn: 130108 
							
						 
						
							2011-04-24 16:53:44 +00:00  
				
					
						
							
							
								 
						
							
								7a0b19f978 
								
							 
						 
						
							
							
								
								Eliminate literal 8s from LayoutUnionField by converting NumBytesToAppend to  
							
							... 
							
							
							
							CharUnits. No change in functionality intended.
llvm-svn: 130107 
							
						 
						
							2011-04-24 16:47:33 +00:00  
				
					
						
							
							
								 
						
							
								345a6de9b4 
								
							 
						 
						
							
							
								
								Eliminate literal 8s from LayoutBitField(), converting variables to  
							
							... 
							
							
							
							CharUnits or replacing the 8s with char align. No change in functionality
intended.
llvm-svn: 130106 
							
						 
						
							2011-04-24 16:40:29 +00:00  
				
					
						
							
							
								 
						
							
								27337a8800 
								
							 
						 
						
							
							
								
								Convert AccessInfo::AccessAlignment to CharUnits. No change in functionality  
							
							... 
							
							
							
							intended.
llvm-svn: 130087 
							
						 
						
							2011-04-24 10:13:17 +00:00  
				
					
						
							
							
								 
						
							
								f76759c6fa 
								
							 
						 
						
							
							
								
								Convert CGBitFieldInfo::FieldByteOffset to CharUnits. No change in  
							
							... 
							
							
							
							functionality intended.
llvm-svn: 130085 
							
						 
						
							2011-04-24 10:04:59 +00:00  
				
					
						
							
							
								 
						
							
								fcaaa697ec 
								
							 
						 
						
							
							
								
								When laying out bases in, always try the "base subobject" LLVM type. If it  
							
							... 
							
							
							
							turns out that a field or base needs to be laid out in the tail padding of
the base, CGRecordLayoutBuilder::ResizeLastBaseFieldIfNecessary will convert
it to an array of i8.
I've audited the new test results to make sure that they are still valid. I've
also verified that we pass a self-host with this change.
This (finally) fixes PR5589!
llvm-svn: 129673 
							
						 
						
							2011-04-17 21:56:13 +00:00  
				
					
						
							
							
								 
						
							
								b6d31e7dcc 
								
							 
						 
						
							
							
								
								Use a SmallVector for field types in CGRecordLayoutBuilder now that llvm::StructType::get takes an ArrayRef.  
							
							... 
							
							
							
							llvm-svn: 129667 
							
						 
						
							2011-04-17 21:32:41 +00:00  
				
					
						
							
							
								 
						
							
								d2348d8d3f 
								
							 
						 
						
							
							
								
								Fix typo in comment.  
							
							... 
							
							
							
							llvm-svn: 128088 
							
						 
						
							2011-03-22 17:35:47 +00:00  
				
					
						
							
							
								 
						
							
								8a3c55567e 
								
							 
						 
						
							
							
								
								A much-delayed response to Ken Dyck's review:  make this somewhat more  
							
							... 
							
							
							
							char-width agnostic.
llvm-svn: 126542 
							
						 
						
							2011-02-26 08:41:59 +00:00  
				
					
						
							
							
								 
						
							
								fb59c7c7d8 
								
							 
						 
						
							
							
								
								improve support for big endian targets, fixing PR8171, patch  
							
							... 
							
							
							
							by Heikki Kultala!
llvm-svn: 125784 
							
						 
						
							2011-02-17 22:09:58 +00:00  
				
					
						
							
							
								 
						
							
								4d9f14234f 
								
							 
						 
						
							
							
								
								Refactor CGRecordLayoutBuilder to use CharUnits more consistently.  
							
							... 
							
							
							
							llvm-svn: 125605 
							
						 
						
							2011-02-15 22:21:29 +00:00  
				
					
						
							
							
								 
						
							
								0217dfc2ba 
								
							 
						 
						
							
							
								
								Perform zero-initialization of virtual base classes when emitting  
							
							... 
							
							
							
							a zero constant for a complete class.  rdar://problem/8424975
To make this happen, track the field indexes for virtual bases
in the complete object.  I'm curious whether we might be better
off making CGRecordLayoutBuilder *much* more reliant on
ASTRecordLayout;  we're currently duplicating an awful lot of the ABI
layout logic.
llvm-svn: 125555 
							
						 
						
							2011-02-15 06:40:56 +00:00  
				
					
						
							
							
								 
						
							
								7ad11e70b6 
								
							 
						 
						
							
							
								
								Convert RecordLayout::Alignment to CharUnits from bit units. No change in  
							
							... 
							
							
							
							functionality intended. 
llvm-svn: 125549 
							
						 
						
							2011-02-15 02:32:40 +00:00  
				
					
						
							
							
								 
						
							
								b0fcc59e19 
								
							 
						 
						
							
							
								
								Add a helper function, ASTContext::toBits(), that converts sizes in  
							
							... 
							
							
							
							CharUnits to sizes in bits, and use it to tidy up the places where the
conversion was done explicitly.
llvm-svn: 125332 
							
						 
						
							2011-02-11 01:54:29 +00:00  
				
					
						
							
							
								 
						
							
								89d9f360cd 
								
							 
						 
						
							
							
								
								Drop the 'InBits' part from the name of RecordSizeInBits as the value is in  
							
							... 
							
							
							
							character units.
llvm-svn: 125281 
							
						 
						
							2011-02-10 12:36:29 +00:00  
				
					
						
							
							
								 
						
							
								f18bf0d2e1 
								
							 
						 
						
							
							
								
								Eliminate some signed-to-unsigned comparision warnings introduced in  
							
							... 
							
							
							
							r125156.
llvm-svn: 125280 
							
						 
						
							2011-02-10 12:20:05 +00:00  
				
					
						
							
							
								 
						
							
								c8ae55050d 
								
							 
						 
						
							
							
								
								Convert RecordLayout::Size to CharUnits from bits. No changes to  
							
							... 
							
							
							
							functionality intended.
llvm-svn: 125156 
							
						 
						
							2011-02-09 01:59:34 +00:00  
				
					
						
							
							
								 
						
							
								bec0285d7f 
								
							 
						 
						
							
							
								
								Convert RecordLayout::NonVirtualAlign to CharUnits. No change in  
							
							... 
							
							
							
							functionality intended.
llvm-svn: 125069 
							
						 
						
							2011-02-08 02:02:47 +00:00  
				
					
						
							
							
								 
						
							
								316d6f69bc 
								
							 
						 
						
							
							
								
								Convert RecordLayout::NonVirtualSize from bit units to CharUnits.  
							
							... 
							
							
							
							llvm-svn: 124646 
							
						 
						
							2011-02-01 01:52:10 +00:00  
				
					
						
							
							
								 
						
							
								648fcbef5b 
								
							 
						 
						
							
							
								
								Fix another obscure corner layout case.  
							
							... 
							
							
							
							llvm-svn: 121436 
							
						 
						
							2010-12-10 00:11:00 +00:00  
				
					
						
							
							
								 
						
							
								a518b2a5a1 
								
							 
						 
						
							
							
								
								Add a LayoutBase member function. No functionality change.  
							
							... 
							
							
							
							llvm-svn: 120924 
							
						 
						
							2010-12-04 23:59:48 +00:00  
				
					
						
							
							
								 
						
							
								d74cad80b0 
								
							 
						 
						
							
							
								
								Replace calls to AppendBytes with calls to AppendPadding when the bytes appended are padding.  
							
							... 
							
							
							
							llvm-svn: 120922 
							
						 
						
							2010-12-04 23:53:18 +00:00  
				
					
						
							
							
								 
						
							
								bcd38217f3 
								
							 
						 
						
							
							
								
								CGRecordLayoutBuilder does not need to be exported from this module.  
							
							... 
							
							
							
							llvm-svn: 120489 
							
						 
						
							2010-11-30 23:17:27 +00:00  
				
					
						
							
							
								 
						
							
								acf877be12 
								
							 
						 
						
							
							
								
								Don't store the maximum alignment, we can trivially compute it.  
							
							... 
							
							
							
							llvm-svn: 120268 
							
						 
						
							2010-11-28 23:06:23 +00:00  
				
					
						
							
							
								 
						
							
								a459adb2ff 
								
							 
						 
						
							
							
								
								More work on laying out virtual bases.  
							
							... 
							
							
							
							llvm-svn: 120257 
							
						 
						
							2010-11-28 19:18:44 +00:00  
				
					
						
							
							
								 
						
							
								1f95ee3016 
								
							 
						 
						
							
							
								
								Begin work on actually laying out virtual bases.  
							
							... 
							
							
							
							llvm-svn: 120140 
							
						 
						
							2010-11-25 01:59:35 +00:00  
				
					
						
							
							
								 
						
							
								7f95cd1817 
								
							 
						 
						
							
							
								
								Rename RecordLayout::getPrimaryBaseWasVirtual to isPrimaryBaseVirtual.  
							
							... 
							
							
							
							llvm-svn: 120133 
							
						 
						
							2010-11-24 23:12:57 +00:00  
				
					
						
							
							
								 
						
							
								4131f00a1f 
								
							 
						 
						
							
							
								
								Add CXXRecordDecl::getIndirectPrimaryBases.  
							
							... 
							
							
							
							llvm-svn: 120129 
							
						 
						
							2010-11-24 22:50:27 +00:00  
				
					
						
							
							
								 
						
							
								6277615cbb 
								
							 
						 
						
							
							
								
								Simplify code.  
							
							... 
							
							
							
							llvm-svn: 120109 
							
						 
						
							2010-11-24 19:57:04 +00:00  
				
					
						
							
							
								 
						
							
								36e2fa8209 
								
							 
						 
						
							
							
								
								CGRecordLayout types are always struct types.  
							
							... 
							
							
							
							llvm-svn: 120106 
							
						 
						
							2010-11-24 19:37:16 +00:00  
				
					
						
							
							
								 
						
							
								39a6b22023 
								
							 
						 
						
							
							
								
								Remove FIXME; we don't ever want to lay out empty bases.  
							
							... 
							
							
							
							llvm-svn: 119957 
							
						 
						
							2010-11-22 00:03:08 +00:00  
				
					
						
							
							
								 
						
							
								a7dd96ce77 
								
							 
						 
						
							
							
								
								Rename BaseLLVMType to NonVirtualBaseLLVMType.  
							
							... 
							
							
							
							llvm-svn: 119956 
							
						 
						
							2010-11-21 23:59:45 +00:00  
				
					
						
							
							
								 
						
							
								e64fbe2a6c 
								
							 
						 
						
							
							
								
								Add getCGRecordLayout helper function. No functionality change.  
							
							... 
							
							
							
							llvm-svn: 119955 
							
						 
						
							2010-11-21 23:56:06 +00:00  
				
					
						
							
							
								 
						
							
								30d939681c 
								
							 
						 
						
							
							
								
								Remove debugging printf.  
							
							... 
							
							
							
							Fix linux build.
llvm-svn: 118497 
							
						 
						
							2010-11-09 09:53:02 +00:00  
				
					
						
							
							
								 
						
							
								c1351cac17 
								
							 
						 
						
							
							
								
								Introduce the concept of a non-virtual base type to CGRecordLayoutBuilder as a first step towards fixing PR6995.  
							
							... 
							
							
							
							llvm-svn: 118491 
							
						 
						
							2010-11-09 05:25:47 +00:00  
				
					
						
							
							
								 
						
							
								fd88a6160d 
								
							 
						 
						
							
							
								
								Rename getBaseClassOffset to getBaseClassOffsetInBits and introduce a getBaseClassOffset which returns the offset in CharUnits. Do the same thing for getVBaseClassOffset.  
							
							... 
							
							
							
							llvm-svn: 117881 
							
						 
						
							2010-10-31 23:22:37 +00:00  
				
					
						
							
							
								 
						
							
								c7f9bbafe4 
								
							 
						 
						
							
							
								
								IRgen: Move CGBitFieldInfo strategy computation helpers to static member  
							
							... 
							
							
							
							functions.
llvm-svn: 112913 
							
						 
						
							2010-09-02 23:53:28 +00:00  
				
					
						
							
							
								 
						
							
								614dbdcd55 
								
							 
						 
						
							
							
								
								Go back to asking CodeGenTypes whether a type is zero-initializable.  
							
							... 
							
							
							
							Make CGT defer to the ABI on all member pointer types.
This requires giving CGT a handle to the ABI.
It's way easier to make that work if we avoid lazily creating the ABI.
Make it so.
llvm-svn: 111786 
							
						 
						
							2010-08-22 21:01:12 +00:00  
				
					
						
							
							
								 
						
							
								401304462a 
								
							 
						 
						
							
							
								
								AST: Rename PragmaPackAttr to MaxFieldAlignmentAttr, which is more accurate.  
							
							... 
							
							
							
							llvm-svn: 104795 
							
						 
						
							2010-05-27 01:12:46 +00:00  
				
					
						
							
							
								 
						
							
								be48c548c5 
								
							 
						 
						
							
							
								
								Correctly initialize bases with member pointers. This should fix PR6441 but that test case is a bit weird and I'd like to investigate further before closing that bug.  
							
							... 
							
							
							
							llvm-svn: 104025 
							
						 
						
							2010-05-18 16:51:41 +00:00  
				
					
						
							
							
								 
						
							
								061ca524b7 
								
							 
						 
						
							
							
								
								Keep track of the LLVM field numbers for non-virtual bases.  
							
							... 
							
							
							
							llvm-svn: 104013 
							
						 
						
							2010-05-18 05:22:06 +00:00  
				
					
						
							
							
								 
						
							
								af9e5afe54 
								
							 
						 
						
							
							
								
								Start laying out bases as individual fields. We still use ugly i8 arrays but this is a step in the right direction.  
							
							... 
							
							
							
							llvm-svn: 104012 
							
						 
						
							2010-05-18 05:12:20 +00:00  
				
					
						
							
							
								 
						
							
								58fe1756fb 
								
							 
						 
						
							
							
								
								Use a more appropriate LLVM type for the vtable pointer.  
							
							... 
							
							
							
							llvm-svn: 103078 
							
						 
						
							2010-05-05 05:47:36 +00:00  
				
					
						
							
							
								 
						
							
								5981377698 
								
							 
						 
						
							
							
								
								IRgen: Fix another case where we generated an invalid access component when we  
							
							... 
							
							
							
							immediately narrowed the access size. Fix this (and previous case) by just
choosing a better access size up-front.
llvm-svn: 102068 
							
						 
						
							2010-04-22 15:22:33 +00:00  
				
					
						
							
							
								 
						
							
								5d6c07e0e9 
								
							 
						 
						
							
							
								
								IRgen: Fix case where we might generate an access component with width == 0, if  
							
							... 
							
							
							
							we have to narrow the access side immediately (can happen with packed,
-fno-bitfield-type-align).
llvm-svn: 102067 
							
						 
						
							2010-04-22 14:56:10 +00:00  
				
					
						
							
							
								 
						
							
								fc66e0ed87 
								
							 
						 
						
							
							
								
								IRgen: Set alignment correctly on bit-field accesses.  
							
							... 
							
							
							
							llvm-svn: 102046 
							
						 
						
							2010-04-22 03:17:04 +00:00  
				
					
						
							
							
								 
						
							
								488f55c271 
								
							 
						 
						
							
							
								
								IRgen: Rewrite bit-field access policy to not access data beyond the bounds of the structure, which we also now verify as part of the post-layout consistency checks.  
							
							... 
							
							
							
							- This fixes some pedantic bugs with packed structures, as well as major problems with -fno-bitfield-type-align.
 - Fixes PR5591, PR5567, and all known -fno-bitfield-type-align issues.
 - Review appreciated.
llvm-svn: 102045 
							
						 
						
							2010-04-22 02:35:46 +00:00  
				
					
						
							
							
								 
						
							
								b6f4b05914 
								
							 
						 
						
							
							
								
								IRgen: Fix CGRecordLayout::print to print the bit-field infos in a consistent order.  
							
							... 
							
							
							
							llvm-svn: 102044 
							
						 
						
							2010-04-22 02:35:36 +00:00  
				
					
						
							
							
								 
						
							
								2ba67440b6 
								
							 
						 
						
							
							
								
								IRgen: Add checking that the LLVM and AST record layout offsets agree (for  
							
							... 
							
							
							
							non-bit-fields).
llvm-svn: 102014 
							
						 
						
							2010-04-21 19:10:49 +00:00  
				
					
						
							
							
								 
						
							
								20b551a443 
								
							 
						 
						
							
							
								
								IRgen: Always use i8 arrays to access union bit-fields. This is ugly, but  
							
							... 
							
							
							
							matches how we currently handle structs, and this correctly handles
-fno-bitfield-type-align.
llvm-svn: 101918 
							
						 
						
							2010-04-20 17:52:30 +00:00