<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>