This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][AArch64] Simplify ashl<mode>3 expander for SHORT modes
- From: Kyrill Tkachov <kyrylo dot tkachov at foss dot arm dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Marcus Shawcroft <marcus dot shawcroft at arm dot com>, Richard Earnshaw <Richard dot Earnshaw at arm dot com>, James Greenhalgh <james dot greenhalgh at arm dot com>
- Date: Wed, 27 Apr 2016 15:10:47 +0100
- Subject: [PATCH][AArch64] Simplify ashl<mode>3 expander for SHORT modes
- Authentication-results: sourceware.org; auth=none
Hi all,
The ashl<mode>3 expander for QI and HI modes is needlessly obfuscated.
The 2nd operand predicate accepts nonmemory_operand but the expand code
FAILs if it's not a CONST_INT. We can just demand a const_int_operand in
the predicate and remove the extra CONST_INT check.
Looking at git blame, it seems it was written that way as a result of some
other refactoring a few years back for an unrelated change.
Bootstrapped and tested on aarch64-none-linux-gnu.
Ok for trunk?
Thanks,
Kyrill
2016-04-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/aarch64/aarch64.md (ashl<mode>3, SHORT modes):
Use const_int_operand for operand 2 predicate. Simplify expand code
as a result.
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index d7a669e40f9d4ae863c3e48b73f0eebdecea340d..c08e89bc4eb7b51dbb1e5f893238824caeb5f317 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -3770,22 +3770,16 @@ (define_expand "<optab><mode>3"
(define_expand "ashl<mode>3"
[(set (match_operand:SHORT 0 "register_operand")
(ashift:SHORT (match_operand:SHORT 1 "register_operand")
- (match_operand:QI 2 "nonmemory_operand")))]
+ (match_operand:QI 2 "const_int_operand")))]
""
{
- if (CONST_INT_P (operands[2]))
- {
- operands[2] = GEN_INT (INTVAL (operands[2])
- & (GET_MODE_BITSIZE (<MODE>mode) - 1));
+ operands[2] = GEN_INT (INTVAL (operands[2]) & GET_MODE_MASK (<MODE>mode));
- if (operands[2] == const0_rtx)
- {
- emit_insn (gen_mov<mode> (operands[0], operands[1]));
- DONE;
- }
+ if (operands[2] == const0_rtx)
+ {
+ emit_insn (gen_mov<mode> (operands[0], operands[1]));
+ DONE;
}
- else
- FAIL;
}
)