PR16752[PATCH]: 'mode' attribute for unusual targets doesn't work properly.

Stepan Dyatkovskiy stpworld at narod.ru
Tue Sep 10 06:56:06 PDT 2013


 > Tried to commit the second patch, but some buildbots did like it. It
Sorry for typo. Buildbots *didn't* like it.
Tests were passed on my computer, since I disabled ppc target.
-Stepan.

Stepan Dyatkovskiy wrote:
> Hi Eli,
> Tried to commit the second patch, but some buildbots did like it. It
> only works if we add one more branch to getRealTypeByWidth:
>
> diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp
> index 38cb411..bf6acd2 100644
> --- a/lib/Basic/TargetInfo.cpp
> +++ b/lib/Basic/TargetInfo.cpp
> @@ -174,7 +174,10 @@ TargetInfo::RealType
> TargetInfo::getRealTypeByWidth(unsigned BitWidth) const {
>
>     switch (BitWidth) {
>     case 96:
> -    if (&getLongDoubleFormat() == &llvm::APFloat::x87DoubleExtended)
> +    if (&getLongDoubleFormat() == &llvm::APFloat::x87DoubleExtended ||
> +        // Due to test/Sema/attr-mode.c test it seems that
> +        // PPC machines should use PPCDoubleDouble type for XC mode.
> +        &getLongDoubleFormat() == &llvm::APFloat::PPCDoubleDouble)
>         return LongDouble;
>       break;
>     case 128:
>
> If its OK, I would like to commit patch and this change.
>
> -Stepan.
>
> Eli Friedman wrote:
>> LGTM.
>>
>> -Eli
>>
>>
>> On Mon, Sep 9, 2013 at 5:04 AM, Stepan Dyatkovskiy <stpworld at narod.ru
>> <mailto:stpworld at narod.ru>> wrote:
>>
>>     Since I had split the patch and committed only ASTContext and
>>     TargetInfo getIntTypeByWidth and friends, there is the second patch,
>>     that fixes PR16752 itself.
>>
>>     Please, find it in attachment for review.
>>
>>     -Stepan.
>>     Eli Friedman wrote:
>>
>>         On Tue, Sep 3, 2013 at 2:16 AM, Stepan Dyatkovskiy
>>         <stpworld at narod.ru <mailto:stpworld at narod.ru>
>>         <mailto:stpworld at narod.ru <mailto:stpworld at narod.ru>>> wrote:
>>
>>              Hi Eli,
>>              Sorry for latency.
>>              As you remember this patch should correct 'mode' attr
>>              implementation. You proposed to use generic way of type
>>         detection
>>              for each target: just scan for target types and select
>> one with
>>              suitable width.
>>
>>              Unfortunately I can't commit patch with generic
>>         implementation. I
>>              got test failure for clang. And I expect more failures for
>>         another
>>              targets. The reason is next.
>>
>>              The target could still keep mode unsupported even if it has
>>         type of
>>              suitable width. I mean the next.
>>              For example this string should cause error for i686
>>         machines (128
>>              bit float):
>>              typedef          float f128ibm __attribute__ ((mode (TF)));
>>              But in case of generic approach for all targets it would be
>>         passed.
>>              In this case virtual functions allows to implement
>> exceptions.
>>
>>
>>         The generic implementation is still essentially correct; the the
>>         issue
>>         is that getLongDoubleWidth() isn't actually the right value to
>>         check.
>>            It returns "sizeof(long double) * 8", not the actual width
>> of the
>>         underlying float format.  You should be able to work around
>> this by
>>         checking getLongDoubleFormat() instead of getLongDoubleWidth().
>>
>>              In this case 'getIntTypeByWidth' may be a bit confusing
>> name.
>>              Instead it is supposed to return type for some particular
>>         mode, not
>>              by width. Something like getInt/RealTypeForMode(width,
>> sign).
>>              Though, currently I kept the original name.
>>
>>
>>         If you want to change it, that's fine.
>>
>>         -Eli
>>
>>
>>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list