1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -run-pass=aarch64-expand-pseudo -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s
---
name: add_x
alignment: 4
tracksRegLiveness: true
liveins:
- { reg: '$p0' }
- { reg: '$z0' }
frameInfo:
maxCallFrameSize: 0
body: |
bb.0:
liveins: $p0, $z0
; CHECK: name: add_x
; CHECK-NOT: MOVPRFX
; CHECK: $z0 = FADD_ZPmZ_S renamable $p0, killed $z0, renamable $z0
; CHECK-NEXT: RET
renamable $z0 = FADD_ZPZZ_S_UNDEF renamable $p0, renamable $z0, killed renamable $z0
RET_ReallyLR
...
---
name: expand_mls_to_msb
body: |
bb.0:
; CHECK: name: expand_mls_to_msb
; CHECK: {{.*}} MSB_ZPmZZ_B {{.*}}
renamable $p0 = PTRUE_B 31, implicit $vg
renamable $z0 = MLS_ZPZZZ_B_UNDEF killed renamable $p0, killed renamable $z2, killed renamable $z0, killed renamable $z1
RET_ReallyLR implicit $z0
...
---
name: expand_mla_to_mad
body: |
bb.0:
; CHECK: name: expand_mla_to_mad
; CHECK: {{.*}} MAD_ZPmZZ_B {{.*}}
renamable $p0 = PTRUE_B 31, implicit $vg
renamable $z0 = MLA_ZPZZZ_B_UNDEF killed renamable $p0, killed renamable $z2, killed renamable $z0, killed renamable $z1
RET_ReallyLR implicit $z0
...
---
name: expand_transfer_implicit_defs
body: |
bb.0:
; CHECK: name: expand_transfer_implicit_defs
; CHECK: BUNDLE
; CHECK-SAME: implicit-def $z0_z1_z2_z3
liveins: $z1, $z2, $p0
renamable $z0 = FADD_ZPZZ_D_UNDEF killed $p0, killed $z1, killed $z2, implicit-def $z0_z1_z2_z3
RET_ReallyLR implicit $z0_z1_z2_z3
...
---
name: unary_undef_operand
body: |
bb.0:
liveins: $p0, $z0
; CHECK: name: unary_undef_operand
; CHECK: $z0 = MOVPRFX_ZZ undef $z1
; CHECK: $z0 = ABS_ZPmZ_S internal killed $z0, renamable $p0, killed undef renamable $z1
; NOTE: Unary _UNDEF psuedo instructions ignore the passthru operand.
renamable $z0 = ABS_ZPmZ_S_UNDEF renamable $z0, renamable $p0, killed undef renamable $z1
RET_ReallyLR
...
---
name: binop_undef_operand
body: |
bb.0:
liveins: $p0, $z1
; CHECK: name: binop_undef_operand
; CHECK-NOT: MOVPRFX
; CHECK: $z0 = SMIN_ZPmZ_S renamable $p0, killed undef $z0, killed renamable $z1
renamable $z0 = SMIN_ZPZZ_S_UNDEF renamable $p0, undef renamable $z0, killed renamable $z1
RET_ReallyLR
...
---
name: binop_undef_operand_requires_movpfrx
body: |
bb.0:
liveins: $p0, $z1
; CHECK: name: binop_undef_operand_requires_movpfrx
; CHECK: $z0 = MOVPRFX_ZZ undef $z2
; CHECK: $z0 = SMIN_ZPmZ_S renamable $p0, internal killed $z0, killed renamable $z1
renamable $z0 = SMIN_ZPZZ_S_UNDEF renamable $p0, undef renamable $z2, killed renamable $z1
RET_ReallyLR
...
---
name: binop_undef_operand_requires_zeroing_movpfrx
body: |
bb.0:
liveins: $p0, $z1
; CHECK: name: binop_undef_operand_requires_zeroing_movpfrx
; CHECK: $z0 = MOVPRFX_ZPzZ_S $p0, undef $z2
; CHECK: $z0 = ADD_ZPmZ_S renamable $p0, internal killed $z0, killed renamable $z1
renamable $z0 = ADD_ZPZZ_S_ZERO renamable $p0, undef renamable $z2, killed renamable $z1
RET_ReallyLR
...
---
name: ternaryop_undef_operand
body: |
bb.0:
liveins: $p0, $z1, $z2
; CHECK: name: ternaryop_undef_operand
; CHECK-NOT: MOVPRFX
; CHECK: $z0 = MLA_ZPmZZ_B killed renamable $p0, killed undef $z0, killed renamable $z1, killed renamable $z2
renamable $z0 = MLA_ZPZZZ_B_UNDEF killed renamable $p0, killed undef renamable $z0, killed renamable $z1, killed renamable $z2
RET_ReallyLR implicit $z0
...
---
name: ternaryop_undef_operand_requires_movprfx
body: |
bb.0:
liveins: $p0, $z1, $z2
; CHECK: name: ternaryop_undef_operand_requires_movprfx
; CHECK: $z0 = MOVPRFX_ZZ undef $z3
; CHECK: $z0 = MLA_ZPmZZ_B killed renamable $p0, internal killed $z0, killed renamable $z1, killed renamable $z2
renamable $z0 = MLA_ZPZZZ_B_UNDEF killed renamable $p0, killed undef renamable $z3, killed renamable $z1, killed renamable $z2
RET_ReallyLR implicit $z0
...
|