@@ -40,179 +40,173 @@ AArch64LegalizerInfo::AArch64LegalizerInfo() {
40
40
// These operations naturally get the right answer when used on
41
41
// GPR32, even if the actual type is narrower.
42
42
for (auto Ty : {s32, s64, v2s32, v4s32, v2s64})
43
- setAction (InstrAspect {BinOp, Ty}, Legal);
43
+ setAction ({BinOp, Ty}, Legal);
44
44
45
45
for (auto Ty : {s1, s8, s16})
46
- setAction (InstrAspect {BinOp, Ty}, WidenScalar);
46
+ setAction ({BinOp, Ty}, WidenScalar);
47
47
}
48
48
49
- setAction (InstrAspect {G_GEP, p0}, Legal);
50
- setAction (InstrAspect {G_GEP, 1 , s64}, Legal);
49
+ setAction ({G_GEP, p0}, Legal);
50
+ setAction ({G_GEP, 1 , s64}, Legal);
51
51
52
52
for (auto Ty : {s1, s8, s16, s32})
53
- setAction (InstrAspect {G_GEP, 1 , Ty}, WidenScalar);
53
+ setAction ({G_GEP, 1 , Ty}, WidenScalar);
54
54
55
55
for (auto BinOp : {G_LSHR, G_ASHR, G_SDIV, G_UDIV}) {
56
56
for (auto Ty : {s32, s64})
57
- setAction (InstrAspect {BinOp, Ty}, Legal);
57
+ setAction ({BinOp, Ty}, Legal);
58
58
59
59
for (auto Ty : {s1, s8, s16})
60
- setAction (InstrAspect {BinOp, Ty}, WidenScalar);
60
+ setAction ({BinOp, Ty}, WidenScalar);
61
61
}
62
62
63
63
for (auto BinOp : { G_SREM, G_UREM })
64
64
for (auto Ty : { s1, s8, s16, s32, s64 })
65
- setAction (InstrAspect {BinOp, Ty}, Lower);
65
+ setAction ({BinOp, Ty}, Lower);
66
66
67
67
for (auto Op : { G_UADDE, G_USUBE, G_SADDO, G_SSUBO, G_SMULO, G_UMULO }) {
68
68
for (auto Ty : { s32, s64 })
69
- setAction (InstrAspect {Op, Ty}, Legal);
69
+ setAction ({Op, Ty}, Legal);
70
70
71
- setAction (InstrAspect {Op, 1 , s1}, Legal);
71
+ setAction ({Op, 1 , s1}, Legal);
72
72
}
73
73
74
74
for (auto BinOp : {G_FADD, G_FSUB, G_FMUL, G_FDIV})
75
75
for (auto Ty : {s32, s64})
76
- setAction (InstrAspect {BinOp, Ty}, Legal);
76
+ setAction ({BinOp, Ty}, Legal);
77
77
78
- setAction (InstrAspect {G_FREM, s32}, Libcall);
79
- setAction (InstrAspect {G_FREM, s64}, Libcall);
78
+ setAction ({G_FREM, s32}, Libcall);
79
+ setAction ({G_FREM, s64}, Libcall);
80
80
81
81
for (auto MemOp : {G_LOAD, G_STORE}) {
82
82
for (auto Ty : {s8, s16, s32, s64, p0, v2s32})
83
- setAction (InstrAspect {MemOp, Ty}, Legal);
83
+ setAction ({MemOp, Ty}, Legal);
84
84
85
- setAction (InstrAspect {MemOp, s1}, WidenScalar);
85
+ setAction ({MemOp, s1}, WidenScalar);
86
86
87
87
// And everything's fine in addrspace 0.
88
- setAction (InstrAspect {MemOp, 1 , p0}, Legal);
88
+ setAction ({MemOp, 1 , p0}, Legal);
89
89
}
90
90
91
91
// Constants
92
92
for (auto Ty : {s32, s64}) {
93
- setAction (InstrAspect {TargetOpcode::G_CONSTANT, Ty}, Legal);
94
- setAction (InstrAspect {TargetOpcode::G_FCONSTANT, Ty}, Legal);
93
+ setAction ({TargetOpcode::G_CONSTANT, Ty}, Legal);
94
+ setAction ({TargetOpcode::G_FCONSTANT, Ty}, Legal);
95
95
}
96
96
97
- setAction (InstrAspect {G_CONSTANT, p0}, Legal);
97
+ setAction ({G_CONSTANT, p0}, Legal);
98
98
99
99
for (auto Ty : {s1, s8, s16})
100
- setAction (InstrAspect {TargetOpcode::G_CONSTANT, Ty}, WidenScalar);
100
+ setAction ({TargetOpcode::G_CONSTANT, Ty}, WidenScalar);
101
101
102
- setAction (InstrAspect {TargetOpcode::G_FCONSTANT, s16}, WidenScalar);
102
+ setAction ({TargetOpcode::G_FCONSTANT, s16}, WidenScalar);
103
103
104
- setAction (InstrAspect {G_ICMP, s1}, Legal);
105
- setAction (InstrAspect {G_ICMP, 1 , s32}, Legal);
106
- setAction (InstrAspect {G_ICMP, 1 , s64}, Legal);
107
- setAction (InstrAspect {G_ICMP, 1 , p0}, Legal);
104
+ setAction ({G_ICMP, s1}, Legal);
105
+ setAction ({G_ICMP, 1 , s32}, Legal);
106
+ setAction ({G_ICMP, 1 , s64}, Legal);
107
+ setAction ({G_ICMP, 1 , p0}, Legal);
108
108
109
109
for (auto Ty : {s1, s8, s16}) {
110
- setAction (InstrAspect {G_ICMP, 1 , Ty}, WidenScalar);
110
+ setAction ({G_ICMP, 1 , Ty}, WidenScalar);
111
111
}
112
112
113
- setAction (InstrAspect {G_FCMP, s1}, Legal);
114
- setAction (InstrAspect {G_FCMP, 1 , s32}, Legal);
115
- setAction (InstrAspect {G_FCMP, 1 , s64}, Legal);
113
+ setAction ({G_FCMP, s1}, Legal);
114
+ setAction ({G_FCMP, 1 , s32}, Legal);
115
+ setAction ({G_FCMP, 1 , s64}, Legal);
116
116
117
117
// Extensions
118
118
for (auto Ty : { s1, s8, s16, s32, s64 }) {
119
- setAction (InstrAspect {G_ZEXT, Ty}, Legal);
120
- setAction (InstrAspect {G_SEXT, Ty}, Legal);
121
- setAction (InstrAspect {G_ANYEXT, Ty}, Legal);
119
+ setAction ({G_ZEXT, Ty}, Legal);
120
+ setAction ({G_SEXT, Ty}, Legal);
121
+ setAction ({G_ANYEXT, Ty}, Legal);
122
122
}
123
123
124
124
for (auto Ty : { s1, s8, s16, s32 }) {
125
- setAction (InstrAspect {G_ZEXT, 1 , Ty}, Legal);
126
- setAction (InstrAspect {G_SEXT, 1 , Ty}, Legal);
127
- setAction (InstrAspect {G_ANYEXT, 1 , Ty}, Legal);
125
+ setAction ({G_ZEXT, 1 , Ty}, Legal);
126
+ setAction ({G_SEXT, 1 , Ty}, Legal);
127
+ setAction ({G_ANYEXT, 1 , Ty}, Legal);
128
128
}
129
129
130
- setAction (InstrAspect {G_FPEXT, s64}, Legal);
131
- setAction (InstrAspect {G_FPEXT, 1 , s32}, Legal);
130
+ setAction ({G_FPEXT, s64}, Legal);
131
+ setAction ({G_FPEXT, 1 , s32}, Legal);
132
132
133
133
// Truncations
134
134
for (auto Ty : { s16, s32 })
135
- setAction (InstrAspect {G_FPTRUNC, Ty}, Legal);
135
+ setAction ({G_FPTRUNC, Ty}, Legal);
136
136
137
137
for (auto Ty : { s32, s64 })
138
- setAction (InstrAspect {G_FPTRUNC, 1 , Ty}, Legal);
138
+ setAction ({G_FPTRUNC, 1 , Ty}, Legal);
139
139
140
140
for (auto Ty : { s1, s8, s16, s32 })
141
- setAction (InstrAspect {G_TRUNC, Ty}, Legal);
141
+ setAction ({G_TRUNC, Ty}, Legal);
142
142
143
143
for (auto Ty : { s8, s16, s32, s64 })
144
- setAction (InstrAspect {G_TRUNC, 1 , Ty}, Legal);
144
+ setAction ({G_TRUNC, 1 , Ty}, Legal);
145
145
146
146
// Conversions
147
147
for (auto Ty : { s32, s64 }) {
148
- setAction (InstrAspect {G_FPTOSI, 0 , Ty}, Legal);
149
- setAction (InstrAspect {G_FPTOUI, 0 , Ty}, Legal);
150
- setAction (InstrAspect {G_SITOFP, 1 , Ty}, Legal);
151
- setAction (InstrAspect {G_UITOFP, 1 , Ty}, Legal);
148
+ setAction ({G_FPTOSI, 0 , Ty}, Legal);
149
+ setAction ({G_FPTOUI, 0 , Ty}, Legal);
150
+ setAction ({G_SITOFP, 1 , Ty}, Legal);
151
+ setAction ({G_UITOFP, 1 , Ty}, Legal);
152
152
}
153
153
for (auto Ty : { s1, s8, s16 }) {
154
- setAction (InstrAspect {G_FPTOSI, 0 , Ty}, WidenScalar);
155
- setAction (InstrAspect {G_FPTOUI, 0 , Ty}, WidenScalar);
156
- setAction (InstrAspect {G_SITOFP, 1 , Ty}, WidenScalar);
157
- setAction (InstrAspect {G_UITOFP, 1 , Ty}, WidenScalar);
154
+ setAction ({G_FPTOSI, 0 , Ty}, WidenScalar);
155
+ setAction ({G_FPTOUI, 0 , Ty}, WidenScalar);
156
+ setAction ({G_SITOFP, 1 , Ty}, WidenScalar);
157
+ setAction ({G_UITOFP, 1 , Ty}, WidenScalar);
158
158
}
159
159
160
160
for (auto Ty : { s32, s64 }) {
161
- setAction (InstrAspect {G_FPTOSI, 1 , Ty}, Legal);
162
- setAction (InstrAspect {G_FPTOUI, 1 , Ty}, Legal);
163
- setAction (InstrAspect {G_SITOFP, 0 , Ty}, Legal);
164
- setAction (InstrAspect {G_UITOFP, 0 , Ty}, Legal);
161
+ setAction ({G_FPTOSI, 1 , Ty}, Legal);
162
+ setAction ({G_FPTOUI, 1 , Ty}, Legal);
163
+ setAction ({G_SITOFP, 0 , Ty}, Legal);
164
+ setAction ({G_UITOFP, 0 , Ty}, Legal);
165
165
}
166
166
167
167
// Control-flow
168
168
for (auto Ty : {s1, s8, s16, s32})
169
- setAction (InstrAspect {G_BRCOND, Ty}, Legal);
169
+ setAction ({G_BRCOND, Ty}, Legal);
170
170
171
171
// Select
172
172
for (auto Ty : {s1, s8, s16, s32, s64, p0})
173
- setAction (InstrAspect {G_SELECT, Ty}, Legal);
173
+ setAction ({G_SELECT, Ty}, Legal);
174
174
175
- setAction (InstrAspect {G_SELECT, 1 , s1}, Legal);
175
+ setAction ({G_SELECT, 1 , s1}, Legal);
176
176
177
177
// Pointer-handling
178
- setAction (InstrAspect {G_FRAME_INDEX, p0}, Legal);
179
- setAction (InstrAspect {G_GLOBAL_VALUE, p0}, Legal);
178
+ setAction ({G_FRAME_INDEX, p0}, Legal);
179
+ setAction ({G_GLOBAL_VALUE, p0}, Legal);
180
180
181
181
for (auto Ty : {s1, s8, s16, s32, s64})
182
- setAction (InstrAspect {G_PTRTOINT, 0 , Ty}, Legal);
182
+ setAction ({G_PTRTOINT, 0 , Ty}, Legal);
183
183
184
- setAction (InstrAspect {G_PTRTOINT, 1 , p0}, Legal);
184
+ setAction ({G_PTRTOINT, 1 , p0}, Legal);
185
185
186
- setAction (InstrAspect {G_INTTOPTR, 0 , p0}, Legal);
187
- setAction (InstrAspect {G_INTTOPTR, 1 , s64}, Legal);
186
+ setAction ({G_INTTOPTR, 0 , p0}, Legal);
187
+ setAction ({G_INTTOPTR, 1 , s64}, Legal);
188
188
189
189
// Casts for 32 and 64-bit width type are just copies.
190
190
for (auto Ty : {s1, s8, s16, s32, s64}) {
191
- setAction (InstrAspect {G_BITCAST, 0 , Ty}, Legal);
192
- setAction (InstrAspect {G_BITCAST, 1 , Ty}, Legal);
191
+ setAction ({G_BITCAST, 0 , Ty}, Legal);
192
+ setAction ({G_BITCAST, 1 , Ty}, Legal);
193
193
}
194
194
195
195
// For the sake of copying bits around, the type does not really
196
196
// matter as long as it fits a register.
197
197
for (int EltSize = 8 ; EltSize <= 64 ; EltSize *= 2 ) {
198
- setAction (InstrAspect{G_BITCAST, 0 , LLT::vector (128 / EltSize, EltSize)},
199
- Legal);
200
- setAction (InstrAspect{G_BITCAST, 1 , LLT::vector (128 / EltSize, EltSize)},
201
- Legal);
198
+ setAction ({G_BITCAST, 0 , LLT::vector (128 /EltSize, EltSize)}, Legal);
199
+ setAction ({G_BITCAST, 1 , LLT::vector (128 /EltSize, EltSize)}, Legal);
202
200
if (EltSize >= 64 )
203
201
continue ;
204
202
205
- setAction (InstrAspect{G_BITCAST, 0 , LLT::vector (64 / EltSize, EltSize)},
206
- Legal);
207
- setAction (InstrAspect{G_BITCAST, 1 , LLT::vector (64 / EltSize, EltSize)},
208
- Legal);
203
+ setAction ({G_BITCAST, 0 , LLT::vector (64 /EltSize, EltSize)}, Legal);
204
+ setAction ({G_BITCAST, 1 , LLT::vector (64 /EltSize, EltSize)}, Legal);
209
205
if (EltSize >= 32 )
210
206
continue ;
211
207
212
- setAction (InstrAspect{G_BITCAST, 0 , LLT::vector (32 / EltSize, EltSize)},
213
- Legal);
214
- setAction (InstrAspect{G_BITCAST, 1 , LLT::vector (32 / EltSize, EltSize)},
215
- Legal);
208
+ setAction ({G_BITCAST, 0 , LLT::vector (32 /EltSize, EltSize)}, Legal);
209
+ setAction ({G_BITCAST, 1 , LLT::vector (32 /EltSize, EltSize)}, Legal);
216
210
}
217
211
218
212
computeTables ();
0 commit comments