Fix bug in PhyRegAlloc::setCallInterferences() handling call through a
[oota-llvm.git] / lib / Target / PowerPC / README.txt
1 TODO:
2 * use stfiwx in float->int
3 * implement cast fp to bool
4 * implement algebraic shift right long by reg
5 * implement scheduling info
6 * implement powerpc-64 for darwin
7 * implement powerpc-64 for aix
8 * fix rlwimi generation to be use-and-def
9 * fix ulong to double:
10   floatdidf assumes signed longs.  so if the high but of a ulong
11   just happens to be set, you get the wrong sign.  The fix for this
12   is to call cmpdi2 to compare against zero, if so shift right by one,
13   convert to fp, and multiply by (add to itself).  the sequence would
14   look like:
15   {r3:r4} holds ulong a;
16   li r5, 0
17   li r6, 0 (set r5:r6 to ulong 0)
18   call cmpdi2 ==> sets r3 <, =, > 0
19   if r3 > 0
20   call floatdidf as usual
21   else
22   shift right ulong a, 1 (we could use emitShift)
23   call floatdidf
24   fadd f1, f1, f1 (fp left shift by 1)
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 that should pass:
33 * SingleSource
34   `- Regression
35   |  `- casts (ulong to fp failure)
36 * MultiSource
37   |- Applications
38   |  `- hbd: miscompilation