Hi Amogh,
> I am trying to implement a subtarget for the X86 architecture that only
has 64> bit Registers. While running LLC on the IR for a very simple program, llc
fails
> on an assertion that says it doesn't know how to promote
ISD::FRAMEINDEX. I've
> tried to look for why how to promote the frameindex which is stored in a
i32
> variable to an i64 variable but can't seem to find where this is done.
Can
> anyone help me with this?
probably the easiest way to solve this is to not generate FrameIndex with a
32 bit argument in the first place. That said, in LegalizeIntegerTypes.cpp,
in DAGTypeLegalizer::PromoteIntegerOperand, you can add support for FrameIndex.
The following would probably work:
(1) get the 64 bit version of the argument using ZExtPromotedInteger or
SExtPromotedInteger (depending on whether indices are unsigned or signed);
(2) use UpdateNodeOperands to replace the old operand with this one.
There are many examples of similar logic in that file, for example
DAGTypeLegalizer::PromoteIntOp_Shift (though there it is promoting operand
1 and leaving operand 0 alone, while it is the other way round in your case
I think).
Ciao, Duncan.