Finish parser/printer support for AffineMapOp, implement operand iterators on
VariadicOperands, tidy up some code in the asmprinter, fill out more
verification logic in for LoadOp.
PiperOrigin-RevId: 206443020
diff --git a/lib/IR/AsmPrinter.cpp b/lib/IR/AsmPrinter.cpp
index 28149fc..a3ea465 100644
--- a/lib/IR/AsmPrinter.cpp
+++ b/lib/IR/AsmPrinter.cpp
@@ -93,29 +93,25 @@
// TODO Support visiting other types/instructions when implemented.
void ModuleState::visitType(const Type *type) {
- if (type->getKind() == Type::Kind::Function) {
+ if (auto *funcType = dyn_cast<FunctionType>(type)) {
// Visit input and result types for functions.
- auto *funcType = cast<FunctionType>(type);
- for (auto *input : funcType->getInputs()) {
+ for (auto *input : funcType->getInputs())
visitType(input);
- }
- for (auto *result : funcType->getResults()) {
+ for (auto *result : funcType->getResults())
visitType(result);
- }
- } else if (type->getKind() == Type::Kind::MemRef) {
+ } else if (auto *memref = dyn_cast<MemRefType>(type)) {
// Visit affine maps in memref type.
- auto *memref = cast<MemRefType>(type);
- for (AffineMap *map : memref->getAffineMaps()) {
+ for (auto *map : memref->getAffineMaps()) {
recordAffineMapReference(map);
}
}
}
void ModuleState::visitAttribute(const Attribute *attr) {
- if (isa<AffineMapAttr>(attr)) {
- recordAffineMapReference(cast<AffineMapAttr>(attr)->getValue());
- } else if (isa<ArrayAttr>(attr)) {
- for (auto elt : cast<ArrayAttr>(attr)->getValue()) {
+ if (auto *mapAttr = dyn_cast<AffineMapAttr>(attr)) {
+ recordAffineMapReference(mapAttr->getValue());
+ } else if (auto *array = dyn_cast<ArrayAttr>(attr)) {
+ for (auto elt : array->getValue()) {
visitAttribute(elt);
}
}
@@ -535,7 +531,7 @@
ModulePrinter::printAttribute(attr);
}
void printAffineMap(const AffineMap *map) {
- return ModulePrinter::printAffineMap(map);
+ return ModulePrinter::printAffineMapReference(map);
}
void printAffineExpr(const AffineExpr *expr) {
return ModulePrinter::printAffineExpr(expr);