[llvm] r231946 - Updated with list of possible improvements we are tracking internally

Kit Barton kbarton at ca.ibm.com
Wed Mar 11 10:43:43 PDT 2015


Author: kbarton
Date: Wed Mar 11 12:43:43 2015
New Revision: 231946

URL: http://llvm.org/viewvc/llvm-project?rev=231946&view=rev
Log:
Updated with list of possible improvements we are tracking internally

Modified:
    llvm/trunk/lib/Target/PowerPC/README.txt
    llvm/trunk/lib/Target/PowerPC/README_ALTIVEC.txt

Modified: llvm/trunk/lib/Target/PowerPC/README.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/README.txt?rev=231946&r1=231945&r2=231946&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/README.txt (original)
+++ llvm/trunk/lib/Target/PowerPC/README.txt Wed Mar 11 12:43:43 2015
@@ -621,3 +621,10 @@ void foo() {
   bar(x);
   __asm__("" ::: "cr2");
 }
+
+//===----------------------------------------------------------------------===//
+
+Instruction fusion was introduced in ISA 2.06 and more opportunities added in
+ISA 2.07.  LLVM needs to add infrastructure to recognize fusion opportunities
+and force instruction pairs to be scheduled together.
+

Modified: llvm/trunk/lib/Target/PowerPC/README_ALTIVEC.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/README_ALTIVEC.txt?rev=231946&r1=231945&r2=231946&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/README_ALTIVEC.txt (original)
+++ llvm/trunk/lib/Target/PowerPC/README_ALTIVEC.txt Wed Mar 11 12:43:43 2015
@@ -254,6 +254,7 @@ Produces the following code with -mtripl
 The two stxvw4x instructions are not needed.
 With -mtriple=powerpc64le-unknown-linux-gnu, the associated permutes
 are present too.
+
 //===----------------------------------------------------------------------===//
 
 The following example is found in test/CodeGen/PowerPC/vec_add_sub_doubleword.ll:
@@ -279,4 +280,36 @@ the stack, unless it's being done set up
 it would be better to splat teh value into a vector register, and then
 remove the (dead) stores to the stack.
 
+//===----------------------------------------------------------------------===//
+
+At the moment we always generate a lxsdx in preference to lfd, or stxsdx in
+preference to stfd.  When we have a reg-immediate addressing mode, this is a
+poor choice, since we have to load the address into an index register.  This
+should be fixed for P7/P8. 
+
+//===----------------------------------------------------------------------===//
+
+Right now, ShuffleKind 0 is supported only on BE, and ShuffleKind 2 only on LE.
+However, we could actually support both kinds on either endianness, if we check
+for the appropriate shufflevector pattern for each case ...  this would cause
+some additional shufflevectors to be recognized and implemented via the
+"swapped" form.
+
+//===----------------------------------------------------------------------===//
+
+There is a utility program called PerfectShuffle that generates a table of the
+shortest instruction sequence for implementing a shufflevector operation on
+PowerPC.  However, this was designed for big-endian code generation.  We could
+modify this program to create a little endian version of the table.  The table
+is used in PPCISelLowering.cpp, PPCTargetLowering::LOWERVECTOR_SHUFFLE().
+
+//===----------------------------------------------------------------------===//
 
+Opportunies to use instructions from PPCInstrVSX.td during code gen
+  - Conversion instructions (Sections 7.6.1.5 and 7.6.1.6 of ISA 2.07)
+  - Scalar comparisons (xscmpodp and xscmpudp)
+  - Min and max (xsmaxdp, xsmindp, xvmaxdp, xvmindp, xvmaxsp, xvminsp)
+
+Related to this: we currently do not generate the lxvw4x instruction for either
+v4f32 or v4i32, probably because adding a dag pattern to the recognizer requires
+a single target type.  This should probably be addressed in the PPCISelDAGToDAG logic.





More information about the llvm-commits mailing list