<html><head><base href="x-msg://3367/"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div>I missed that the testing case is returning a struct.<div>You are right in VARegSaveSize.</div><div><br></div><div>For callee:</div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">  </span>sub<span class="Apple-tab-span" style="white-space:pre"> </span>sp, sp, <span style="color: #008d00">#16</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">     </span>push<span class="Apple-tab-span" style="white-space:pre">        </span>{r11, lr}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre"> </span>mov<span class="Apple-tab-span" style="white-space:pre"> </span>r11, sp</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">   </span>sub<span class="Apple-tab-span" style="white-space:pre"> </span>sp, sp, <span style="color: #008d00">#8</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">      </span>str<span class="Apple-tab-span" style="white-space:pre"> </span>r3, [r11, <span style="color: #008d00">#20]</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">  </span>str<span class="Apple-tab-span" style="white-space:pre"> </span>r2, [r11, <span style="color: #008d00">#16]</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">  </span>str<span class="Apple-tab-span" style="white-space:pre"> </span>r1, [r11, <span style="color: #008d00">#12]</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">  </span>ldr<span class="Apple-tab-span" style="white-space:pre"> </span>r1, [r11, <span style="color: #008d00">#76]</span></div><div><br><div><div>The beginning of the input struct @ sp_at_entry - 16 - 8 + 12 = sp_at_entry -12</div><div># of leftover bytes 67-12 = 55</div><div>r11+76 is @ sp_at_entry - 24 + 76 = sp_at_entry + 52, this is incorrect, it should be at align(55, 4) = 56.</div><div><br></div><div>For caller:</div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">       </span>mov<span class="Apple-tab-span" style="white-space:pre"> </span>r0, sp</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">    </span>ldr<span class="Apple-tab-span" style="white-space:pre"> </span>r1, .LCPI1_0</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">      </span>str<span class="Apple-tab-span" style="white-space:pre"> </span>r1, [r0, <span style="color: #008d00">#56]</span></div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span style="color: #008d00"><br></span></div><div>the 2nd argument is at sp_at_entry + 56, which is correct.</div><div><br></div><div>On my setup (built from TOT), I got "ldr r1, [r11, #80]" instead of 76.</div><div><br></div><div>Thanks,</div><div>Manman</div><div><br></div><div>On Jun 18, 2013, at 11:31 PM, Rajesh Viswabramana wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="line-height: 1.4; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; font-family: Arial, arial; font-size: 9pt; "><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Hi all,</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Thanks for all comments,</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Filed bug report with details,</p><div><a href="http://llvm.org/bugs/show_bug.cgi?id=16368">http://llvm.org/bugs/show_bug.cgi?id=16368</a></div><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">@Manman, please find comments, queries inline.</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Regards,<br>Rajesh</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">-------<span class="Apple-converted-space"> </span><b>Original Message</b><span class="Apple-converted-space"> </span>-------</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><b>Sender</b><span class="Apple-converted-space"> </span>: Stepan Dyatkovskiy<<a href="mailto:stpworld@narod.ru">stpworld@narod.ru</a>></p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><b>Date</b><span class="Apple-converted-space"> </span>: Jun 19, 2013 05:15 (GMT+09:00)</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><b>Title</b><span class="Apple-converted-space"> </span>: Re: [LLVMdev] ARM struct byval size > 64 triggers failure</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><div>Hi all,</div><div>One more interesting job :-)</div><div>I'll look too at this case tomorrow. Today my brain is about to be exploded..</div><div> </div><div>-Stepan.</div><div> </div><div>18.06.2013, 22:56, "Manman Ren" <<a href="mailto:mren@apple.com">mren@apple.com</a>>:</div><blockquote type="cite"><div> </div>Hi Rajesh,<div> </div><div>The callee code looks okay to me</div><div><blockquote type="cite"><div style="line-height: 1.4; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; font-family: Arial, arial; font-size: 9pt; "><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Assembly for check114 <br>---------------------------------------------------------------<br>        sub     sp, sp, #16<br>        push    {r11, lr}<br>        mov     r11, sp<br>        sub     sp, sp, #8<br>        str     r3, [r11, #20]<br>        str     r2, [r11, #16]<br>        str     r1, [r11, #12]<br>        ldr     r1, [r11, #76]</p></div></blockquote><div><div>VARegSaveSize is 16 because we store the first 16 bytes of struct byval in r0 to r3.</div><div> </div><div>For the test code/assembly I mentioned, only r1-r3 are used for struct byval. r0 used for return val.</div><div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">So, NumGPRs = 3, VARegSize = 12, VARegSaveSize =16(4 byte offset), access of arg1 is going wrong.</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">For updated test code:</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">struct S114 check114 (<strong>int a</strong>, struct S114 arg0, struct S114* arg1) {</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">.....<br>}</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Only r1, r2 used for struct byval, NumGPRs = 2, VARegSize = 8, VARegSaveSize =8, this case works, able to access arg1.</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Please correct me, if my above understanding is wrong about NumGPRs, VARegSaveSize calculation.</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div></div><div>Align in computeRegArea is 8 since ABI says the stack pointer needs to be 8 byte aligned at function entry point.</div><div>But the second argument does not have to be 8 byte aligned, in fact it is 4 byte aligned for i32.</div><div> </div><div>Ok.</div><div> </div><div>r11, #76 is equivalent to sp_at_entry + 52 since r11 = spat_entry - 16 - 8, which is 4-byte aligned after</div><div>storing the leftover (67-16=51) bytes of struct byval.</div><div> </div><div>For test code, 3 reg used for struct byval, left over will be (67- 12 = 55) copied to stack by caller, 55 sets of ldrb,strb in assembly.</div><div> </div><div>Pasting dump again for locating arg1 from sp_at_entry,</div><div>@entry of check114<br>  sp             0xbefff808 0xbefff808 --> sp_at_entry<p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">  At arg1 accessing instruction [0xbefff808 + 52] -> [0xbefff83c] -><span class="Apple-converted-space"> </span><strong>0x<span>4071706</span>f</strong> <br>  0xbefff7e4: 0x4001ed08 0x40024f90 0x<span>4071706</span>f 0xbefff8a0<br>  0xbefff7f4: 0x<span>0000869</span>c 0x<span>00000000</span> 0x<span>3231302</span>f 0x<span>36353433</span><br>  0xbefff804: 0x3a393837 0x3e3d3c3b 0x<span>4241403</span>f 0x<span>46454443</span><br>  0xbefff814: 0x4a494847 0x4e4d4c4b 0x<span>5251504</span>f 0x<span>56555453</span><br>  0xbefff824: 0x5a595857 0x5e5d5c5b 0x<span>6261605</span>f 0x<span>66656463</span><br>  0xbefff834: 0x6a696867 0x6e6d6c6b<strong> 0x<span>4071706</span>f</strong> <strong>0x<span>00010861</span></strong>                 </p></div><div> </div><div>Can you also paste the assembly for the caller side and check whether the second argument is stored</div><div>at sp_at_entry+52?</div><div> </div><div>Please find the attached assembly file.</div><div> </div><div>As Renato suggested, please file a bug report.</div><div> </div><div>Filed bug.</div><div> </div><div>Thanks,</div><div>Manman</div><div> </div><div> </div><div>On Jun 18, 2013, at 4:26 AM, Rajesh Viswabramana <<a href="mailto:rajesh.vis@samsung.com">rajesh.vis@samsung.com</a>> wrote:</div><br><blockquote type="cite"><div style="line-height: 1.4; text-transform: none; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; font-family: Arial, arial; font-size: 9pt; "><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Hi,</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> </div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Handling of pass by val of struct size >64 bytes case is seems wrong for arm targets.</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><strong>Summary:</strong></p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Incase of struct pass by value for size > 64 along with other function params, failure seen in some corner cases. Access to function params result in wrong stack location access. </p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Stack pointer adjustment done by prologue emitter and offset used to access function params have different logics for calculaton.</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><strong>Test code<br></strong>---------------------------------------------------------------<br>#include <stdio.h><br>struct S114 {<br>  char a[67];<br>}a114[5];</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">struct S114 check114 (struct S114 arg0, struct S114* arg1) { <br>  if(&a114[0] != arg1)                         // arg1 value is wrong<br>    printf( "values %p, %p\n", &a114[0], arg1);<br>}<br>int main () {<br>  int i= 0, j = 0;<br>  for (;j<2; j++)                                    // just filling a114 with some values for identification<br>    for(i=0; i<sizeof(struct S114); i++)<br>      memset(&a114[j].a[i],(0x11+i+j*30), sizeof(int)); </p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">  check114 (a114[1], &a114[0]);         //=> a114[0]  is accessed from wrong location inside check114 function<br>}<br>---------------------------------------------------------------<br>clang -v<br>clang version 3.3 (tags/RELEASE_33/final)<br>Target: i386-pc-linux-gnu<br>Thread model: posix</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> </div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><strong>Output on arm :<br></strong># ./check114.exe<span> </span><br>values 0x10861, 0x<span>4071706</span>f<br>which is wrong.</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> </div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Assembly for check114<span> </span><br>---------------------------------------------------------------<br>        sub     sp, sp, #16<br>        push    {r11, lr}<br>        mov     r11, sp<br>        sub     sp, sp, #8<br>        str     r3, [r11, #20]<br>        str     r2, [r11, #16]<br>        str     r1, [r11, #12]<br>        ldr     r1, [r11, #76]<br>        str     r1, [sp, #4]<br>        .loc    1 7 0 prologue_end<br>        ldr     r2, .LCPI0_0<br>        cmp     r2, r1<br>        beq     .LBB0_2<br>        b       .LBB0_1<br>---------------------------------------------------------------</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> </div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">From reg, stack dump:<br>------------------------------------------------------------------------------------------------------------------------------<br>@entry of check114<br>  => 0x8398 <check114>: sub sp, sp, #16<br>        0x839c <check114+4>: push {r11, lr}<br>  sp             0xbefff808 0xbefff808</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">@if condition<br>       0x83b4 <check114+28>: ldr r1, [r11, #76] ; 0x4c         <--- wrong value copied to r1, offset #76 should be #80<br>       0x83b8 <check114+32>: str r1, [sp, #4]<br>       0x83bc <check114+36>: ldr r2, [pc, #44] ; 0x83f0 <check114+88><br> => 0x83c0 <check114+40>: cmp r2, r1<br>  <br>  r11            0xbefff7f0 -<span>1090521104</span><br>  sp             0xbefff7e8 0xbefff7e8</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">  Stack dump:<br>  0xbefff7e4: 0x4001ed08 0x40024f90 0x<span>4071706</span>f 0xbefff8a0<br>  0xbefff7f4: 0x<span>0000869</span>c 0x<span>00000000</span> 0x<span>3231302</span>f 0x<span>36353433</span><br>  0xbefff804: 0x3a393837 0x3e3d3c3b 0x<span>4241403</span>f 0x<span>46454443</span><br>  0xbefff814: 0x4a494847 0x4e4d4c4b 0x<span>5251504</span>f 0x<span>56555453</span><br>  0xbefff824: 0x5a595857 0x5e5d5c5b 0x<span>6261605</span>f 0x<span>66656463</span><br>  0xbefff834: 0x6a696867 0x6e6d6c6b<strong> 0x<span>4071706</span>f</strong> <strong>0x<span>00010861</span></strong>                 //[R11+4c] -> [0xbefff7f0+4c] -> [0xbefff83c] -> 0x<span>4071706</span>f</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Correct value is at location {[R11+4c]<strong>+4</strong>} --> 0x<span>00010861</span>, 4 bytes offset going wrong.<br>------------------------------------------------------------------------------------------------------------------------------</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">When i checked from the ARM Lowering part for generation of<br>  sub sp, sp, #16</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Emitted by,</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">  if (VARegSaveSize)<br>    emitSPUpdate(isARM, MBB, MBBI, dl, TII, -VARegSaveSize,        // --> VARegSaveSize is calculated in computeRegArea<br>                 MachineInstr::FrameSetup)<br><br>ARMTargetLowering::computeRegArea(..) {<br>  ...<br>  VARegSize = NumGPRs * 4;<br>  VARegSaveSize = (VARegSize + Align - 1) & ~(Align - 1);                 // --> 8 byte alignment done here<br>}</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Stack pointer decremented to NumGPRs*4 + alignment</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">NumGPRs = 3 registers</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">VARegSaveSize  = 16 (after considering 8 byte alignment )</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><br>When the offset(#76) for the instruction, "ldr r1, [r11, #76] ; 0x4c"  is calculated, 4 bytes alignment is considered.<br>In prologue stackpointer calculation 8 byte alignment is considered.</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Due to this mimatch of alignment, If try to access any parameter after byval which results wrong value.</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> </div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Issue(or offset of 4 bytes) wont occur if even number of register used for byval spilling.<br>ex:<span> </span><br>struct S114 check114 (int a, struct S114 arg0, struct S114* arg1) { // accessing arg1 is fine in this case<br>.....<br>}</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> </div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Could someone comment on below queries about fixing the problem,</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">1) Is this 8 byte alignment mandatory ?  Is this due to " ARM AAPCS 5.2.1.2 Stack constraints at a public interface" ? Can this be removed?</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">2) We will leave alignment as it is but in prologue we will adjust SP once again, this is little meaningless.</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">3) While accessing arg1 we will consider alignment and add extra offset -> looks better.</p><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> Offset to access arg1 is calculated by selection DAG that will be target independent. But Alignment adjustment should be done by target lowering. Any suggestions on how to fix this ?</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> </div><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">Regards,<br>Rajesh</p><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> </div><table><tbody><tr><td style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><span><<span>201306181656803</span>_BEI0XT4N.gif></span></p></td></tr></tbody></table>_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a><span> </span>        <a href="http://llvm.cs.uiuc.edu/">http://llvm.cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></div></blockquote></div></div>,<p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; ">_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a><span class="Apple-converted-space"> </span>        <a href="http://llvm.cs.uiuc.edu/">http://llvm.cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></p></blockquote><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><div style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "> <br class="webkit-block-placeholder"></div><table id="confidentialsignimg"><tbody><tr><td namo_lock="" style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><p style="margin-top: 5px; font-family: Arial, arial; margin-bottom: 5px; font-size: 9pt; "><span><201306191201558_BEI0XT4N.gif></span></p></td></tr></tbody></table><span><check114.s></span></div></blockquote></div><br></div></div></body></html>