summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/MIR
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2015-07-24 22:22:50 +0000
committerAlex Lorenz <arphaman@gmail.com>2015-07-24 22:22:50 +0000
commit1bb48de1f945c8814999e255834d9b3964325471 (patch)
tree1d4fc528e5fbff8bbef3fc247952ff622bb8e7d0 /llvm/test/CodeGen/MIR
parentdc8a83b53b6b930177fc5821b733e255d6e42023 (diff)
downloadbcm5719-llvm-1bb48de1f945c8814999e255834d9b3964325471.tar.gz
bcm5719-llvm-1bb48de1f945c8814999e255834d9b3964325471.zip
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
Diffstat (limited to 'llvm/test/CodeGen/MIR')
-rw-r--r--llvm/test/CodeGen/MIR/X86/callee-saved-info.mir98
-rw-r--r--llvm/test/CodeGen/MIR/X86/expected-named-register-in-callee-saved-register.mir91
2 files changed, 189 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/MIR/X86/callee-saved-info.mir b/llvm/test/CodeGen/MIR/X86/callee-saved-info.mir
new file mode 100644
index 00000000000..4ec5b50c364
--- /dev/null
+++ b/llvm/test/CodeGen/MIR/X86/callee-saved-info.mir
@@ -0,0 +1,98 @@
+# 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'
+...
diff --git a/llvm/test/CodeGen/MIR/X86/expected-named-register-in-callee-saved-register.mir b/llvm/test/CodeGen/MIR/X86/expected-named-register-in-callee-saved-register.mir
new file mode 100644
index 00000000000..bd9e70420b5
--- /dev/null
+++ b/llvm/test/CodeGen/MIR/X86/expected-named-register-in-callee-saved-register.mir
@@ -0,0 +1,91 @@
+# RUN: not llc -march=x86-64 -start-after prologepilog -stop-after prologepilog -o /dev/null %s 2>&1 | FileCheck %s
+
+--- |
+
+ 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
+fixedStack:
+ # CHECK: [[@LINE+1]]:93: expected a named register
+ - { id: 0, type: spill-slot, offset: -16, size: 8, alignment: 16, callee-saved-register: '%0' }
+stack:
+ - { id: 0, name: b, offset: -20, size: 4, alignment: 4 }
+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'
+...
OpenPOWER on IntegriCloud