Replace PowerPCPEI.cpp with target independant PrologEpilogInserter
[oota-llvm.git] / lib / Target / PowerPC / README.txt
1 TODO:
2 * implement cast fp to bool
3 * implement algebraic shift right long by reg
4 * implement scheduling info
5 * implement powerpc-64 for darwin
6 * implement powerpc-64 for aix
7 * fix rlwimi generation to be use-and-def
8 * fix ulong to double:
9   floatdidf assumes signed longs.  so if the high but of a ulong
10   just happens to be set, you get the wrong sign.  The fix for this
11   is to call cmpdi2 to compare against zero, if so shift right by one,
12   convert to fp, and multiply by (add to itself).  the sequence would
13   look like:
14   {r3:r4} holds ulong a;
15   li r5, 0
16   li r6, 0 (set r5:r6 to ulong 0)
17   call cmpdi2 ==> sets r3 <, =, > 0
18   if r3 > 0
19   call floatdidf as usual
20   else
21   shift right ulong a, 1 (we could use emitShift)
22   call floatdidf
23   fadd f1, f1, f1 (fp left shift by 1)
24 * setCondInst needs to know branchless versions of seteq/setne/etc
25 * cast elimination pass (uint -> sbyte -> short, kill the byte -> short)
26 * should hint to the branch select pass that it doesn't need to print the
27   second unconditional branch, so we don't end up with things like:
28         b .LBBl42__2E_expand_function_8_674     ; loopentry.24
29         b .LBBl42__2E_expand_function_8_42      ; NewDefault
30         b .LBBl42__2E_expand_function_8_42      ; NewDefault
31
32 Currently failing tests:
33 * SingleSource
34   `- Regression
35   |  `- casts (ulong to fp failure)
36   `- Benchmarks
37   |  `- Shootout-C++ : most programs fail, miscompilations
38   `- UnitTests
39   |  `- C++Catch
40   |  `- SimpleC++Test
41   |  `- ConditionalExpr (also C++)
42 * MultiSource
43   |- Applications
44   |  `- burg: miscompilation
45   |  `- hbd: miscompilation
46   |  `- d (make_dparser): miscompilation
47   `- Benchmarks
48      `- MallocBench/gs: miscompilation