Reducing JUMPs and using conditional exec

Sami Khawam S.Khawam@ee.ed.ac.uk
Tue Nov 30 14:51:00 GMT 2004


Hi Adrian,

Thanks for the reply.

Acctually, the architecture I have only supports 
conditional moves, and no other conditional operation.
I tried defining the conditional move (see end of 
msg) along side a definitions of 'cbranchsi4' and 
'movesicc', however, it only works for simple 
conditional copying that dont require the 
computation of an intermediate value (see me 
previous email). I also tried, as you suggest, using 
'define_cond_exec' and 'predicable' to expand all 
the insn with cond_exec, but that didn't help.

The problem seems as if the compiler thinks that it 
is always better to use jumps than using excessive 
moves, which is not really the case in the 
architecture I have.





(define_insn "*my_cond_mov"
   [(cond_exec
    (match_operator 0 "comparison_operator"
[(match_operand:SI 1 "register_operand" "r")
  (match_operand:SI 2 "register_operand" "r")])
   (set (match_operand:SI 3 "register_operand" "=r")
(match_operand:SI 4 "general_operand"  "rmIKi")
	 ) )]
   ""
   "COMP_MOV %C0,%1, %2, %3, %4, %3"
)


Regards,

Sami Khawam




Adrian Strätling wrote:
> Sami Khawam wrote::
> 
>>
>>
>> Thanks a lot Hans-Peter for the info; indeed the documentation 
>> explains it quite well, however it does not explain well how to deal 
>> with the expansion on CPU that dont have a cc0.
> 
> 
> I wrote my diploma thesis about a processor that can execute any 
> operation conditional. It can use several condition registers for that 
> purpose. The key idea is the 'define_cond_exec' pattern combined with 
> the 'predicable' attribute. You may want to look at the solution to my 
> problem at 
> http://rtg.informatik.tu-chemnitz.de/obj.php/da-astr.pdf?id=162&mime=application%2Fpdf 
> 
> 
> hth,
> Adrian Strätling




More information about the Gcc mailing list