@@ -23,8 +23,8 @@ using namespace LegalityPredicates;
23
23
24
24
RISCVLegalizerInfo::RISCVLegalizerInfo (const RISCVSubtarget &ST) {
25
25
const unsigned XLen = ST.getXLen ();
26
- const LLT XLenLLT = LLT::scalar (XLen);
27
- const LLT DoubleXLenLLT = LLT::scalar (2 * XLen);
26
+ const LLT sXLen = LLT::scalar (XLen);
27
+ const LLT sDoubleXLen = LLT::scalar (2 * XLen);
28
28
const LLT p0 = LLT::pointer (0 , XLen);
29
29
const LLT s8 = LLT::scalar (8 );
30
30
const LLT s16 = LLT::scalar (16 );
@@ -34,38 +34,35 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST) {
34
34
using namespace TargetOpcode ;
35
35
36
36
getActionDefinitionsBuilder ({G_ADD, G_SUB, G_AND, G_OR, G_XOR})
37
- .legalFor ({s32, XLenLLT })
37
+ .legalFor ({s32, sXLen })
38
38
.widenScalarToNextPow2 (0 )
39
- .clampScalar (0 , s32, XLenLLT );
39
+ .clampScalar (0 , s32, sXLen );
40
40
41
41
getActionDefinitionsBuilder (
42
42
{G_UADDE, G_UADDO, G_USUBE, G_USUBO}).lower ();
43
43
44
- getActionDefinitionsBuilder ({G_SADDO, G_SSUBO}).minScalar (0 , XLenLLT ).lower ();
44
+ getActionDefinitionsBuilder ({G_SADDO, G_SSUBO}).minScalar (0 , sXLen ).lower ();
45
45
46
46
getActionDefinitionsBuilder ({G_ASHR, G_LSHR, G_SHL})
47
- .legalFor ({{s32, s32}, {XLenLLT, XLenLLT }})
47
+ .legalFor ({{s32, s32}, {sXLen , sXLen }})
48
48
.widenScalarToNextPow2 (0 )
49
- .clampScalar (1 , s32, XLenLLT )
50
- .clampScalar (0 , s32, XLenLLT )
49
+ .clampScalar (1 , s32, sXLen )
50
+ .clampScalar (0 , s32, sXLen )
51
51
.minScalarSameAs (1 , 0 );
52
52
53
53
if (ST.is64Bit ()) {
54
54
getActionDefinitionsBuilder ({G_ZEXT, G_SEXT, G_ANYEXT})
55
- .legalFor ({{XLenLLT , s32}})
56
- .maxScalar (0 , XLenLLT );
55
+ .legalFor ({{sXLen , s32}})
56
+ .maxScalar (0 , sXLen );
57
57
58
58
getActionDefinitionsBuilder (G_SEXT_INREG)
59
- .customFor ({XLenLLT })
60
- .maxScalar (0 , XLenLLT )
59
+ .customFor ({sXLen })
60
+ .maxScalar (0 , sXLen )
61
61
.lower ();
62
62
} else {
63
- getActionDefinitionsBuilder ({G_ZEXT, G_SEXT, G_ANYEXT})
64
- .maxScalar (0 , XLenLLT);
63
+ getActionDefinitionsBuilder ({G_ZEXT, G_SEXT, G_ANYEXT}).maxScalar (0 , sXLen );
65
64
66
- getActionDefinitionsBuilder (G_SEXT_INREG)
67
- .maxScalar (0 , XLenLLT)
68
- .lower ();
65
+ getActionDefinitionsBuilder (G_SEXT_INREG).maxScalar (0 , sXLen ).lower ();
69
66
}
70
67
71
68
// Merge/Unmerge
@@ -75,123 +72,112 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST) {
75
72
getActionDefinitionsBuilder (Op)
76
73
.widenScalarToNextPow2 (LitTyIdx, XLen)
77
74
.widenScalarToNextPow2 (BigTyIdx, XLen)
78
- .clampScalar (LitTyIdx, XLenLLT, XLenLLT )
79
- .clampScalar (BigTyIdx, XLenLLT, XLenLLT );
75
+ .clampScalar (LitTyIdx, sXLen , sXLen )
76
+ .clampScalar (BigTyIdx, sXLen , sXLen );
80
77
}
81
78
82
79
getActionDefinitionsBuilder ({G_CONSTANT, G_IMPLICIT_DEF})
83
- .legalFor ({s32, XLenLLT , p0})
80
+ .legalFor ({s32, sXLen , p0})
84
81
.widenScalarToNextPow2 (0 )
85
- .clampScalar (0 , s32, XLenLLT );
82
+ .clampScalar (0 , s32, sXLen );
86
83
87
84
getActionDefinitionsBuilder (G_ICMP)
88
- .legalFor ({{XLenLLT, XLenLLT }, {XLenLLT , p0}})
85
+ .legalFor ({{sXLen , sXLen }, {sXLen , p0}})
89
86
.widenScalarToNextPow2 (1 )
90
- .clampScalar (1 , XLenLLT, XLenLLT )
91
- .clampScalar (0 , XLenLLT, XLenLLT );
87
+ .clampScalar (1 , sXLen , sXLen )
88
+ .clampScalar (0 , sXLen , sXLen );
92
89
93
90
getActionDefinitionsBuilder (G_SELECT)
94
- .legalFor ({{XLenLLT, XLenLLT }, {p0, XLenLLT }})
91
+ .legalFor ({{sXLen , sXLen }, {p0, sXLen }})
95
92
.widenScalarToNextPow2 (0 )
96
- .clampScalar (0 , XLenLLT, XLenLLT )
97
- .clampScalar (1 , XLenLLT, XLenLLT );
93
+ .clampScalar (0 , sXLen , sXLen )
94
+ .clampScalar (1 , sXLen , sXLen );
98
95
99
96
getActionDefinitionsBuilder ({G_LOAD, G_STORE})
100
97
.legalForTypesWithMemDesc ({{s32, p0, s8, 8 },
101
98
{s32, p0, s16, 16 },
102
99
{s32, p0, s32, 32 },
103
- {XLenLLT , p0, s8, 8 },
104
- {XLenLLT , p0, s16, 16 },
105
- {XLenLLT , p0, s32, 32 },
106
- {XLenLLT , p0, XLenLLT , XLen},
107
- {p0, p0, XLenLLT , XLen}})
108
- .clampScalar (0 , s32, XLenLLT )
100
+ {sXLen , p0, s8, 8 },
101
+ {sXLen , p0, s16, 16 },
102
+ {sXLen , p0, s32, 32 },
103
+ {sXLen , p0, sXLen , XLen},
104
+ {p0, p0, sXLen , XLen}})
105
+ .clampScalar (0 , s32, sXLen )
109
106
.lower ();
110
107
111
- auto &ExtLoadActions =
112
- getActionDefinitionsBuilder ({G_SEXTLOAD, G_ZEXTLOAD})
113
- .legalForTypesWithMemDesc ({{s32, p0, s8, 8 },
114
- {s32, p0, s16, 16 },
115
- {XLenLLT, p0, s8, 8 },
116
- {XLenLLT, p0, s16, 16 }});
108
+ auto &ExtLoadActions = getActionDefinitionsBuilder ({G_SEXTLOAD, G_ZEXTLOAD})
109
+ .legalForTypesWithMemDesc ({{s32, p0, s8, 8 },
110
+ {s32, p0, s16, 16 },
111
+ {sXLen , p0, s8, 8 },
112
+ {sXLen , p0, s16, 16 }});
117
113
if (XLen == 64 )
118
- ExtLoadActions.legalForTypesWithMemDesc ({{XLenLLT, p0, s32, 32 }});
119
- ExtLoadActions
120
- .widenScalarToNextPow2 (0 )
121
- .clampScalar (0 , s32, XLenLLT)
122
- .lower ();
114
+ ExtLoadActions.legalForTypesWithMemDesc ({{sXLen , p0, s32, 32 }});
115
+ ExtLoadActions.widenScalarToNextPow2 (0 ).clampScalar (0 , s32, sXLen ).lower ();
123
116
124
- getActionDefinitionsBuilder (G_PTR_ADD)
125
- .legalFor ({{p0, XLenLLT}});
117
+ getActionDefinitionsBuilder (G_PTR_ADD).legalFor ({{p0, sXLen }});
126
118
127
119
getActionDefinitionsBuilder (G_PTRTOINT)
128
- .legalFor ({{XLenLLT , p0}})
129
- .clampScalar (0 , XLenLLT, XLenLLT );
120
+ .legalFor ({{sXLen , p0}})
121
+ .clampScalar (0 , sXLen , sXLen );
130
122
131
123
getActionDefinitionsBuilder (G_INTTOPTR)
132
- .legalFor ({{p0, XLenLLT }})
133
- .clampScalar (1 , XLenLLT, XLenLLT );
124
+ .legalFor ({{p0, sXLen }})
125
+ .clampScalar (1 , sXLen , sXLen );
134
126
135
- getActionDefinitionsBuilder (G_BRCOND)
136
- .legalFor ({XLenLLT})
137
- .minScalar (0 , XLenLLT);
127
+ getActionDefinitionsBuilder (G_BRCOND).legalFor ({sXLen }).minScalar (0 , sXLen );
138
128
139
129
getActionDefinitionsBuilder (G_PHI)
140
- .legalFor ({p0, XLenLLT })
130
+ .legalFor ({p0, sXLen })
141
131
.widenScalarToNextPow2 (0 )
142
- .clampScalar (0 , XLenLLT, XLenLLT );
132
+ .clampScalar (0 , sXLen , sXLen );
143
133
144
134
getActionDefinitionsBuilder (G_GLOBAL_VALUE)
145
135
.legalFor ({p0});
146
136
147
137
if (ST.hasStdExtM () || ST.hasStdExtZmmul ()) {
148
138
getActionDefinitionsBuilder (G_MUL)
149
- .legalFor ({s32, XLenLLT })
139
+ .legalFor ({s32, sXLen })
150
140
.widenScalarToNextPow2 (0 )
151
- .clampScalar (0 , s32, XLenLLT );
141
+ .clampScalar (0 , s32, sXLen );
152
142
153
143
// clang-format off
154
144
getActionDefinitionsBuilder ({G_SMULH, G_UMULH})
155
- .legalFor ({XLenLLT })
145
+ .legalFor ({sXLen })
156
146
.lower ();
157
147
// clang-format on
158
148
159
- getActionDefinitionsBuilder ({G_SMULO, G_UMULO})
160
- .minScalar (0 , XLenLLT)
161
- .lower ();
149
+ getActionDefinitionsBuilder ({G_SMULO, G_UMULO}).minScalar (0 , sXLen ).lower ();
162
150
} else {
163
151
getActionDefinitionsBuilder (G_MUL)
164
- .libcallFor ({XLenLLT, DoubleXLenLLT })
152
+ .libcallFor ({sXLen , sDoubleXLen })
165
153
.widenScalarToNextPow2 (0 )
166
- .clampScalar (0 , XLenLLT, DoubleXLenLLT );
154
+ .clampScalar (0 , sXLen , sDoubleXLen );
167
155
168
- getActionDefinitionsBuilder ({G_SMULH, G_UMULH}).lowerFor ({XLenLLT });
156
+ getActionDefinitionsBuilder ({G_SMULH, G_UMULH}).lowerFor ({sXLen });
169
157
170
158
getActionDefinitionsBuilder ({G_SMULO, G_UMULO})
171
- .minScalar (0 , XLenLLT )
172
- // Widen XLenLLT to DoubleXLenLLT so we can use a single libcall to get
159
+ .minScalar (0 , sXLen )
160
+ // Widen sXLen to sDoubleXLen so we can use a single libcall to get
173
161
// the low bits for the mul result and high bits to do the overflow
174
162
// check.
175
163
.widenScalarIf (
164
+ [=](const LegalityQuery &Query) { return Query.Types [0 ] == sXLen ; },
176
165
[=](const LegalityQuery &Query) {
177
- return Query.Types [0 ] == XLenLLT;
178
- },
179
- [=](const LegalityQuery &Query) {
180
- return std::make_pair (0 , DoubleXLenLLT);
166
+ return std::make_pair (0 , sDoubleXLen );
181
167
})
182
168
.lower ();
183
169
}
184
170
185
171
if (ST.hasStdExtM ()) {
186
172
getActionDefinitionsBuilder ({G_UDIV, G_SDIV, G_UREM, G_SREM})
187
- .legalFor ({s32, XLenLLT })
188
- .libcallFor ({DoubleXLenLLT })
189
- .clampScalar (0 , s32, DoubleXLenLLT )
173
+ .legalFor ({s32, sXLen })
174
+ .libcallFor ({sDoubleXLen })
175
+ .clampScalar (0 , s32, sDoubleXLen )
190
176
.widenScalarToNextPow2 (0 );
191
177
} else {
192
178
getActionDefinitionsBuilder ({G_UDIV, G_SDIV, G_UREM, G_SREM})
193
- .libcallFor ({XLenLLT, DoubleXLenLLT })
194
- .clampScalar (0 , XLenLLT, DoubleXLenLLT )
179
+ .libcallFor ({sXLen , sDoubleXLen })
180
+ .clampScalar (0 , sXLen , sDoubleXLen )
195
181
.widenScalarToNextPow2 (0 );
196
182
}
197
183
0 commit comments