summaryrefslogtreecommitdiff
path: root/R600ToDo.mdwn
diff options
context:
space:
mode:
authorvlj <vlj@web>2013-07-09 13:01:39 -0700
committerdri <iki-dri@freedesktop.org>2013-07-09 13:01:39 -0700
commitd23c9e8523a936833d2910888ef45dfbd1994a2d (patch)
tree4cdfcd333b63155986ea1856797f1609f31846a3 /R600ToDo.mdwn
parentdca023a326717493de2a124fa4b6f714d0486bc7 (diff)
Diffstat (limited to 'R600ToDo.mdwn')
-rw-r--r--R600ToDo.mdwn9
1 files changed, 9 insertions, 0 deletions
diff --git a/R600ToDo.mdwn b/R600ToDo.mdwn
index 3f86f6e..0febaae 100644
--- a/R600ToDo.mdwn
+++ b/R600ToDo.mdwn
@@ -44,6 +44,15 @@ And here is the R600g to do list; if you feel something is missing please add it
* _Status:_ N/A
* _Description:_
* One way to do this would be to stick assembly output into an ELF section, but I think the biggest challenge will be figuring out how to generate ISA and assembly together.
+* **Move FNEG/FABS/Immediate folding code to AMDGPUDAGToDAGISel::PostprocessISelDAG()
+ * _Difficulty:_ Medium
+ * _Who's working on it:_ N/A
+ * _Date Started:_ N/A
+ * _Status:_ N/A
+ * _Description:_
+ * R600 provides 2 inputs modifier to encode some operation: FNEG (on all ALU insts) and FABS (only on OP2 insts). It also supports inline immediate (for 0.0, +-0.5, +-1.0, 0 and 1) while others immediate can be folded to R600::Imm operand. We currently use a hook in AMDGPUDAGToDAGISel::Select() function to parse
+inputs when a pattern is matched by llvm instruction selection pass. It has a major drawback though : it will only recursively parse the children of the top most selected instruction (intentionnaly done to avoid parsing whole ISel tree several time). This means than pattern won't be properly parsed : For instance flog ( fabs (fneg x))) will be correctly lowered to a single instruction with both NEG and ABS bit set, but fp_to_sint ( fneg (x)) won't, because fp_to_sint is lowered to FP_TO_INT (TRUNC (x)) ; we will parse FP_TO_INT input, see it's not a fneg/fabs/immediate, and returns.
+To avoid that, we can use the PostprocessISelDAG hook : all nodes are MachineNode after ISel and we can parse the use list of all nodes to optimize them when possible.
### Compute
* **Enable constant address space **