@@ -246,13 +246,6 @@ depending on the situation.
246
246
247
247
- An argument materialization is used when converting the type of a block
248
248
argument during a [signature conversion](#region-signature-conversion).
249
- The new block argument types are specified in a `SignatureConversion`
250
- object. An original block argument can be converted into multiple
251
- block arguments, which is not supported everywhere in the dialect
252
- conversion. (E.g., adaptors support only a single replacement value for
253
- each original value.) Therefore, an argument materialization is used to
254
- convert potentially multiple new block arguments back into a single SSA
255
- value.
256
249
257
250
* Source Materialization
258
251
@@ -266,9 +259,6 @@ depending on the situation.
266
259
* When a block argument has been converted to a different type, but
267
260
the original argument still has users that will remain live after
268
261
the conversion process has finished.
269
- * When a block argument has been dropped, but the argument still has
270
- users that will remain live after the conversion process has
271
- finished.
272
262
* When the result type of an operation has been converted to a
273
263
different type, but the original result still has users that will
274
264
remain live after the conversion process is finished.
@@ -338,40 +328,36 @@ class TypeConverter {
338
328
registerConversion(wrapCallback<T>(std::forward<FnT>(callback)));
339
329
}
340
330
341
- /// All of the following materializations require function objects that are
342
- /// convertible to the following form:
343
- /// `std::optional<Value>(OpBuilder &, T, ValueRange, Location)`,
344
- /// where `T` is any subclass of `Type`. This function is responsible for
345
- /// creating an operation, using the OpBuilder and Location provided, that
346
- /// "casts" a range of values into a single value of the given type `T`. It
347
- /// must return a Value of the converted type on success, an `std::nullopt` if
348
- /// it failed but other materialization can be attempted, and `nullptr` on
349
- /// unrecoverable failure. It will only be called for (sub)types of `T`.
350
- /// Materialization functions must be provided when a type conversion may
351
- /// persist after the conversion has finished.
352
-
331
+ /// Register a materialization function, which must be convertible to the
332
+ /// following form:
333
+ /// `Optional<Value> (OpBuilder &, T, ValueRange, Location)`,
334
+ /// where `T` is any subclass of `Type`.
335
+ /// This function is responsible for creating an operation, using the
336
+ /// OpBuilder and Location provided, that "converts" a range of values into a
337
+ /// single value of the given type `T`. It must return a Value of the
338
+ /// converted type on success, an `std::nullopt` if it failed but other
339
+ /// materialization can be attempted, and `nullptr` on unrecoverable failure.
340
+ /// It will only be called for (sub)types of `T`.
341
+ ///
353
342
/// This method registers a materialization that will be called when
354
- /// converting (potentially multiple) block arguments that were the result of
355
- /// a signature conversion of a single block argument, to a single SSA value
356
- /// of a legal type.
343
+ /// converting an illegal block argument type, to a legal type.
357
344
template <typename FnT,
358
345
typename T = typename llvm::function_traits<FnT>::template arg_t<1>>
359
346
void addArgumentMaterialization(FnT &&callback) {
360
347
argumentMaterializations.emplace_back(
361
348
wrapMaterialization<T>(std::forward<FnT>(callback)));
362
349
}
363
350
/// This method registers a materialization that will be called when
364
- /// converting a legal replacement value back to an illegal source type.
365
- /// This is used when some uses of the original, illegal value must persist
366
- /// beyond the main conversion.
351
+ /// converting a legal type to an illegal source type. This is used when
352
+ /// conversions to an illegal type must persist beyond the main conversion.
367
353
template <typename FnT,
368
354
typename T = typename llvm::function_traits<FnT>::template arg_t<1>>
369
355
void addSourceMaterialization(FnT &&callback) {
370
356
sourceMaterializations.emplace_back(
371
357
wrapMaterialization<T>(std::forward<FnT>(callback)));
372
358
}
373
359
/// This method registers a materialization that will be called when
374
- /// converting an illegal ( source) value to a legal (target) type.
360
+ /// converting type from an illegal, or source, type to a legal type.
375
361
template <typename FnT,
376
362
typename T = typename llvm::function_traits<FnT>::template arg_t<1>>
377
363
void addTargetMaterialization(FnT &&callback) {
0 commit comments