[llvm-dev] RFC: Identification of LEA instructions with complex addressing mode

Jatin Bhateja via llvm-dev llvm-dev at lists.llvm.org
Sat Jul 8 23:20:32 PDT 2017


  Current state:

     1/ LEA with complex addressing mode are supported by Intel micro
architectures after Nehalem.

     2/ LEA detection is being done during SelectionDAG based instruction
selection through
         addressing mode based complex pattern matching.

     3/ This does not identify LEA patterns beyond Scaling factor 1.
         e.g.
             T1 = A  + B;
             T2 = T1 + B;
             T3 = T2 + B;
             T4 = T3 + 10;
             T5 = T4 + 20;
             T6 = T5 + B

         Above sequence can be folded to

              LEA   30( A , 4 , B);

         where BASE = A, SCALE = 4, INDEX = B and OFFSET = 30

     4/ Control flow information is not present at SelectionDAG level, as
SelectionDAG based selection
         work over a single BasicBlock at a time. Which makes it difficult
to avoid generation of
         complex LEA with 3 operands (even with Scale=1) within Loops.

  Proposal:

     1/ To have a pre-RA pass to identify LEAs with dense folding. By dense
folding I mean scale factor greater than 1.

     2/ Since this pass will run over MachineInstrs so it will be usable
for FastISel and Global ISel based flows also which
         bypass SelectionDAG.

     3/ At MI level we have control flow Analysis info in the form of
MachineDominatorTree and MachineLoopInfo
         to avoid formation of LEAs in loops.

     4/ Perform CSE over dense LEAs (which have Scale factor > 1) to factor
out overlapping computations.
         When two LEAs share BASE , INDEX and OFFSET but have different
SCALE we can
         take out the common complex LEA and generate a simple LEA with
legal Scale.
         e.g.

              LEA1 : RES1 = LEA 10( A , 4 , B)
              LEA2 : RES2 = LEA 10( A , 8 , B)

         can be converted to

              LEA1 : RES1 = LEA 10( A , 4 , B)
              LEA2 : RES2 = LEA (RES1 , 4 , B)

      5/  Disintegration of complex LEAs with Scale 1 to simple LEA + ADD
which is already being handled during
           FixupLEAPass.

Kindly drop your suggestions/comments.

Thanks,
Jatin Bhateja
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170709/27b26a18/attachment.html>


More information about the llvm-dev mailing list