[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