[llvm-dev] Pattern doesn't match error
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Wed Jan 6 13:53:49 PST 2016
On 1/6/2016 12:52 PM, Rail Shafigulin wrote:
>
> I'm not sure I understand it. Here is the change that I made for my target
>
> class InstEscala<dag outs, dag ins, string asmstr, list<dag> pattern>
> : Instruction {
> ....
> ....
> let mayLoad = 0;
> ....
> ....
> }
>
> All I have done is set mayLoad to 0. Would you mind using your
> explanation in the context of my change? I think once there is a
> specific case it is easier to understand what is the problem.
If the pattern that you use to define a particular instruction of this
class contains an SDNode that has a "may load" property, it will infer
that the pattern has a "mayLoad" property. That property must be the
same as the "mayLoad" that is explicitly specified in the instruction
definition.
Look in utils/TableGen/CodeGenDAGPatterns.cpp:
void AnalyzeNode(const TreePatternNode *N) {
[...]
// Notice properties of the node.
if (N->NodeHasProperty(SDNPMayStore, CDP)) mayStore = true;
if (N->NodeHasProperty(SDNPMayLoad, CDP)) mayLoad = true;
if (N->NodeHasProperty(SDNPSideEffect, CDP)) hasSideEffects = true;
if (N->NodeHasProperty(SDNPVariadic, CDP)) isVariadic = true;
[...]
}
If your pattern contains a "load", this will directly conflict with the
explicit "mayLoad = 0".
-Krzysztof
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list