This commit enables the expression of negated native constraints in PDLL:
If a constraint is prefixed with "not" it is parsed as a negated constraint and hence the attribute isNegated of the emitted pdl.apply_native_constraint operation is set to true.
In first instance this is only supported for the calling of external native C++ constraints and generation of PDL patterns.
Previously, negating a native constraint would have been handled by creating an additional native call, e.g.
PDLL Constraint checkA(input: Attr); Constarint checkNotA(input: Attr);
or by including an explicit additional operand for negation, e.g.
Constraint checkA(input: Attr, negated: Attr);
With this a constraint can simply be negated by prefixing it with not. e.g.
PDLL Constraint simpleConstraint(op: Op); Pattern example { let inputOp = op<test.bar>() ->(type: Type); let root = op<test.foo>(inputOp.0) -> (); not simpleConstraint(inputOp); simpleConstraint(root); erase root; }
Depends on D153871
can you guard this on std::is_same_v<PDLOpT, ApplyConstantOp> and then use setIsNegated function directly?