30 succeeded(parentOr) && !parentOr->hasAllowWitnessAttr()) {
33 SmallVector<Value, 2> frontier {
getValue()};
34 DenseSet<Value> visited;
36 while (!frontier.empty()) {
37 Value v = frontier.pop_back_val();
38 if (visited.contains(v)) {
43 if (Operation *op = v.getDefiningOp()) {
44 if (
FieldReadOp readf = mlir::dyn_cast<FieldReadOp>(op);
46 return (emitOpError() <<
"input is derived from a Signal struct, which is "
48 <<
"' with '" << AllowConstraintAttr::name <<
"' attribute")
49 .attachNote(readf.getLoc())
50 .append(
"Signal struct value is read here");
52 frontier.insert(frontier.end(), op->operand_begin(), op->operand_end());