[llvm-dev] infer correct types from the pattern
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Tue Apr 5 05:48:11 PDT 2016
On 4/4/2016 5:58 PM, Rail Shafigulin wrote:
>
> What about load instruction? I tried the same approach but I got an error.
>
> error: In anonymous_570: Type inference contradiction found, merging
> '{v4i32:v4f32}' into '{i32:f32}'
>
Try changing this Pat:
> // Cast load of a floating point vector to use the same
> // operation as a load of an integer vector.
> def: Pat<(set (v4f32 VR:$rD), (load ADDRri:$src)),
> (VLWZ VR:$rD, ADDRri:$src)>;
to
def: Pat<(v4f32 (load ADDRri:$src)),
(VLWZ ADDRri:$src)>;
That is, remove the "set" from the input pattern and the output operand
from the output pattern.
Generally, Pats only contain input operands.
If you have an error message like the one above, one easy way to locate
the problem is to look at the list of all records generated by table-gen:
$ llvm-tblgen -print-records -I /path/to/llvm/lib/Target/<target> -I
/path/to/llvm/lib/Target -I /path/to/llvm/include
/path/to/lib/Target/<target>/<target>.td -o output_file
(This is the same invocation of table-gen as for any other purpose,
except for the "-print-records" option instead of the typical -gen-...
options.)
The output_file will then contain all the records that came out of the
.td files, for example:
def anonymous_1405 { // Pattern Pat T_CMP_pat
dag PatternToMatch = (i1 (seteq (i32 IntRegs:$src1), s10ImmPred:$src2));
list<dag> ResultInstrs = [(C2_cmpeqi IntRegs:$src1, s10ImmPred:$src2)];
list<Predicate> Predicates = [];
int AddedComplexity = 0;
string NAME = ?;
}
You can look for "anonymous_570" in your case and see where it came
from. The comment after "def anonymous..." is a list of classes from
which this definition was inherited.
-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