[llvm-dev] TableGen pseudo lowering
Anton Korobeynikov via llvm-dev
llvm-dev at lists.llvm.org
Sun Sep 27 01:39:41 PDT 2020
Oh, just take a look into e.g. ARM pseudo expansion pass
(lib/Target/ARM/ARMPseudoInsts.cpp). For example we could look into
expansion of MOV32Imm there (ExpandMOV32BitImm). Depending on the
operand various things needs to happen:
- For Imm – just split imm into parts
- For external symbol / GV – we need to add special target flags
(that will be translated to assembler modifiers or special kinds of
relocs)
Plus – we need to transfer the memory references, predicates, implicit
operands, etc.
Obviously, this is a "tough" case, though :)
On Sat, Sep 26, 2020 at 4:13 PM Paul C. Anagnostopoulos
<paul at windfall.com> wrote:
>
> Can you give an example of the property splitting issue?
>
> At 9/26/2020 03:34 AM, Anton Korobeynikov wrote:
> >Paul,
> >
> >Absolutely. This may reduce the amount of hand-written code for
> >pseudo-expansion in the backends in general. However, there are
> >caveats as in many cases additional properties need to be transferred
> >as well and "splitted" between these instructions. I don't have a good
> >solution for this.
> >
> >
> >On Fri, Sep 25, 2020 at 7:48 PM Paul C. Anagnostopoulos via llvm-dev
> ><llvm-dev at lists.llvm.org> wrote:
> >>
> >> The TableGen PseudoLoweringEmitter backend is responsible for lowering pseudo-instructions to real machine instructions. In the code is this comment:
> >>
> >> // FIXME: This pass currently can only expand a pseudo to a single instruction.
> >> // The pseudo expansion really should take a list of dags, not just
> >> // a single dag, so we can do fancier things.
> >>
> >> Does anyone think that enhancing it to expand to multiple instructions is worth the effort?
>
--
With best regards, Anton Korobeynikov
Department of Statistical Modelling, Saint Petersburg State University
More information about the llvm-dev
mailing list