Selecting FrameIndex

Hi All

I'm having nightmares with FrameIndexes during my backend development :frowning:

I have ComplexPatterns defined for my two addressing modes (RR and
RI). Most of the time, FrameIndex operands appear to be on load/store
nodes, in which case everything works fine as my custom addressing
modes matchers work fine.

Unfortunately, I now have an add node which has a FrameIndex operand
(this results from a store to an int array in the source).

But there is no explicit pattern to match FrameIndex in the .td files,
even though I've specified 'frameindex' in the 'roots' of the
addressing mode ComplexPattern. The result is that I get a
CannotYetSelect on the FrameIndex operand during selection.

Anyone know what i'm doing wrong?

someguy wrote:

But there is no explicit pattern to match FrameIndex in the .td files,
even though I've specified 'frameindex' in the 'roots' of the
addressing mode ComplexPattern. The result is that I get a
CannotYetSelect on the FrameIndex operand during selection.

Anyone know what i'm doing wrong?
  

You're not doing anything wrong, you've just made friends with the common subexpression eliminator. :slight_smile:

Have a look at the PPC or CellSPU backends' SelectionDAGISel::Select() method.. You end up catching the ISD::FrameIndex node during instruction selection and then doing something "useful" with it. In the CellSPU's case, the ISD::FrameIndex node is turned into an add and the result stored in a register.

-scooter

Hi,