Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 1 | |
| 2 | To-do |
| 3 | ----- |
| 4 | |
| 5 | * Keep the address of the constant pool in a register instead of forming its |
| 6 | address all of the time. |
| 7 | * We can fold small constant offsets into the %hi/%lo references to constant |
| 8 | pool addresses as well. |
| 9 | * When in V9 mode, register allocate %icc[0-3]. |
Chris Lattner | 8c89bee | 2008-02-28 05:44:20 +0000 | [diff] [blame] | 10 | * Add support for isel'ing UMUL_LOHI instead of marking it as Expand. |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 11 | * Emit the 'Branch on Integer Register with Prediction' instructions. It's |
| 12 | not clear how to write a pattern for this though: |
| 13 | |
| 14 | float %t1(int %a, int* %p) { |
| 15 | %C = seteq int %a, 0 |
| 16 | br bool %C, label %T, label %F |
| 17 | T: |
| 18 | store int 123, int* %p |
| 19 | br label %F |
| 20 | F: |
| 21 | ret float undef |
| 22 | } |
| 23 | |
| 24 | codegens to this: |
| 25 | |
| 26 | t1: |
| 27 | save -96, %o6, %o6 |
| 28 | 1) subcc %i0, 0, %l0 |
| 29 | 1) bne .LBBt1_2 ! F |
| 30 | nop |
| 31 | .LBBt1_1: ! T |
| 32 | or %g0, 123, %l0 |
| 33 | st %l0, [%i1] |
| 34 | .LBBt1_2: ! F |
| 35 | restore %g0, %g0, %g0 |
| 36 | retl |
| 37 | nop |
| 38 | |
| 39 | 1) should be replaced with a brz in V9 mode. |
| 40 | |
| 41 | * Same as above, but emit conditional move on register zero (p192) in V9 |
| 42 | mode. Testcase: |
| 43 | |
| 44 | int %t1(int %a, int %b) { |
| 45 | %C = seteq int %a, 0 |
| 46 | %D = select bool %C, int %a, int %b |
| 47 | ret int %D |
| 48 | } |
| 49 | |
| 50 | * Emit MULX/[SU]DIVX instructions in V9 mode instead of fiddling |
| 51 | with the Y register, if they are faster. |
| 52 | |
| 53 | * Codegen bswap(load)/store(bswap) -> load/store ASI |
| 54 | |
| 55 | * Implement frame pointer elimination, e.g. eliminate save/restore for |
| 56 | leaf fns. |
| 57 | * Fill delay slots |
| 58 | |