[email protected] writes:
> The next three describe the control part of new supported loops.
> - the last jump instruction should look like: pc=(regF!=0)?label:pc, regF is
> flag register;
> - the last instruction which sets regF should be: regF=COMPARE(regC,X), where
> X
> is a constant, or maybe a register, which is not changed inside a loop;
> - only one instruction modifies regC inside a loop (other can use regC, but
> not
> write), and it should simply adjust it by a constant: regC=regC+step, where
> step is a constant.
Note that on ARM, the comparison and loop counter addition can happen
as a single parallel:
(insn 29 27 30 3 (parallel [
(set (reg:CC_NOOV 24 cc)
(compare:CC_NOOV (plus:SI (reg:SI 142 [ ivtmp.9 ])
(const_int -1 [0xffffffffffffffff]))
(const_int 0 [0])))
(set (reg:SI 142 [ ivtmp.9 ])
(plus:SI (reg:SI 142 [ ivtmp.9 ])
(const_int -1 [0xffffffffffffffff])))
]) /tmp/bar5.c:9 6 {addsi3_compare0}
(nil))
I think we'd need to handle that too before getting rid of the
ARM doloop_end pattern.
Richard