This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
>> $ grep Trying.four log |wc -l >> 307743 >> $ grep Trying.three log |wc -l >> 592776 >> $ grep Trying.two log |wc -l >> 1643112 >> $ grep Succeeded.two log |wc -l >> 204808 >> $ grep Succeeded.three.into.two log |wc -l >> 2976 >> $ grep Succeeded.three.into.one log |wc -l >> 12473 >> $ grep Succeeded.four.into.two log |wc -l >> 244 >> $ grep Succeeded.four.into.one log |wc -l >> 140 > > No four into three? So overall it's one order of magnitude less > three than two and two order of magnitude less four than three. I redid the numbers for Thumb-1, over the same set of input files. I left out the two-insn combinations because the greps take ages and the comparison 3 vs 4 should provide enough information. $ grep Trying.three log |wc -l 842213 $ grep Trying.four log |wc -l 488682 $ grep Succeeded.four.to.two log|wc -l 759 $ grep Succeeded.four.to.one log|wc -l 163 $ grep Succeeded.three.to.two log|wc -l 6230 $ grep Succeeded.three.to.one log|wc -l 3178 So the patch seems somewhat more effective for this target (unsurprisingly as it has simpler instructions). With the following heuristic in try_combine: if (i0) { int i; int ncst = 0; int nshift = 0; for (i = 0; i < 3; i++) { rtx insn = i == 0 ? i0 : i == 1 ? i1 : i2; rtx set = single_set (insn); if (set && CONSTANT_P (SET_SRC (set))) ncst++; else if (set && (GET_CODE (SET_SRC (set)) == ASHIFT || GET_CODE (SET_SRC (set)) == ASHIFTRT || GET_CODE (SET_SRC (set)) == LSHIFTRT)) nshift++; } if (ncst == 0 && nshift < 2) return 0; } $ grep Trying.four log2 |wc -l 187120 $ grep Succeeded.four log2|wc -l 828 $ grep Succeeded.three.to.one log2|wc -l 3161 $ grep Succeeded.three.to.two log2|wc -l 6218 With the heuristic, we still catch the majority of interesting cases on Thumb-1, with a reduced number of attempts, but we also miss some optimizations like these: - add r2, r2, #1 lsl r2, r2, #5 - add r3, r3, r2 - sub r3, r3, #32 + add r3, r2, r3 ==== - mvn r3, r3 lsr r3, r3, #16 - mvn r3, r3 ==== In summary, should I check in the patch with the above heuristic? Bernd
Attachment:
combine4d.diff
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |