MIR Serialization: Serialize the block address machine operands.
[oota-llvm.git] / test / CodeGen / MIR / X86 / block-address-operands.mir
1 # RUN: llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s | FileCheck %s
2 # This test ensures that the MIR parser parses the block address operands
3 # correctly.
4
5 --- |
6
7   @addr = global i8* null
8
9   define void @test() {
10   entry:
11     store volatile i8* blockaddress(@test, %block), i8** @addr
12     %val = load volatile i8*, i8** @addr
13     indirectbr i8* %val, [label %block]
14
15   block:
16     ret void
17   }
18
19   define void @test2() {
20   entry:
21     store volatile i8* blockaddress(@test2, %"quoted block"), i8** @addr
22     %val = load volatile i8*, i8** @addr
23     indirectbr i8* %val, [label %"quoted block"]
24
25   "quoted block":
26     ret void
27   }
28
29   define void @test3() {
30   entry:
31     store volatile i8* blockaddress(@test3, %0), i8** @addr
32     %val = load volatile i8*, i8** @addr
33     indirectbr i8* %val, [label %0]
34
35     ret void
36   }
37
38 ...
39 ---
40 name:            test
41 body:
42   - id:              0
43     name:            entry
44     successors:      [ '%bb.1.block' ]
45     instructions:
46     # CHECK: %rax = LEA64r %rip, 1, _, blockaddress(@test, %ir-block.block), _
47       - '%rax = LEA64r %rip, 1, _, blockaddress(@test, %ir-block.block), _'
48       - 'MOV64mr %rip, 1, _, @addr, _, killed %rax'
49       - 'JMP64m %rip, 1, _, @addr, _'
50   - id:              1
51     name:            block
52     addressTaken:    true
53     instructions:
54       - RETQ
55 ...
56 ---
57 name:            test2
58 tracksRegLiveness: true
59 body:
60   - id:              0
61     name:            entry
62     successors:      [ '%bb.1' ]
63     instructions:
64     # CHECK: %rax = LEA64r %rip, 1, _, blockaddress(@test2, %ir-block."quoted block"), _
65       - '%rax = LEA64r %rip, 1, _, blockaddress(@test2, %ir-block."quoted block"), _'
66       - 'MOV64mr %rip, 1, _, @addr, _, killed %rax'
67       - 'JMP64m %rip, 1, _, @addr, _'
68   - id:              1
69     addressTaken:    true
70     instructions:
71       - RETQ
72 ...
73 ---
74 name:            test3
75 tracksRegLiveness: true
76 body:
77   - id:              0
78     name:            entry
79     successors:      [ '%bb.1' ]
80     instructions:
81     # CHECK: %rax = LEA64r %rip, 1, _, blockaddress(@test3, %ir-block.0), _
82       - '%rax = LEA64r %rip, 1, _, blockaddress(@test3, %ir-block.0), _'
83       - 'MOV64mr %rip, 1, _, @addr, _, killed %rax'
84       - 'JMP64m %rip, 1, _, @addr, _'
85   - id:              1
86     addressTaken:    true
87     instructions:
88       - RETQ
89 ...