"Moore, Catherine" <catherine_mo...@mentor.com> writes: > Hi Richard, > I've attached an example patch for the add pattern that tries to > identify the short microMIPS variants. In your last review, you > mentioned that you would like to see the register requirements modeled > in the patterns. Do you have any comments on the approach that I'm > taking? Thanks,
Looks good, thanks. I was a bit surprised that we want to hide this completely from the register allocators (by adding "!" to all of the micromips forms) but I can see that being too honest about the alternatives might lead to poor decisions. That's definitely something that could be retuned later if someone wants to. A few bikesheddy comments: - Please use "Y..." constraints for constants (as with "Yb", "Yh", etc.). I was hoping to keep "Y..." for constants and "Z..." for memory stuff. - You used a mixture of predicates and out-of-line functions to do the matching. I think we should use the predicate approach across the board, because it's hard to predict which ones will come in useful in future. - Predicates should always check the code though. E.g.: (define_predicate "umips_addius5_imm" (and (match_code "const_int") (match_test "IN_RANGE (INTVAL (op), -8, 7)"))) - In general, please try to make the names of the predicates as generic as possible. There's nothing really add-specific about the predicate above. Or microMIPS-specific either really: some of these predicates are probably going to be useful for MIPS16 too. The existing MIPS16 functions follow the convention: "n" if negated (optional) + "s" or "u" for signed vs. unsigned + "imm" + number of significant bits + "_" + multiplication factor or, er, "b" for "+1"... It might be nice to have a similar convention for microMIPS. The choices there are a bit more exotic, so please feel free to diverge from the MIPS16 one above; we can switch MIPS16 over once the microMIPS one is settled. In fact, a new convention that's compact enough to be used in both predicate and constraint names would be great. E.g. for the umips_addius5_imm predicate above, a name like "Ys5" would be easier to remember than "Zo"/"Yo". That said,I realise things like umips_addiur2_imm_p are a bit hard to describe this way and might need to stay instruction-specific. - We already have a "ks" constraint for the stack pointer. - I like the choice of "u" for M16_REGS. Kind of lucky that that letter's still free. :-) As you've probably noticed though, we're running desparately short of contraint letters, so if you also need names for other less frequently-used classes, it might be better to use "k..." for those. Thanks, Richard