Merging AVX

I'd like to start moving some of our AVX work into trunk.

We've got quite a bit of it implemented already. I wanted to make sure
we got something that would work and remain relatively stable.

Here's how I'd like to do this. First, I have some more TableGen fixes
and enhancements that are prereqs for AVX templates. I'd like to get
those in first. Then there are a number of foundational templates
that shouldn't affect anything else. I'll put those in next.

Then the fun begins. The first step is to move some some of the
templates from X86InstSSE.td out into a new file (I've called it
X86InstrFragmentsSIMD.td in our tree). These are things like memopv4f32,
alignedload, etc. These are foundational things we need for both
AVX and SSE. The goal is to eventually replace X86InstrSSE.td
entirely with a set of patterns that covers all SIMD instructions. But
that's going to be gradual so we need to maintain both as we go along.
So these foundational templates need to be somewhere accessible to
both sets of patterns.

Then I'll start with a simple instruction like ADDPS/D / VADDPS/D. I will add
all of the base templates needed to implement that and then add the
pattern itself, replacing the various ADDPS/D patterns in X86InstrSSE..td
We'll do instructions one by one until we're done.

When we get to things like shuffles where we've identified major rewrites
that are necessary, we can do that incrementally as well.

Does this sound like a reasonable plan?

                                    -Dave

I'd like to start moving some of our AVX work into trunk.

We've got quite a bit of it implemented already. I wanted to make sure
we got something that would work and remain relatively stable.

Ok.

Here's how I'd like to do this. First, I have some more TableGen fixes
and enhancements that are prereqs for AVX templates. I'd like to get
those in first. Then there are a number of foundational templates
that shouldn't affect anything else. I'll put those in next.

Makes sense.

Then the fun begins. The first step is to move some some of the
templates from X86InstSSE.td out into a new file (I've called it
X86InstrFragmentsSIMD.td in our tree). These are things like memopv4f32,
alignedload, etc. These are foundational things we need for both
AVX and SSE. The goal is to eventually replace X86InstrSSE.td
entirely with a set of patterns that covers all SIMD instructions. But
that's going to be gradual so we need to maintain both as we go along.
So these foundational templates need to be somewhere accessible to
both sets of patterns.

Sure.

Then I'll start with a simple instruction like ADDPS/D / VADDPS/D. I will add
all of the base templates needed to implement that and then add the
pattern itself, replacing the various ADDPS/D patterns in X86InstrSSE..td
We'll do instructions one by one until we're done.

When we get to things like shuffles where we've identified major rewrites
that are necessary, we can do that incrementally as well.

Does this sound like a reasonable plan?

Yes!

Evan