1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 12:33:33 +02:00
llvm-mirror/test/CodeGen/MIR/X86/callee-saved-info.mir
Alex Lorenz 810bac62a2 MIR Serialization: Serialize MachineFrameInfo's callee saved information.
This commit serializes the callee saved information from the class
'MachineFrameInfo'. This commit extends the YAML mappings for the fixed and
the ordinary stack objects and adds an optional 'callee-saved-register'
attribute. This attribute is used to serialize the callee save information.

llvm-svn: 243173
2015-07-24 22:22:50 +00:00

99 lines
2.6 KiB
YAML

# RUN: llc -march=x86-64 -start-after prologepilog -stop-after prologepilog -o /dev/null %s | FileCheck %s
# This test ensures that the MIR parser parses callee saved information in the
# stack objects correctly.
--- |
define i32 @compute(i32 %a) {
body:
ret i32 %a
}
define i32 @func(i32 %a) {
entry:
%b = alloca i32
store i32 %a, i32* %b
br label %check
check:
%comp = icmp sle i32 %a, 10
br i1 %comp, label %loop, label %exit
loop:
%c = load i32, i32* %b
%d = call i32 @compute(i32 %c)
%e = sub i32 %d, 1
store i32 %e, i32* %b
br label %check
exit:
ret i32 0
}
...
---
name: compute
tracksRegLiveness: true
body:
- id: 0
name: body
liveins: [ '%edi' ]
instructions:
- '%eax = COPY killed %edi'
- 'RETQ killed %eax'
...
---
name: func
tracksRegLiveness: true
frameInfo:
stackSize: 24
maxAlignment: 4
adjustsStack: true
hasCalls: true
# CHECK: fixedStack:
# CHECK-NEXT: , callee-saved-register: '%rbx' }
fixedStack:
- { id: 0, type: spill-slot, offset: -16, size: 8, alignment: 16, callee-saved-register: '%rbx' }
# CHECK: stack:
# CHECK-NEXT: - { id: 0
# CHECK-NEXT: , callee-saved-register: '%edi' }
stack:
- { id: 0, name: b, offset: -20, size: 4, alignment: 4 }
- { id: 1, offset: -24, size: 4, alignment: 4, callee-saved-register: '%edi' }
body:
- id: 0
name: entry
successors: [ '%bb.1.check' ]
liveins: [ '%edi', '%rbx' ]
instructions:
- 'frame-setup PUSH64r killed %rbx, implicit-def %rsp, implicit %rsp'
- '%rsp = frame-setup SUB64ri8 %rsp, 16, implicit-def dead %eflags'
- '%ebx = COPY %edi'
- 'MOV32mr %rsp, 1, _, 12, _, %ebx'
- id: 1
name: check
successors: [ '%bb.2.loop', '%bb.3.exit' ]
liveins: [ '%ebx' ]
instructions:
- 'CMP32ri8 %ebx, 10, implicit-def %eflags'
- 'JG_1 %bb.3.exit, implicit killed %eflags'
- 'JMP_1 %bb.2.loop'
- id: 2
name: loop
successors: [ '%bb.1.check' ]
liveins: [ '%ebx' ]
instructions:
- '%edi = MOV32rm %rsp, 1, _, 12, _'
- 'CALL64pcrel32 @compute, csr_64, implicit %rsp, implicit %edi, implicit-def %rsp, implicit-def %eax'
- '%eax = DEC32r killed %eax, implicit-def dead %eflags'
- 'MOV32mr %rsp, 1, _, 12, _, killed %eax'
- 'JMP_1 %bb.1.check'
- id: 3
name: exit
instructions:
- '%eax = MOV32r0 implicit-def dead %eflags'
- '%rsp = ADD64ri8 %rsp, 16, implicit-def dead %eflags'
- '%rbx = POP64r implicit-def %rsp, implicit %rsp'
- 'RETQ %eax'
...