# RUN: llvm-mc -triple=i686-windows-msvc -filetype=obj < %s | llvm-readobj --codeview | FileCheck %s

# Test for .cv_fpo_stackalign. We should generate FPO data that restores CSRs
# at each instruction, and in the last FrameData we should use the '@'
# alignment operator to define $T0, the vframe value.

# Based on this C code:
# void usevals(int, int, double*);
# int realign_with_csrs() {
#   int a = getval();
#   int b = getval();
#   double __declspec(align(8)) force_alignment = 0.42;
#   usevals(a, b, &force_alignment);
#   return a + b;
# }

# CHECK: Subsection [
# CHECK:   SubSectionType: Symbols (0xF1)
# CHECK:   Compile3Sym {
# CHECK:     Kind: S_COMPILE3 (0x113C)
# CHECK:   }
# CHECK: ]
# CHECK: Subsection [
# CHECK:   SubSectionType: FrameData (0xF5)
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 .raSearch =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 .raSearch =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:       $ebp $T0 4 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 $ebp 4 + =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:       $ebp $T0 4 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 $ebp 4 + =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:       $ebp $T0 4 - ^ =
# CHECK:       $edi $T0 8 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T0 $ebp 4 + =
# CHECK:       $eip $T0 ^ =
# CHECK:       $esp $T0 4 + =
# CHECK:       $ebp $T0 4 - ^ =
# CHECK:       $edi $T0 8 - ^ =
# CHECK:       $esi $T0 12 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK:   FrameData {
# CHECK:     FrameFunc [
# CHECK:       $T1 $ebp 4 + =
# CHECK:       $T0 $T1 12 - 8 @ =
# CHECK:       $eip $T1 ^ =
# CHECK:       $esp $T1 4 + =
# CHECK:       $ebp $T1 4 - ^ =
# CHECK:       $edi $T1 8 - ^ =
# CHECK:       $esi $T1 12 - ^ =
# CHECK:     ]
# CHECK:   }
# CHECK: ]
# CHECK: Subsection [
# CHECK:   SubSectionType: Symbols (0xF1)
# CHECK: ]
# CHECK: Subsection [
# CHECK:   SubSectionType: FileChecksums (0xF4)
# CHECK: ]
# CHECK: Subsection [
# CHECK:   SubSectionType: StringTable (0xF3)
# CHECK: ]

	.text
	.def	 _realign_with_csrs; .scl	2; .type	32; .endef
	.globl	_realign_with_csrs      # -- Begin function realign_with_csrs
_realign_with_csrs:                     # @realign_with_csrs
Lfunc_begin0:
	.cv_func_id 0
	.cv_file	1 "C:\\src\\llvm-project\\build\\t.c" "2A4F9B6BBBF7845521201755D1B14ACC" 1
	.cv_loc	0 1 4 0                 # t.c:4:0
	.cv_fpo_proc	_realign_with_csrs 0
# %bb.0:                                # %entry
	pushl	%ebp
	.cv_fpo_pushreg	%ebp
	movl	%esp, %ebp
	.cv_fpo_setframe	%ebp
Ltmp0:
	pushl	%edi
	.cv_fpo_pushreg	%edi
	pushl	%esi
	.cv_fpo_pushreg	%esi
	andl	$-8, %esp
	.cv_fpo_stackalign	8
	subl	$8, %esp
	.cv_fpo_stackalloc	8
	.cv_fpo_endprologue
	.cv_loc	0 1 5 0                 # t.c:5:0
	calll	_getval
	movl	%eax, %esi
	.cv_loc	0 1 6 0                 # t.c:6:0
	calll	_getval
	movl	%eax, %edi
	movl	%esp, %eax
	.cv_loc	0 1 7 0                 # t.c:7:0
	movl	$1071309127, 4(%esp)    # imm = 0x3FDAE147
	movl	$-1374389535, (%esp)    # imm = 0xAE147AE1
	.cv_loc	0 1 8 0                 # t.c:8:0
	pushl	%eax
	pushl	%edi
	pushl	%esi
	calll	_usevals
	addl	$12, %esp
	.cv_loc	0 1 9 0                 # t.c:9:0
	addl	%esi, %edi
	movl	%edi, %eax
	leal	-8(%ebp), %esp
	popl	%esi
	popl	%edi
	popl	%ebp
	retl
Ltmp1:
	.cv_fpo_endproc
Lfunc_end0:
                                        # -- End function
	.section	.debug$S,"dr"
	.p2align	2
	.long	4                       # Debug section magic
	.long	241
	.long	Ltmp3-Ltmp2             # Subsection size
Ltmp2:
	.short	Ltmp5-Ltmp4             # Record length
Ltmp4:
	.short	4412                    # Record kind: S_COMPILE3
	.long	0                       # Flags and language
	.short	7                       # CPUType
	.short	8                       # Frontend version
	.short	0
	.short	0
	.short	0
	.short	8000                    # Backend version
	.short	0
	.short	0
	.short	0
	.asciz	"clang version 8.0.0 "  # Null-terminated compiler version string
Ltmp5:
Ltmp3:
	.p2align 2
	.cv_fpo_data	_realign_with_csrs
	.long	241                     # Symbol subsection for realign_with_csrs
	.long	Ltmp7-Ltmp6             # Subsection size
Ltmp6:
	.short	Ltmp9-Ltmp8             # Record length
Ltmp8:
	.short	4423                    # Record kind: S_GPROC32_ID
	.long	0                       # PtrParent
	.long	0                       # PtrEnd
	.long	0                       # PtrNext
	.long	Lfunc_end0-_realign_with_csrs # Code size
	.long	0                       # Offset after prologue
	.long	0                       # Offset before epilogue
	.long	0                    # Function type index
	.secrel32	_realign_with_csrs # Function section relative address
	.secidx	_realign_with_csrs      # Function section index
	.byte	0                       # Flags
	.asciz	"realign_with_csrs"     # Function name
Ltmp9:
	.short	Ltmp11-Ltmp10           # Record length
Ltmp10:
	.short	4114                    # Record kind: S_FRAMEPROC
	.long	12                      # FrameSize
	.long	0                       # Padding
	.long	0                       # Offset of padding
	.long	8                       # Bytes of callee saved registers
	.long	0                       # Exception handler offset
	.short	0                       # Exception handler section
	.long	1196032                 # Flags (defines frame register)
Ltmp11:
	.short	2                       # Record length
	.short	4431                    # Record kind: S_PROC_ID_END
Ltmp7:
	.p2align	2
	.cv_filechecksums               # File index to string table offset subsection
	.cv_stringtable                 # String table
