This series makes the PowerPC port deal with the {add,subf}{c,ic,e,ze,me} instructions directly, not as bigger primitives (which used to be emitted as multiple machine instructions).
It does this by expanding multi-precision add/sub/neg as well as the unsigned wordlength sCOND to separate machine insns, which are then simplified where possible by the combine pass and friends. For eq/ne this series splits after combine. This is PR target/64180. All patches bootstrapped and tested on powerpc64-linux, runtestflags -m32,-m64,-m32/-mpowerpc64,-m64/-mlra; also a lot of tiny tests that I'll submit separately. Comments? Is this okay for mainline? Segher Segher Boessenkool (10): rs6000: Clobber XER[CA] in all user asm statements rs6000: Remove addic alternative from various lo_sum patterns rs6000: Do not use addic in the ctr* splitters rs6000: Remove addic from the normal add pattern rs6000: Merge and split add and addic rs6000: New add/subf carry insns rs6000: The big carry insns addition rs6000: compare->two for rld*;rld*. rs6000: Remove the (now unused) insn type "compare" rs6000: Get rid of the weird decimal thing in add gcc/config/rs6000/40x.md | 2 +- gcc/config/rs6000/440.md | 2 +- gcc/config/rs6000/476.md | 2 +- gcc/config/rs6000/601.md | 2 +- gcc/config/rs6000/603.md | 2 +- gcc/config/rs6000/6xx.md | 2 +- gcc/config/rs6000/7450.md | 2 +- gcc/config/rs6000/7xx.md | 2 +- gcc/config/rs6000/8540.md | 2 +- gcc/config/rs6000/cell.md | 10 +- gcc/config/rs6000/darwin.md | 16 +- gcc/config/rs6000/e300c2c3.md | 2 +- gcc/config/rs6000/e500mc.md | 2 +- gcc/config/rs6000/e500mc64.md | 2 +- gcc/config/rs6000/e5500.md | 2 +- gcc/config/rs6000/e6500.md | 2 +- gcc/config/rs6000/mpc.md | 2 +- gcc/config/rs6000/power4.md | 5 +- gcc/config/rs6000/power5.md | 5 +- gcc/config/rs6000/power6.md | 5 +- gcc/config/rs6000/power7.md | 5 +- gcc/config/rs6000/power8.md | 8 +- gcc/config/rs6000/predicates.md | 14 + gcc/config/rs6000/rs6000-protos.h | 1 + gcc/config/rs6000/rs6000.c | 49 +- gcc/config/rs6000/rs6000.md | 1909 ++++++++++++------------------------- gcc/config/rs6000/rs64.md | 2 +- gcc/config/rs6000/spe.md | 18 +- 28 files changed, 733 insertions(+), 1344 deletions(-) -- 1.8.1.4