<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi Galina,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Looking at it now. Thanks for letting me know.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sanjin<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>From:</b> Galina Kistanova <gkistanova@gmail.com> <br><b>Sent:</b> Thursday, January 17, 2019 2:51 PM<br><b>To:</b> Sanjin Sijaric <ssijaric@codeaurora.org><br><b>Cc:</b> Artur Pilipenko via llvm-commits <llvm-commits@lists.llvm.org><br><b>Subject:</b> Re: [llvm] r351421 - [ARM64][Windows] Share unwind codes between epilogues<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>Hello Sanjin,<br><br>This commit broke test on the next builder:<br><a href="http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win">http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win</a><br>. . .<br>Failing Tests (1):<br>    LLVM :: CodeGen/AArch64/wineh4.mir<br><br>Please have a look?<br>The builder was already red and did not send notifications on this.<br><br>Thanks<br><br>Galina<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Thu, Jan 17, 2019 at 1:49 AM Sanjin Sijaric via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><p class=MsoNormal>Author: ssijaric<br>Date: Thu Jan 17 01:45:17 2019<br>New Revision: 351421<br><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=351421&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=351421&view=rev</a><br>Log:<br>[ARM64][Windows] Share unwind codes between epilogues<br><br>There are cases where we have multiple epilogues that have the exact same unwind<br>code sequence.  In that case, the epilogues can share the same unwind codes in<br>the .xdata section.  This should get us past the assert "SEH unwind data<br>splitting not yet implemented" in many cases.<br><br>We still need to add support for generating multiple .pdata/.xdata sections for<br>those functions that need to be split into fragments.<br><br>Differential Revision: <a href="https://reviews.llvm.org/D56813" target="_blank">https://reviews.llvm.org/D56813</a><br><br>Added:<br>    llvm/trunk/test/CodeGen/AArch64/wineh8.mir<br>Modified:<br>    llvm/trunk/lib/MC/MCWin64EH.cpp<br>    llvm/trunk/test/CodeGen/AArch64/wineh4.mir<br><br>Modified: llvm/trunk/lib/MC/MCWin64EH.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCWin64EH.cpp?rev=351421&r1=351420&r2=351421&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCWin64EH.cpp?rev=351421&r1=351420&r2=351421&view=diff</a><br>==============================================================================<br>--- llvm/trunk/lib/MC/MCWin64EH.cpp (original)<br>+++ llvm/trunk/lib/MC/MCWin64EH.cpp Thu Jan 17 01:45:17 2019<br>@@ -453,6 +453,38 @@ static void ARM64EmitUnwindCode(MCStream<br>   }<br> }<br><br>+// Returns the epilog symbol of an epilog with the exact same unwind code<br>+// sequence, if it exists.  Otherwise, returns nulltpr.<br>+// EpilogInstrs - Unwind codes for the current epilog.<br>+// Epilogs - Epilogs that potentialy match the current epilog.<br>+static MCSymbol*<br>+FindMatchingEpilog(const std::vector<WinEH::Instruction>& EpilogInstrs,<br>+                   const std::vector<MCSymbol *>& Epilogs,<br>+                   const WinEH::FrameInfo *info) {<br>+  for (auto *EpilogStart : Epilogs) {<br>+    auto InstrsIter = info->EpilogMap.find(EpilogStart);<br>+    assert(InstrsIter != info->EpilogMap.end() &&<br>+           "Epilog not found in EpilogMap");<br>+    const auto &Instrs = InstrsIter->second;<br>+<br>+    if (Instrs.size() != EpilogInstrs.size())<br>+      continue;<br>+<br>+    bool Match = true;<br>+    for (unsigned i = 0; i < Instrs.size(); ++i)<br>+      if (Instrs[i].Operation != EpilogInstrs[i].Operation ||<br>+          Instrs[i].Offset != EpilogInstrs[i].Offset ||<br>+          Instrs[i].Register != EpilogInstrs[i].Register) {<br>+         Match = false;<br>+         break;<br>+      }<br>+<br>+    if (Match)<br>+      return EpilogStart;<br>+  }<br>+  return nullptr;<br>+}<br>+<br> // Populate the .xdata section.  The format of .xdata on ARM64 is documented at<br> // <a href="https://docs.microsoft.com/en-us/cpp/build/arm64-exception-handling" target="_blank">https://docs.microsoft.com/en-us/cpp/build/arm64-exception-handling</a><br> static void ARM64EmitUnwindInfo(MCStreamer &streamer, WinEH::FrameInfo *info) {<br>@@ -477,12 +509,29 @@ static void ARM64EmitUnwindInfo(MCStream<br><br>   // Process epilogs.<br>   MapVector<MCSymbol *, uint32_t> EpilogInfo;<br>+  // Epilogs processed so far.<br>+  std::vector<MCSymbol *> AddedEpilogs;<br>+<br>   for (auto &I : info->EpilogMap) {<br>     MCSymbol *EpilogStart = I.first;<br>     auto &EpilogInstrs = I.second;<br>     uint32_t CodeBytes = ARM64CountOfUnwindCodes(EpilogInstrs);<br>-    EpilogInfo[EpilogStart] = TotalCodeBytes;<br>-    TotalCodeBytes += CodeBytes;<br>+<br>+    uint32_t NumUnwindCodes = EpilogInstrs.size();<br>+    MCSymbol* MatchingEpilog =<br>+      FindMatchingEpilog(EpilogInstrs, AddedEpilogs, info);<br>+    if (MatchingEpilog) {<br>+      assert(EpilogInfo.find(MatchingEpilog) != EpilogInfo.end() &&<br>+             "Duplicate epilog not found");<br>+      EpilogInfo[EpilogStart] = EpilogInfo[MatchingEpilog];<br>+      // Clear the unwind codes in the EpilogMap, so that they don't get output<br>+      // in the logic below.<br>+      EpilogInstrs.clear();<br>+    } else {<br>+      EpilogInfo[EpilogStart] = TotalCodeBytes;<br>+      TotalCodeBytes += CodeBytes;<br>+      AddedEpilogs.push_back(EpilogStart);<br>+    }<br>   }<br><br>   // Code Words, Epilog count, E, X, Vers, Function Length<br><br>Modified: llvm/trunk/test/CodeGen/AArch64/wineh4.mir<br>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/wineh4.mir?rev=351421&r1=351420&r2=351421&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/wineh4.mir?rev=351421&r1=351420&r2=351421&view=diff</a><br>==============================================================================<br>--- llvm/trunk/test/CodeGen/AArch64/wineh4.mir (original)<br>+++ llvm/trunk/test/CodeGen/AArch64/wineh4.mir Thu Jan 17 01:45:17 2019<br>@@ -1,7 +1,7 @@<br> # RUN: llc -o - %s -mtriple=aarch64-windows -start-after=prologepilog \<br> # RUN:   -disable-branch-fold  -filetype=obj \<br> # RUN: | llvm-readobj -unwind | FileCheck %s<br>-# Check that multiple epilgoues are correctly placed in .xdata.<br>+# Check that identical multiple epilgoues are correctly shared in .xdata.<br><br> # CHECK:        ExceptionData {<br> # CHECK-NEXT:      FunctionLength: 164<br>@@ -9,7 +9,7 @@<br> # CHECK-NEXT:      ExceptionData: No<br> # CHECK-NEXT:      EpiloguePacked: No<br> # CHECK-NEXT:      EpilogueScopes: 2<br>-# CHECK-NEXT:      ByteCodeLength: 48<br>+# CHECK-NEXT:      ByteCodeLength: 32<br> # CHECK-NEXT:      Prologue [<br> # CHECK-NEXT:        0xc80c              ; stp x19, x20, [sp, #96]<br> # CHECK-NEXT:        0xc88a              ; stp x21, x22, [sp, #80]<br>@@ -37,7 +37,7 @@<br> # CHECK-NEXT:        }<br> # CHECK-NEXT:        EpilogueScope {<br> # CHECK-NEXT:          StartOffset: 33<br>-# CHECK-NEXT:          EpilogueStartIndex: 30<br>+# CHECK-NEXT:          EpilogueStartIndex: 15<br> # CHECK-NEXT:          Opcodes [<br> # CHECK-NEXT:            0xc80c              ; ldp x19, x20, [sp, #96]<br> # CHECK-NEXT:            0xc88a              ; ldp x21, x22, [sp, #80]<br><br>Added: llvm/trunk/test/CodeGen/AArch64/wineh8.mir<br>URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/wineh8.mir?rev=351421&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/wineh8.mir?rev=351421&view=auto</a><br>==============================================================================<br>--- llvm/trunk/test/CodeGen/AArch64/wineh8.mir (added)<br>+++ llvm/trunk/test/CodeGen/AArch64/wineh8.mir Thu Jan 17 01:45:17 2019<br>@@ -0,0 +1,225 @@<br>+# RUN: llc -o - %s -mtriple=aarch64-windows -start-after=prologepilog \<br>+# RUN:   -disable-branch-fold  -filetype=obj \<br>+# RUN: | llvm-readobj -unwind | FileCheck %s<br>+# Check that non-identical multiple epilgoues are correctly shared in .xdata.<br>+<br>+# CHECK:        ExceptionData {<br>+# CHECK-NEXT:      FunctionLength: 160<br>+# CHECK-NEXT:      Version: 0<br>+# CHECK-NEXT:      ExceptionData: No<br>+# CHECK-NEXT:      EpiloguePacked: No<br>+# CHECK-NEXT:      EpilogueScopes: 2<br>+# CHECK-NEXT:      ByteCodeLength: 44<br>+# CHECK-NEXT:      Prologue [<br>+# CHECK-NEXT:        0xc80c              ; stp x19, x20, [sp, #96]<br>+# CHECK-NEXT:        0xc88a              ; stp x21, x22, [sp, #80]<br>+# CHECK-NEXT:        0xc908              ; stp x23, x24, [sp, #64]<br>+# CHECK-NEXT:        0xc986              ; stp x25, x26, [sp, #48]<br>+# CHECK-NEXT:        0xca04              ; stp x27, x28, [sp, #32]<br>+# CHECK-NEXT:        0xd802              ; stp d8, d9, [sp, #16]<br>+# CHECK-NEXT:        0xda8d              ; stp d10, d11, [sp, #-112]!<br>+# CHECK-NEXT:        0xe4                ; end<br>+# CHECK-NEXT:      ]<br>+# CHECK-NEXT:      EpilogueScopes [<br>+# CHECK-NEXT:        EpilogueScope {<br>+# CHECK-NEXT:          StartOffset: 16<br>+# CHECK-NEXT:          EpilogueStartIndex: 15<br>+# CHECK-NEXT:          Opcodes [<br>+# CHECK-NEXT:            0xc80c              ; ldp x19, x20, [sp, #96]<br>+# CHECK-NEXT:            0xc88a              ; ldp x21, x22, [sp, #80]<br>+# CHECK-NEXT:            0xc908              ; ldp x23, x24, [sp, #64]<br>+# CHECK-NEXT:            0xc986              ; ldp x25, x26, [sp, #48]<br>+# CHECK-NEXT:            0xd802              ; ldp d8, d9, [sp, #16]<br>+# CHECK-NEXT:            0xda8d              ; ldp d10, d11, [sp], #112<br>+# CHECK-NEXT:            0xe4                ; end<br>+# CHECK-NEXT:          ]<br>+# CHECK-NEXT:        }<br>+# CHECK-NEXT:        EpilogueScope {<br>+# CHECK-NEXT:          StartOffset: 32<br>+# CHECK-NEXT:          EpilogueStartIndex: 28<br>+# CHECK-NEXT:          Opcodes [<br>+# CHECK-NEXT:            0xc80c              ; ldp x19, x20, [sp, #96]<br>+# CHECK-NEXT:            0xc88a              ; ldp x21, x22, [sp, #80]<br>+# CHECK-NEXT:            0xc908              ; ldp x23, x24, [sp, #64]<br>+# CHECK-NEXT:            0xc986              ; ldp x25, x26, [sp, #48]<br>+# CHECK-NEXT:            0xca04              ; ldp x27, x28, [sp, #32]<br>+# CHECK-NEXT:            0xd802              ; ldp d8, d9, [sp, #16]<br>+# CHECK-NEXT:            0xda8d              ; ldp d10, d11, [sp], #112<br>+# CHECK-NEXT:            0xe4                ; end<br>+# CHECK-NEXT:          ]<br>+# CHECK-NEXT:        }<br>+# CHECK-NEXT:      ]<br>+# CHECK-NEXT:    }<br>+...<br>+---<br>+name:            test<br>+alignment:       2<br>+exposesReturnsTwice: false<br>+legalized:       false<br>+regBankSelected: false<br>+selected:        false<br>+failedISel:      false<br>+tracksRegLiveness: true<br>+hasWinCFI:       true<br>+registers:<br>+liveins:<br>+  - { reg: '$w0', virtual-reg: '' }<br>+frameInfo:<br>+  isFrameAddressTaken: false<br>+  isReturnAddressTaken: false<br>+  hasStackMap:     false<br>+  hasPatchPoint:   false<br>+  stackSize:       112<br>+  offsetAdjustment: 0<br>+  maxAlignment:    8<br>+  adjustsStack:    false<br>+  hasCalls:        false<br>+  stackProtector:  ''<br>+  maxCallFrameSize: 0<br>+  hasOpaqueSPAdjustment: true<br>+  hasVAStart:      false<br>+  hasMustTailInVarArgFunc: false<br>+  localFrameSize:  0<br>+  savePoint:       ''<br>+  restorePoint:    ''<br>+fixedStack:<br>+stack:<br>+  - { id: 0, name: '', type: spill-slot, offset: -8, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x19', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 1, name: '', type: spill-slot, offset: -16, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x20', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 2, name: '', type: spill-slot, offset: -24, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x21', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 3, name: '', type: spill-slot, offset: -32, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x22', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 4, name: '', type: spill-slot, offset: -40, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x23', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 5, name: '', type: spill-slot, offset: -48, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x24', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 6, name: '', type: spill-slot, offset: -56, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x25', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 7, name: '', type: spill-slot, offset: -64, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x26', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 8, name: '', type: spill-slot, offset: -72, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x27', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 9, name: '', type: spill-slot, offset: -80, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$x28', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 10, name: '', type: spill-slot, offset: -88, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$d8', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 11, name: '', type: spill-slot, offset: -96, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$d9', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 12, name: '', type: spill-slot, offset: -104, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$d10', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+  - { id: 13, name: '', type: spill-slot, offset: -112, size: 8, alignment: 8,<br>+      stack-id: 0, callee-saved-register: '$d11', callee-saved-restored: true,<br>+      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }<br>+constants:<br>+body:             |<br>+  bb.0.entry:<br>+    successors: %bb.2(0x40000000), %bb.1(0x40000000)<br>+    liveins: $x0, $x1, $d0, $d1, $d10, $d11, $d8, $d9, $x27, $x28, $x25, $x26, $x23, $x24, $x21, $x22, $x19, $x20<br>+<br>+    early-clobber $sp = frame-setup STPDpre killed $d10, killed $d11, $sp, -14 :: (store 8 into %stack.12), (store 8 into %stack.13)<br>+    frame-setup SEH_SaveFRegP_X 10, 11, -112<br>+    frame-setup STPDi killed $d8, killed $d9, $sp, 2 :: (store 8 into %stack.10), (store 8 into %stack.11)<br>+    frame-setup SEH_SaveFRegP 8, 9, 16<br>+    frame-setup STPXi killed $x27, killed $x28, $sp, 4 :: (store 8 into %stack.8), (store 8 into %stack.9)<br>+    frame-setup SEH_SaveRegP 27, 28, 32<br>+    frame-setup STPXi killed $x25, killed $x26, $sp, 6 :: (store 8 into %stack.6), (store 8 into %stack.7)<br>+    frame-setup SEH_SaveRegP 25, 26, 48<br>+    frame-setup STPXi killed $x23, killed $x24, $sp, 8 :: (store 8 into %stack.4), (store 8 into %stack.5)<br>+    frame-setup SEH_SaveRegP 23, 24, 64<br>+    frame-setup STPXi killed $x21, killed $x22, $sp, 10 :: (store 8 into %stack.2), (store 8 into %stack.3)<br>+    frame-setup SEH_SaveRegP 21, 22, 80<br>+    frame-setup STPXi killed $x19, killed $x20, $sp, 12 :: (store 8 into %stack.0), (store 8 into %stack.1)<br>+    frame-setup SEH_SaveRegP 19, 20, 96<br>+    frame-setup SEH_PrologEnd<br>+    frame-setup CFI_INSTRUCTION def_cfa_offset 112<br>+    frame-setup CFI_INSTRUCTION offset $w19, -8<br>+    frame-setup CFI_INSTRUCTION offset $w20, -16<br>+    frame-setup CFI_INSTRUCTION offset $w21, -24<br>+    frame-setup CFI_INSTRUCTION offset $w22, -32<br>+    frame-setup CFI_INSTRUCTION offset $w23, -40<br>+    frame-setup CFI_INSTRUCTION offset $w24, -48<br>+    frame-setup CFI_INSTRUCTION offset $w25, -56<br>+    frame-setup CFI_INSTRUCTION offset $w26, -64<br>+    frame-setup CFI_INSTRUCTION offset $w27, -72<br>+    frame-setup CFI_INSTRUCTION offset $w28, -80<br>+    frame-setup CFI_INSTRUCTION offset $b8, -88<br>+    frame-setup CFI_INSTRUCTION offset $b9, -96<br>+    frame-setup CFI_INSTRUCTION offset $b10, -104<br>+    frame-setup CFI_INSTRUCTION offset $b11, -112<br>+    $x19 = ADDXrr $x0, killed $x1<br>+    $d8 = FADDDrr killed $d0, $d1<br>+    $d9 = FADDDrr $d8, $d1<br>+    $d10 = FADDDrr $d9, $d8<br>+    $d11 = FADDDrr killed $d9, $d10<br>+    $x20 = SUBSXrr $x19, killed $x0, implicit-def $nzcv<br>+    Bcc 1, %bb.2, implicit killed $nzcv<br>+    B %bb.1<br>+<br>+  bb.1:<br>+    liveins: $x19, $x20<br>+<br>+    $x21 = ADDXrr $x20, killed $x19<br>+    $x22 = ADDXrr $x21, killed $x20<br>+    $x23 = ADDXrr $x22, killed $x21<br>+    $x24 = ADDXrr $x23, killed $x22<br>+    $x25 = ADDXrr $x24, killed $x23<br>+    $x26 = ADDXrr $x25, killed $x24<br>+    $x27 = ADDXrr $x26, killed $x25<br>+    $x28 = ADDXrr $x27, killed $x26<br>+    $x0 = COPY $x28<br>+    frame-destroy SEH_EpilogStart<br>+    $x19, $x20 = frame-destroy LDPXi $sp, 12 :: (load 8 from %stack.0), (load 8 from %stack.1)<br>+    frame-destroy SEH_SaveRegP 19, 20, 96<br>+    $x21, $x22 = frame-destroy LDPXi $sp, 10 :: (load 8 from %stack.2), (load 8 from %stack.3)<br>+    frame-destroy SEH_SaveRegP 21, 22, 80<br>+    $x23, $x24 = frame-destroy LDPXi $sp, 8 :: (load 8 from %stack.4), (load 8 from %stack.5)<br>+    frame-destroy SEH_SaveRegP 23, 24, 64<br>+    $x25, $x26 = frame-destroy LDPXi $sp, 6 :: (load 8 from %stack.6), (load 8 from %stack.7)<br>+    frame-destroy SEH_SaveRegP 25, 26, 48<br>+    $x27, $x28 = frame-destroy LDPXi $sp, 4 :: (load 8 from %stack.8), (load 8 from %stack.9)<br>+    frame-destroy SEH_SaveRegP 27, 28, 32<br>+    $d8, $d9 = frame-destroy LDPDi $sp, 2 :: (load 8 from %stack.10), (load 8 from %stack.11)<br>+    frame-destroy SEH_SaveFRegP 8, 9, 16<br>+    early-clobber $sp, $d10, $d11 = frame-destroy LDPDpost $sp, 14 :: (load 8 from %stack.12), (load 8 from %stack.13)<br>+    frame-destroy SEH_SaveFRegP_X 10, 11, -112<br>+    frame-destroy SEH_EpilogEnd<br>+    RET_ReallyLR implicit $x0<br>+<br>+  bb.2:<br>+    liveins: $x28, $d11<br>+<br>+    $x0 = COPY $d11<br>+    $x0 = ADDXrr $x0, killed $x28<br>+    frame-destroy SEH_EpilogStart<br>+    $x19, $x20 = frame-destroy LDPXi $sp, 12 :: (load 8 from %stack.0), (load 8 from %stack.1)<br>+    frame-destroy SEH_SaveRegP 19, 20, 96<br>+    $x21, $x22 = frame-destroy LDPXi $sp, 10 :: (load 8 from %stack.2), (load 8 from %stack.3)<br>+    frame-destroy SEH_SaveRegP 21, 22, 80<br>+    $x23, $x24 = frame-destroy LDPXi $sp, 8 :: (load 8 from %stack.4), (load 8 from %stack.5)<br>+    frame-destroy SEH_SaveRegP 23, 24, 64<br>+    $x25, $x26 = frame-destroy LDPXi $sp, 6 :: (load 8 from %stack.6), (load 8 from %stack.7)<br>+    frame-destroy SEH_SaveRegP 25, 26, 48<br>+    $d8, $d9 = frame-destroy LDPDi $sp, 2 :: (load 8 from %stack.10), (load 8 from %stack.11)<br>+    frame-destroy SEH_SaveFRegP 8, 9, 16<br>+    early-clobber $sp, $d10, $d11 = frame-destroy LDPDpost $sp, 14 :: (load 8 from %stack.12), (load 8 from %stack.13)<br>+    frame-destroy SEH_SaveFRegP_X 10, 11, -112<br>+    frame-destroy SEH_EpilogEnd<br>+    RET_ReallyLR implicit $x0<br>+<br>+...<br><br><br>_______________________________________________<br>llvm-commits mailing list<br><a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><o:p></o:p></p></blockquote></div></div></body></html>