[LLVMdev] Multi-Instruction Patterns
David Greene
dag at cray.com
Wed Sep 24 09:15:12 PDT 2008
On Wednesday 24 September 2008 02:10, Evan Cheng wrote:
> > I wrote a pattern that looks something like the above in form, but how
> > do I tell the selection DAG to prefer my pattern over another that
> > already exists. I can't easily just disable that other pattern
> > because
> > it generates Machine Instruction opcode enums that are assumed to be
> > available in other parts of the x86 codegen.
>
> Try AddedComplexity = n to increase "goodness" of the pattern. It's a
> bit of a hack.
Ah, AddedComplexity == goodness. I thought it == badness so I'd tried to add
it to the pattern I wanted to disable. Thanks for the pointer.
> 1. Treat these instructions as cross register class copies. The src
> and dst classes are different (VR128 and FR32) but "compatible".
This seems reasonable.
> 2. Model it as extract_subreg which coalescer can eliminate.
>
> #2 is conceptually correct. The problem is 128 bit XMM0 is the same
> register as 32 bit (or 64 bit) XMM0. So it's not possible to define
> the super-register / sub-register relationship.
I'm not seeing how this is "conceptually correct." It's a vector extract, not
a subregister. It's just that we want to reuse the same register.
Perhaps the answer is to add vector extract support to the coalescer, in
the same way you added subregister support. I don't understand the nitty
gritty of that, though.
> That leaves us with #1. I have added support to coalesce cross-class
> copies (see CrossClassJoin in SimpleRegisterCoalescing.cpp).
Yep.
> Unfortunately, it breaks a few tests and I haven't had the time to
> look into them. If that's done, we just need to add the concept of
> "compatible register classes" and mark MOVPS2SSrr as a copy and *it
> should just work*.
What about getting tblgen support for the pattern in the .td file? That would
be another way to tackle this and would open up a whole bunch of other
opportunities. Instcombine could be entirely expressed as a set of tblgen
patterns, for example, which is desireable from a maintenance perspective
and well as new development. It's much easier to write patterns than to go
through all of the manual examination that currently exists in instcombine.
-Dave
More information about the llvm-dev
mailing list