This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/49263] SH Target: underutilized "TST #imm, R0" instruction
- From: "kkojima at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 12 Jun 2011 23:12:01 +0000
- Subject: [Bug target/49263] SH Target: underutilized "TST #imm, R0" instruction
- Auto-submitted: auto-generated
- References: <bug-49263-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49263
Kazumoto Kojima <kkojima at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target| |sh*-*-*
--- Comment #2 from Kazumoto Kojima <kkojima at gcc dot gnu.org> 2011-06-12 23:11:19 UTC ---
It looks that playing with the internal behavior of the combine
pass is a bit fragile. Perhaps an alternative way is to define
a peephole for tst #imm8,r0, something like:
;; A peephole for the TST immediate instruction.
(define_peephole2
[(set (match_operand:SI 2 "arith_reg_operand" "r")
(and:SI (match_operand:SI 0 "arith_reg_operand" "z")
(match_operand:SI 1 "const_int_operand" "i")))
(set (reg:SI T_REG) (eq:SI (match_dup 2) (const_int 0)))]
"TARGET_SH1
&& peep2_reg_dead_p (2, operands[2])
&& (satisfies_constraint_I08 (operands[1])
|| satisfies_constraint_K08 (operands[1]))"
[(set (reg:SI T_REG)
(eq:SI (and:SI (match_dup 0) (match_dup 1)) (const_int 0)))]
"
{
operands[1] = GEN_INT (INTVAL (operands[1]) & 0xff);
}")
which will work at -O2 or -fpeephole2, though there are pros
and cons of peephole approach.