| # RUN: llvm-mc -filetype=asm < %s -triple i686-windows-msvc | FileCheck %s --check-prefix=ASM | 
 | # RUN: llvm-mc -filetype=obj < %s -triple i686-windows-msvc | llvm-readobj -codeview | FileCheck %s --check-prefix=OBJ | 
 |  | 
 | .globl _foo | 
 | _foo: | 
 | 	.cv_fpo_proc _foo 4 | 
 | 	pushl	%ebp | 
 | 	.cv_fpo_pushreg %ebp | 
 | 	movl	%ebp, %esp | 
 | 	.cv_fpo_setframe %ebp | 
 | 	pushl	%ebx | 
 | 	.cv_fpo_pushreg %ebx | 
 | 	pushl	%edi | 
 | 	.cv_fpo_pushreg %edi | 
 | 	pushl	%esi | 
 | 	.cv_fpo_pushreg esi | 
 | 	subl $20, %esp | 
 | 	.cv_fpo_stackalloc 20 | 
 | 	.cv_fpo_endprologue | 
 |  | 
 | 	# ASM: .cv_fpo_proc _foo 4 | 
 | 	# ASM: pushl	%ebp | 
 | 	# ASM: .cv_fpo_pushreg %ebp | 
 | 	# ASM: movl	%ebp, %esp | 
 | 	# ASM: .cv_fpo_setframe %ebp | 
 | 	# ASM: pushl	%ebx | 
 | 	# ASM: .cv_fpo_pushreg %ebx | 
 | 	# ASM: pushl	%edi | 
 | 	# ASM: .cv_fpo_pushreg %edi | 
 | 	# ASM: pushl	%esi | 
 | 	# ASM: .cv_fpo_pushreg %esi | 
 | 	# ASM: subl $20, %esp | 
 | 	# ASM: .cv_fpo_stackalloc 20 | 
 | 	# ASM: .cv_fpo_endprologue | 
 |  | 
 | 	# Clobbers | 
 | 	xorl %ebx, %ebx | 
 | 	xorl %edi, %edi | 
 | 	xorl %esi, %esi | 
 | 	# Use that stack memory | 
 | 	leal 4(%esp), %eax | 
 | 	movl %eax, (%esp) | 
 | 	calll _bar | 
 |  | 
 | 	# ASM: calll _bar | 
 |  | 
 | 	# Epilogue | 
 | 	# FIXME: Get FPO data for this once we get it for DWARF. | 
 | 	addl $20, %esp | 
 | 	popl %esi | 
 | 	popl %edi | 
 | 	popl %ebx | 
 | 	popl %ebp | 
 | 	retl | 
 | 	.cv_fpo_endproc | 
 |  | 
 | 	# ASM: .cv_fpo_endproc | 
 |  | 
 | 	.section	.debug$S,"dr" | 
 | 	.p2align	2 | 
 | 	.long	4                       # Debug section magic | 
 | 	.cv_fpo_data _foo | 
 | 	.cv_stringtable | 
 |  | 
 | 	# ASM: .cv_fpo_data | 
 |  | 
 | # OBJ:       Subsection [ | 
 | # OBJ-NEXT:    SubSectionType: FrameData (0xF5) | 
 | # OBJ-NEXT:    SubSectionSize: | 
 | # OBJ-NEXT:    LinkageName: _foo | 
 | # OBJ-NEXT:    FrameData { | 
 | # OBJ-NEXT:      RvaStart: 0x0 | 
 | # OBJ-NEXT:      CodeSize: 0x23 | 
 | # OBJ-NEXT:      LocalSize: 0x0 | 
 | # OBJ-NEXT:      ParamsSize: 0x4 | 
 | # OBJ-NEXT:      MaxStackSize: 0x0 | 
 | # OBJ-NEXT:      FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = | 
 | # OBJ-NEXT:      PrologSize: 0x9 | 
 | # OBJ-NEXT:      SavedRegsSize: 0x0 | 
 | # OBJ-NEXT:      Flags [ (0x4) | 
 | # OBJ-NEXT:        IsFunctionStart (0x4) | 
 | # OBJ-NEXT:      ] | 
 | # OBJ-NEXT:    } | 
 | # OBJ-NEXT:    FrameData { | 
 | # OBJ-NEXT:      RvaStart: 0x1 | 
 | # OBJ-NEXT:      CodeSize: 0x22 | 
 | # OBJ-NEXT:      LocalSize: 0x0 | 
 | # OBJ-NEXT:      ParamsSize: 0x4 | 
 | # OBJ-NEXT:      MaxStackSize: 0x0 | 
 | # OBJ-NEXT:      FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = | 
 | # OBJ-NEXT:      PrologSize: 0x8 | 
 | # OBJ-NEXT:      SavedRegsSize: 0x4 | 
 | # OBJ-NEXT:      Flags [ (0x0) | 
 | # OBJ-NEXT:      ] | 
 | # OBJ-NEXT:    } | 
 | # OBJ-NEXT:    FrameData { | 
 | # OBJ-NEXT:      RvaStart: 0x3 | 
 | # OBJ-NEXT:      CodeSize: 0x20 | 
 | # OBJ-NEXT:      LocalSize: 0x0 | 
 | # OBJ-NEXT:      ParamsSize: 0x4 | 
 | # OBJ-NEXT:      MaxStackSize: 0x0 | 
 | # OBJ-NEXT:      FrameFunc: $T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = | 
 | # OBJ-NEXT:      PrologSize: 0x6 | 
 | # OBJ-NEXT:      SavedRegsSize: 0x4 | 
 | # OBJ-NEXT:      Flags [ (0x0) | 
 | # OBJ-NEXT:      ] | 
 | # OBJ-NEXT:    } | 
 | # OBJ-NEXT:    FrameData { | 
 | # OBJ-NEXT:      RvaStart: 0x4 | 
 | # OBJ-NEXT:      CodeSize: 0x1F | 
 | # OBJ-NEXT:      LocalSize: 0x0 | 
 | # OBJ-NEXT:      ParamsSize: 0x4 | 
 | # OBJ-NEXT:      MaxStackSize: 0x0 | 
 | # OBJ-NEXT:      FrameFunc: $T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = | 
 | # OBJ-NEXT:      PrologSize: 0x5 | 
 | # OBJ-NEXT:      SavedRegsSize: 0x8 | 
 | # OBJ-NEXT:      Flags [ (0x0) | 
 | # OBJ-NEXT:      ] | 
 | # OBJ-NEXT:    } | 
 | # OBJ-NEXT:    FrameData { | 
 | # OBJ-NEXT:      RvaStart: 0x5 | 
 | # OBJ-NEXT:      CodeSize: 0x1E | 
 | # OBJ-NEXT:      LocalSize: 0x0 | 
 | # OBJ-NEXT:      ParamsSize: 0x4 | 
 | # OBJ-NEXT:      MaxStackSize: 0x0 | 
 | # OBJ-NEXT:      FrameFunc: $T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ = | 
 | # OBJ-NEXT:      PrologSize: 0x4 | 
 | # OBJ-NEXT:      SavedRegsSize: 0xC | 
 | # OBJ-NEXT:      Flags [ (0x0) | 
 | # OBJ-NEXT:      ] | 
 | # OBJ-NEXT:    } | 
 | # OBJ-NEXT:    FrameData { | 
 | # OBJ-NEXT:      RvaStart: 0x6 | 
 | # OBJ-NEXT:      CodeSize: 0x1D | 
 | # OBJ-NEXT:      LocalSize: 0x0 | 
 | # OBJ-NEXT:      ParamsSize: 0x4 | 
 | # OBJ-NEXT:      MaxStackSize: 0x0 | 
 | # OBJ-NEXT:      FrameFunc: $T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ = $esi $T0 16 - ^ = | 
 | # OBJ-NEXT:      PrologSize: 0x3 | 
 | # OBJ-NEXT:      SavedRegsSize: 0x10 | 
 | # OBJ-NEXT:      Flags [ (0x0) | 
 | # OBJ-NEXT:      ] | 
 | # OBJ-NEXT:    } | 
 | # OBJ-NOT: FrameData |