Commit Graph

63 Commits

Author SHA1 Message Date
Peter Collingbourne 6f43cc7050 Update clang for D20348
Differential Revision: http://reviews.llvm.org/D20339

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272710 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-14 21:02:05 +00:00
Peter Collingbourne a237fa06fd CodeGen: Use 32-bit gep offsets to address vtable address points.
The relative vtable ABI will use a struct rather than an array as the type
of a vtable. LLVM only allows 32-bit integers as struct indices, so we need
to use 32-bit integers to get addresses of address points. In order to keep
the code simple, we might as well do that unconditionally.

It's probably a reasonable implementation limit to support no more than 2
billion virtual functions per class.

This change causes quite a bit of churn in the test suite, so I'm making
it separately.

Differential Revision: http://reviews.llvm.org/D18113

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263469 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-14 19:07:10 +00:00
Yaron Keren f49d6b8491 Remove and forbid raw_svector_ostream::flush() calls.
After r244870 flush() will only compare two null pointers and return,
doing nothing but wasting run time. The call is not required any more
as the stream and its SmallString are always in sync.

Thanks to David Blaikie for reviewing.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@244928 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-13 18:12:56 +00:00
NAKAMURA Takumi 5076698d4d Prune trailing LF.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236938 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-09 21:10:13 +00:00
NAKAMURA Takumi bc3fd88b4f Revert r236879, "Do not emit thunks with available_externally linkage in comdats"
It broke pecoff, at least i686-cygwin.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236937 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-09 21:10:07 +00:00
Derek Schuff b3458674c2 Do not emit thunks with available_externally linkage in comdats
Functions with available_externally linkage will not be emitted to object
files (they will just be undefined symbols), so it does not make sense to
put them in comdats.

Creates a second overload of maybeSetTrivialComdat that uses the GlobalObject
instead of the Decl, and uses that in several places that had the faulty
logic.

Differential Revision: http://reviews.llvm.org/D9580

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236879 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-08 16:47:21 +00:00
David Blaikie 3e02a7c92a [opaque pointer type] Update for GEP API changes in LLVM
Now the GEP constant utility functions require the type to be explicitly
passed (since eventually the pointer type will be opaque and not convey
the required type information). For now callers can still pass nullptr
(though none were needed here in Clang, which is nice) if
convenienc/necessary, but eventually that will be disallowed as well.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@233937 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-02 18:55:21 +00:00
Rafael Espindola 1d11866537 Use a trivial comdat for C++ tables.
This produces comdats for vtables, typeinfo, typeinfo names, and vtts.

When combined with llvm not producing implicit comdats, not doing this would
cause code bloat on ELF and link errors on COFF.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@226227 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-15 23:18:01 +00:00
John McCall ec0ca13fc0 Remove the -fhidden-weak-vtables -cc1 option. It was dead,
gross, and increasingly replaced through other mechanisms.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201011 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-08 00:41:16 +00:00
Reid Kleckner 2a50f239a9 Eliminate the ItaniumVTableContext object from CodeGenVTables
Now CodeGenVTables has only one VTableContext object, which is either
Itanium or Microsoft.

Fixes a FIXME with no functionality change intended.

Ideally we could avoid the downcasts by pushing the things that
reference the Itanium vtable context into ItaniumCXXABI.cpp, but we're
not there yet.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197845 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-20 23:58:52 +00:00
Timur Iskhodzhanov 5f0db58707 Fix vbtable indices when a class shares the vbptr with a non-virtual base
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194082 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-05 15:54:58 +00:00
Timur Iskhodzhanov 11f22a35b7 Extract ABI-specific parts of MangleContext into separate classes
Reviewed at http://llvm-reviews.chandlerc.com/D1807

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191878 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-03 06:26:13 +00:00
Timur Iskhodzhanov a53d7a0259 Abstract out the emission of vtables, add basic support for vtable emission when using -cxx-abi microsoft
Reviewed at http://llvm-reviews.chandlerc.com/D1532

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191523 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-27 14:48:01 +00:00
Peter Collingbourne e1e35f7619 [ms-cxxabi] Move CodeGenVTables::needsVTTParameter to ItaniumCXXABI.
This function only makes sense there.  Eventually it should no longer
be part of the CGCXXABI interface, as it is an Itanium-specific detail.

Differential Revision: http://llvm-reviews.chandlerc.com/D821

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185213 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-28 20:45:28 +00:00
Chris Lattner 8b418685e9 simplify a bunch of code to use the well-known LLVM IR types computed by CodeGenModule.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149943 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-07 00:39:47 +00:00
Dylan Noblesmith f7ccbad5d9 Basic: import SmallString<> into clang namespace
(I was going to fix the TODO about DenseMap too, but
that would break self-host right now. See PR11922.)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149799 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-05 02:13:05 +00:00
Benjamin Kramer f5c7504d04 Remove obsolete debugging macro, make helper static.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142730 91177308-0d34-0410-b5e6-96231b3b80d8
2011-10-22 19:16:39 +00:00
Peter Collingbourne e09cdf46aa Move all vtable layout data into new VTableLayout class
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140506 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-26 01:56:50 +00:00
Peter Collingbourne 84fcc48817 Move vtable component accessors to VTableContext
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140504 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-26 01:56:41 +00:00
Peter Collingbourne bf1c5aeadc Remove CodeGenVTables::ComputeVTableRelatedInformation dependency on CodeGen
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140503 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-26 01:56:36 +00:00
Peter Collingbourne 5c551f7aef Move VTT builder to AST
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140501 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-26 01:56:24 +00:00
Peter Collingbourne 4c341ac59c Remove CodeGenModule field from VTTBuilder
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140499 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-26 01:56:10 +00:00
Peter Collingbourne e2ff5abe47 Make the VTTBuilder class independent of LLVM core
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140498 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-26 01:56:06 +00:00
Chris Lattner 5f9e272e63 remove unneeded llvm:: namespace qualifiers on some core types now that LLVM.h imports
them into the clang namespace.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135852 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-23 10:55:15 +00:00
Jay Foad a5c04344fa Convert ConstantExpr::getGetElementPtr and
ConstantExpr::getInBoundsGetElementPtr to use ArrayRef.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135673 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-21 14:31:17 +00:00
Chris Lattner 2acc6e3fed de-constify llvm::Type, patch by David Blaikie!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135370 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-18 04:24:23 +00:00
Jay Foad 97357602a2 Replace the existing forms of ConstantArray::get() with a single form
that takes an ArrayRef.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133615 91177308-0d34-0410-b5e6-96231b3b80d8
2011-06-22 09:24:39 +00:00
Anders Carlsson e3d6cf2149 Fix another regression from the "skip vtable pointer initialization"
optimization. Make sure to require a vtable when trying to get the address
of a VTT, otherwise we would never end up emitting the VTT.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131400 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-16 04:08:36 +00:00
John McCall bda0d6bda0 We were emitting construction v-tables with internal linkage all the time.
Emit them instead with the linkage of the VTT.

I'm actually really ambivalent about this;  it's what GCC does, but outside
of improving code size (if the linkage is coalescing), I'm not sure it's
at all relevant.  Construction vtables are naturally referenced only by the
VTT, which is itself only referenced by complete-object constructors and
destructors;  giving the construction vtables possibly-external linkage is
important if you have an optimization that drills through the VTT to a
reference to a particular construction vtable which it cannot just emit
itself.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128374 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-27 09:00:25 +00:00
Ken Dyck 4230d529a8 Convert the BaseOffset member of BaseSubobject to CharUnits from bits. No
change in functionality intended.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128190 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-24 01:21:01 +00:00
Rafael Espindola f0be979bdd For consistency, use llvm::raw_ostream in the rest of the mangle api.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125360 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-11 02:52:17 +00:00
Anders Carlsson fa2e99f72f Change CodeGenModule::setTypeVisibility to take a TypeVisibilityKind enum instead of an "IsForRTTI" flag.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124546 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-29 20:24:48 +00:00
Anders Carlsson 691222d5c9 Give VTTs the right visibility.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124540 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-29 19:34:19 +00:00
Anders Carlsson 1cbce125b9 Make emitting a VTT a two-step process, much like emitting a VTable. You first get the address of the VTT, and then pass it to EmitVTTDefinition.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124539 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-29 19:16:51 +00:00
Rafael Espindola cd3ac4bd96 Also set unnamed_addr on declarations.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123531 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-15 08:23:14 +00:00
Rafael Espindola 62b1607e44 Only add unnamed_addr to definitions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123354 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-13 01:12:55 +00:00
Rafael Espindola 82a0f4e93c Set unnamed_addr in VTTs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123280 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-11 22:29:55 +00:00
Anders Carlsson c9e814ba19 Rename RecordLayout::getPrimaryBaseWasVirtual to isPrimaryBaseVirtual.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120133 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-24 23:12:57 +00:00
Anders Carlsson a14f597957 Rename getBaseClassOffset to getBaseClassOffsetInBits and introduce a getBaseClassOffset which returns the offset in CharUnits. Do the same thing for getVBaseClassOffset.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117881 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-31 23:22:37 +00:00
John McCall af14603ca6 Better solution: calculate the visibility of functions and variables
independently of whether they're definitions, then teach IR generation to
ignore non-explicit visibility when emitting declarations.  Use this to
make sure that RTTI, vtables, and VTTs get the right visibility.

More of rdar://problem/8613093



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117781 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-30 11:50:40 +00:00
John McCall 4c40d98ab7 Teach IR generation to return 'this' from constructors and destructors
under the ARM ABI.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112588 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-31 07:33:07 +00:00
Douglas Gregor f4aac11a5e The global variable for the VTT might not have external linkage; allow
us to find local variables, too. Fixes the last remaining
Boost.Rational failure.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103203 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-06 22:18:21 +00:00
Anders Carlsson 3855a07db0 Store the entire base subobject in SubVTTIndices.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102890 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-03 00:55:11 +00:00
Anders Carlsson c11bb21910 Have getSubVTTIndex take a BaseSubobject instead of just a base.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102885 91177308-0d34-0410-b5e6-96231b3b80d8
2010-05-02 23:53:25 +00:00
Anders Carlsson 836d9dde50 Clarify an assertion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100986 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-11 20:23:06 +00:00
Anders Carlsson bfb7a1d6eb Remove the old vtable layout code.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99869 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-30 03:43:47 +00:00
Anders Carlsson 0a4a2fd5da Use the newly added function in the VTT builder.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99799 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-29 02:14:35 +00:00
Anders Carlsson 80faf6986c Fix thinko.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99788 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-29 01:12:13 +00:00
Anders Carlsson f6da6a082c Two bug fixes, we weren't updating the thunk index when creating the vtable initializer and we weren't storing the secondary virtual pointer indices.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99786 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-29 01:04:16 +00:00
Anders Carlsson e1dcc22401 Add and implement CodeGenVTables::getSecondaryVirtualPointerIndex (not used yet).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99608 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-26 04:23:58 +00:00