<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">found offending function.<br>
<br>
/// getPreferredTypeAlign - Return the "preferred" alignment of the specified<br>
/// type for the current target in bits.  This can be different than the ABI<br>
/// alignment in cases where it is beneficial for performance to overalign<br>
/// a data type.<br>
<br>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div style="direction: ltr;" id="divRpF827472"><font color="#000000" face="Tahoma" size="2"><b>From:</b> cfe-dev-bounces@cs.uiuc.edu [cfe-dev-bounces@cs.uiuc.edu] on behalf of Robert Lytton [robert@xmos.com]<br>
<b>Sent:</b> 11 October 2013 17:26<br>
<b>To:</b> cfe-dev@cs.uiuc.edu<br>
<b>Subject:</b> [cfe-dev] clang not using prefered alignment for 'long long' or 'double'<br>
</font><br>
</div>
<div></div>
<div>
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">Hi<br>
<br>
I'm working on the XCore target where the target datalayout specifies i64:32:32 and f64:32:32.<br>
<br>
The target also specifies:<br>
    LongLongAlign = 32;<br>
    SuitableAlign = 32;<br>
    DoubleAlign = LongDoubleAlign = 32;<br>
(debug confirms that the access functions correctly returning 32)<br>
<br>
However compiling:<br>
    void test(){ long long v=0; }<br>
produces 64bit alignment:<br>
    define void @test() #0 {<br>
    entry:<br>
      %v = alloca i64, align 8<br>
      store i64 0, i64* %v, align 8<br>
      ret void<br>
    }<br>
<br>
The following also fails:<br>
    // RUN: %clang_cc1 -triple xcore -verify %s<br>
    // expected-no-diagnostics<br>
    _Static_assert(sizeof(long long) == 8, "sizeof long long is wrong");<br>
    _Static_assert(_Alignof(long long) == 4, "alignof long long is wrong");<br>
    _Static_assert(sizeof(double) == 8, "sizeof double is wrong");<br>
    _Static_assert(_Alignof(double) == 4, "alignof double is wrong");<br>
<br>
As the target is very memory sensitive 'align 8' is a wasteful, needless operation and as such is considered an error!<br>
<br>
I have tried to trace where the decision to use an alignment of 8 is being made without success so far.<br>
Help or comment most welcome.<br>
Thanks.<br>
Robert<br>
<br>
<font color="black" face="Tahoma" size="2"><span dir="ltr" style="font-size:10pt"></span></font></div>
</div>
</div>
</div>
</body>
</html>