12
12
.type simple , @function
13
13
simple:
14
14
paciasp
15
+ stp x29 , x30 , [ sp , # - 0x10 ] !
15
16
b 1f
16
17
1 :
18
+ autiza x0
19
+ blr x0
20
+ ldp x29 , x30 , [ sp ], # 0x10
17
21
autiasp
18
22
ret
19
23
.size simple , . - simple
@@ -25,29 +29,41 @@ simple:
25
29
// ...
26
30
// CHECK: BB Layout : [[ BB0: [ 0 - 9a - zA - Z. ]+]], [[ BB1: [ 0 - 9a - zA - Z. ]+]]
27
31
// CHECK - NEXT: }
28
- // CHECK - NEXT: [[ BB0 ]] ( 2 instructions , align : 1 )
32
+ // CHECK - NEXT: [[ BB0 ]] ( 3 instructions , align : 1 )
29
33
// CHECK - NEXT: Entry Point
30
34
// CHECK - NEXT: 00000000 : paciasp
31
- // CHECK - NEXT: 00000004 : b [[ BB1 ]]
35
+ // CHECK - NEXT: 00000004 : stp x29 , x30 , [ sp , # - 0x10 ] !
36
+ // CHECK - NEXT: 00000008 : b [[ BB1 ]]
32
37
// CHECK - NEXT: Successors: [[ BB1 ]]
33
38
// CHECK - EMPTY:
34
- // CHECK - NEXT: [[ BB1 ]] ( 2 instructions , align : 1 )
39
+ // CHECK - NEXT: [[ BB1 ]] ( 5 instructions , align : 1 )
35
40
// CHECK - NEXT: Predecessors: [[ BB0 ]]
36
- // CHECK - NEXT: 00000008 : autiasp
37
- // CHECK - NEXT: 0000000c: ret
41
+ // CHECK - NEXT: 0000000c: autiza x0
42
+ // CHECK - NEXT: 00000010 : blr x0
43
+ // CHECK - NEXT: 00000014 : ldp x29 , x30 , [ sp ], # 0x10
44
+ // CHECK - NEXT: 00000018 : autiasp
45
+ // CHECK - NEXT: 0000001c: ret
38
46
// CHECK - EMPTY:
39
47
// CHECK - NEXT: DWARF CFI Instructions:
40
48
// CHECK - NEXT: <empty>
41
49
// CHECK - NEXT: End of Function "simple"
42
50
// CHECK - EMPTY:
43
51
// CHECK - NEXT: PacRetAnalysis::ComputeNext( hint # 25 , pacret - state<SafeToDerefRegs: LR W30 W30_HI , Insts: >)
44
52
// CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: , Insts: >)
53
+ // CHECK - NEXT: PacRetAnalysis::ComputeNext( stp x29 , x30 , [ sp , # - 0x10 ] ! , pacret - state<SafeToDerefRegs: , Insts: >)
54
+ // CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: , Insts: >)
45
55
// CHECK - NEXT: PacRetAnalysis::ComputeNext( b [[ BB1 ]], pacret - state<SafeToDerefRegs: , Insts: >)
46
56
// CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: , Insts: >)
47
57
// CHECK - NEXT: PacRetAnalysis::Confluence(
48
58
// CHECK - NEXT: State 1 : pacret - state<SafeToDerefRegs: (all) , Insts: >
49
59
// CHECK - NEXT: State 2 : pacret - state<SafeToDerefRegs: , Insts: >)
50
60
// CHECK - NEXT: merged state: pacret - state<SafeToDerefRegs: , Insts: >
61
+ // CHECK - NEXT: PacRetAnalysis::ComputeNext( autiza x0 , pacret - state<SafeToDerefRegs: , Insts: >)
62
+ // CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: W0 X0 W0_HI , Insts: >)
63
+ // CHECK - NEXT: PacRetAnalysis::ComputeNext( blr x0 , pacret - state<SafeToDerefRegs: W0 X0 W0_HI , Insts: >)
64
+ // CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: , Insts: >)
65
+ // CHECK - NEXT: PacRetAnalysis::ComputeNext( ldp x29 , x30 , [ sp ], # 0x10 , pacret - state<SafeToDerefRegs: , Insts: >)
66
+ // CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: , Insts: >)
51
67
// CHECK - NEXT: PacRetAnalysis::ComputeNext( hint # 29 , pacret - state<SafeToDerefRegs: , Insts: >)
52
68
// CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: LR W30 W30_HI , Insts: >)
53
69
// CHECK - NEXT: PacRetAnalysis::ComputeNext( ret x30 , pacret - state<SafeToDerefRegs: LR W30 W30_HI , Insts: >)
@@ -56,6 +72,12 @@ simple:
56
72
// CHECK - NEXT: State 1 : pacret - state<SafeToDerefRegs: , Insts: >
57
73
// CHECK - NEXT: State 2 : pacret - state<SafeToDerefRegs: , Insts: >)
58
74
// CHECK - NEXT: merged state: pacret - state<SafeToDerefRegs: , Insts: >
75
+ // CHECK - NEXT: PacRetAnalysis::ComputeNext( autiza x0 , pacret - state<SafeToDerefRegs: , Insts: >)
76
+ // CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: W0 X0 W0_HI , Insts: >)
77
+ // CHECK - NEXT: PacRetAnalysis::ComputeNext( blr x0 , pacret - state<SafeToDerefRegs: W0 X0 W0_HI , Insts: >)
78
+ // CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: , Insts: >)
79
+ // CHECK - NEXT: PacRetAnalysis::ComputeNext( ldp x29 , x30 , [ sp ], # 0x10 , pacret - state<SafeToDerefRegs: , Insts: >)
80
+ // CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: , Insts: >)
59
81
// CHECK - NEXT: PacRetAnalysis::ComputeNext( hint # 29 , pacret - state<SafeToDerefRegs: , Insts: >)
60
82
// CHECK - NEXT: .. result: (pacret - state<SafeToDerefRegs: LR W30 W30_HI , Insts: >)
61
83
// CHECK - NEXT: PacRetAnalysis::ComputeNext( ret x30 , pacret - state<SafeToDerefRegs: LR W30 W30_HI , Insts: >)
@@ -67,21 +89,28 @@ simple:
67
89
// ...
68
90
// CHECK: BB Layout : [[ BB0 ]], [[ BB1 ]]
69
91
// CHECK - NEXT: }
70
- // CHECK - NEXT: [[ BB0 ]] ( 2 instructions , align : 1 )
92
+ // CHECK - NEXT: [[ BB0 ]] ( 3 instructions , align : 1 )
71
93
// CHECK - NEXT: Entry Point
72
94
// CHECK - NEXT: 00000000 : paciasp # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
73
- // CHECK - NEXT: 00000004 : b [[ BB1 ]] # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
95
+ // CHECK - NEXT: 00000004 : stp x29 , x30 , [ sp , # - 0x10 ] ! # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
96
+ // CHECK - NEXT: 00000008 : b [[ BB1 ]] # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
74
97
// CHECK - NEXT: Successors: [[ BB1 ]]
75
98
// CHECK - EMPTY:
76
- // CHECK - NEXT: [[ BB1 ]] ( 2 instructions , align : 1 )
99
+ // CHECK - NEXT: [[ BB1 ]] ( 5 instructions , align : 1 )
77
100
// CHECK - NEXT: Predecessors: [[ BB0 ]]
78
- // CHECK - NEXT: 00000008 : autiasp # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
79
- // CHECK - NEXT: 0000000c: ret # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
101
+ // CHECK - NEXT: 0000000c: autiza x0 # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
102
+ // CHECK - NEXT: 00000010 : blr x0 # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
103
+ // CHECK - NEXT: 00000014 : ldp x29 , x30 , [ sp ], # 0x10 # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
104
+ // CHECK - NEXT: 00000018 : autiasp # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
105
+ // CHECK - NEXT: 0000001c: ret # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
80
106
// CHECK - EMPTY:
81
107
// CHECK - NEXT: DWARF CFI Instructions:
82
108
// CHECK - NEXT: <empty>
83
109
// CHECK - NEXT: End of Function "simple"
84
110
// CHECK - EMPTY:
111
+ // CHECK - NEXT: Found call inst: 00000000 : blr x0 # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
112
+ // CHECK - NEXT: Call destination reg: X0
113
+ // CHECK - NEXT: SafeToDerefRegs: W0 X0 W0_HI{{ [ \t ]* $}}
85
114
// CHECK - NEXT: Found RET inst: 00000000 : ret # PacRetAnalysis: pacret - state<SafeToDerefRegs: BitVector , Insts: >
86
115
// CHECK - NEXT: RetReg: LR
87
116
// CHECK - NEXT: Authenticated reg: (none)
0 commit comments