3 * implement do-loop -> bdnz transform
4 * implement powerpc-64 for darwin
5 * use stfiwx in float->int
6 * be able to combine sequences like the following into 2 instructions:
7 lis r2, ha16(l2__ZTV4Cell)
8 la r2, lo16(l2__ZTV4Cell)(r2)
11 * Teach LLVM how to codegen this:
12 unsigned short foo(float a) { return a; }
24 rlwinm r3, r2, 0, 16, 31
28 * Support 'update' load/store instructions. These are cracked on the G5, but
29 are still a codesize win.
31 * Add a custom legalizer for the GlobalAddress node, to move the funky darwin
32 stub stuff from the instruction selector to the legalizer (exposing low-level
33 operations to the dag for optzn. For example, we want to codegen this:
49 * should hint to the branch select pass that it doesn't need to print the
50 second unconditional branch, so we don't end up with things like:
51 b .LBBl42__2E_expand_function_8_674 ; loopentry.24
52 b .LBBl42__2E_expand_function_8_42 ; NewDefault
53 b .LBBl42__2E_expand_function_8_42 ; NewDefault
55 ===-------------------------------------------------------------------------===
60 if (X == 0x12345678) bar();
76 ===-------------------------------------------------------------------------===
78 Lump the constant pool for each function into ONE pic object, and reference
79 pieces of it as offsets from the start. For functions like this (contrived
80 to have lots of constants obviously):
82 double X(double Y) { return (Y*1.23 + 4.512)*2.34 + 14.38; }
87 lis r2, ha16(.CPI_X_0)
88 lfd f0, lo16(.CPI_X_0)(r2)
89 lis r2, ha16(.CPI_X_1)
90 lfd f2, lo16(.CPI_X_1)(r2)
92 lis r2, ha16(.CPI_X_2)
93 lfd f1, lo16(.CPI_X_2)(r2)
94 lis r2, ha16(.CPI_X_3)
95 lfd f2, lo16(.CPI_X_3)(r2)
99 It would be better to materialize .CPI_X into a register, then use immediates
100 off of the register to avoid the lis's. This is even more important in PIC
103 ===-------------------------------------------------------------------------===