[cfe-dev] checking for virtual members
John Thompson
john.thompson.jtsoftware at gmail.com
Tue Nov 9 22:09:20 PST 2010
Doug,
I'm afraid I don't know the appropriate compiler terms to explain it most
correctly. Basically, the main idea for the attribute is to optimize a
class that has one data member, which must be a vector, such that the whole
object can be stored in a vector register, thus avoiding referencing
memory. Therefore, anything that would add extra storage, such as a vtable
pointer would have to be detected. I don't know that that would preclude
multiple inheritance, but I would imagine it wouldn't make sense to have
multiple base classes that don't add data members or virtual functions. I
was thinking that just checking for a vtable and only one member which must
be a vector would be sufficient.
Regarding the one data member restriction, if the class inherits from a base
class, would those members directly appear in the CXXRecordDecl too? The
current iterator look check I put in there assumes that, but I haven't
verified it yet.
Thanks.
-John
On Mon, Nov 8, 2010 at 6:54 PM, Douglas Gregor <dgregor at apple.com> wrote:
>
> On Nov 2, 2010, at 6:17 PM, John Thompson wrote:
>
> I have no idea. Bascially, I just need something that tells me that
> there won't be any other stuff in the actual object, since vecreturn wants
> to return the object in a vector register. Could you tell me which
> functions or function I should call?
>
>
> Not without knowing what the semantics are. Please try to nail down exactly
> what kinds of classes are/aren't allowed with vecreturn, and we can find the
> right predicate to implement that in Clang. Unless GCC is doing something
> silly, we should follow their behavior.
>
> - Doug
>
> Thanks.
>
> -John
> On Tue, Nov 2, 2010 at 1:28 PM, Douglas Gregor <dgregor at apple.com> wrote:
>
>>
>> On Nov 2, 2010, at 12:04 PM, John Thompson wrote:
>>
>> >Why? Is this what GCC does?
>>
>> Yes. The class example I enclosed previously will build with our gcc,
>> whereas Clang would not, as Clang only allows a strict POD class or struct
>> in the original code. I just posted a patch on cfe-commits to fix this.
>>
>>
>> Okay. This patch uses isDynamicClass(), which means that we still permit
>> classes that involve multiple inheritance. Is that intended? Does it make
>> sense?
>>
>> It seems to me that the right language idea might be the C++0x
>> standard-layout class, rather than the idea of a non-dynamic class.
>> - Doug
>>
>> -John
>>
>> On Tue, Nov 2, 2010 at 11:54 AM, Douglas Gregor <dgregor at apple.com>wrote:
>>
>>>
>>> On Nov 1, 2010, at 5:05 PM, John Thompson wrote:
>>>
>>> > I need a way easily check to make sure a function has no virtual
>>> functions, or other stuff that would inject extra stuff into an object or
>>> structure, as part of the validation for the vecreturn attribute. How do I
>>> do it?
>>> >
>>> > Checking the CXXRecordDecl::PlainOldData flag with isPOD doesn't work,
>>> because the the strict definition of POD goes too far for this case.
>>>
>>> Why? Is this what GCC does?
>>>
>>> - Doug
>>
>>
>>
>>
>> --
>> John Thompson
>> John.Thompson.JTSoftware at gmail.com
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>>
>>
>
>
> --
> John Thompson
> John.Thompson.JTSoftware at gmail.com
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
>
--
John Thompson
John.Thompson.JTSoftware at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20101109/efb74a31/attachment.html>
More information about the cfe-dev
mailing list