This is the mail archive of the gcc@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]

Reducing JUMPs and using conditional exec based on if_then_else



Hi,


I am still trying to learn the internals of gcc and the .md architecture description files, and I would be very grateful if anyone can help with the following.

I have built a CPU architecture (based on the OpenRISC .md files) where I would like to reduce the number of jump calls to a minimum and use other altervatives like conditional execution. I have set BRANCH_COST to 40 and REGISTER_MOVE_COST to 0 (so it can use as many MOVs at it wants) and added the 2 insns (see below) to the .md file defining two conditional moves, one based on cond_exec and the other on if_then_else (is such thing possible?).
The problem is that the compiler cannot do any of the required optimizations.
Is this a limitation in ifcvt.c? Or is it me doing something wrong?




The insns added:

(define_insn "cond_exec_movsi"
  [(cond_exec
   (ne:CC (const_int 0) (reg:CC 32))
   (set (match_operand:SI 0 "register_operand" "=r")
	(match_operand:SI 1 "register_operand"  "r")
	  ) )]
  ""
  "CMOV %0, %1"
)

(define_insn "if_else_movsi"
  [(set (match_operand:SI 0 "register_operand" "=r")
   (if_then_else (ne:CC (const_int 0) (reg:CC 32))
    (match_operand:SI 1 "register_operand"  "r")
    (match_operand:SI 2 "register_operand"  "r")
		      ))]
  ""
  "CMOV_ELSE %0, %1, %2"
)



Thanks for your help,

Sami Khawam


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]