&& INTVAL (operands[2]) == 1)
emit_insn (gen_slli_1 (operands[0], operands[1]));
else
- msp430_expand_helper (operands, \"__mspabi_slli\", true);
+ /* The const variants of mspabi shifts have larger code size than the
+ generic version, so use the generic version if optimizing for
+ size. */
+ msp430_expand_helper (operands, \"__mspabi_slli\", !optimize_size);
DONE;
}
)
(ashift:SI (match_operand:SI 1 "general_operand")
(match_operand:SI 2 "general_operand")))]
""
- "msp430_expand_helper (operands, \"__mspabi_slll\", true);
+ "msp430_expand_helper (operands, \"__mspabi_slll\", !optimize_size);
DONE;"
)
&& INTVAL (operands[2]) == 1)
emit_insn (gen_srai_1 (operands[0], operands[1]));
else
- msp430_expand_helper (operands, \"__mspabi_srai\", true);
+ msp430_expand_helper (operands, \"__mspabi_srai\", !optimize_size);
DONE;
}
)
(ashiftrt:SI (match_operand:SI 1 "general_operand")
(match_operand:SI 2 "general_operand")))]
""
- "msp430_expand_helper (operands, \"__mspabi_sral\", true);
+ "msp430_expand_helper (operands, \"__mspabi_sral\", !optimize_size);
DONE;"
)
&& INTVAL (operands[2]) == 1)
emit_insn (gen_srli_1 (operands[0], operands[1]));
else
- msp430_expand_helper (operands, \"__mspabi_srli\", true);
+ msp430_expand_helper (operands, \"__mspabi_srli\", !optimize_size);
DONE;
}
)
(lshiftrt:SI (match_operand:SI 1 "general_operand")
(match_operand:SI 2 "general_operand")))]
""
- "msp430_expand_helper (operands, \"__mspabi_srll\", true);
+ "msp430_expand_helper (operands, \"__mspabi_srll\", !optimize_size);
DONE;"
)
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Os" } */
+/* { dg-final { scan-assembler-not "__mspabi_sral_4" } } */
+/* { dg-final { scan-assembler-not "__mspabi_srll_4" } } */
+/* { dg-final { scan-assembler-not "__mspabi_slll_4" } } */
+/* { dg-final { scan-assembler "__mspabi_sral" } } */
+/* { dg-final { scan-assembler "__mspabi_srll" } } */
+/* { dg-final { scan-assembler "__mspabi_slll" } } */
+
+/* Ensure that SImode shifts by a constant amount do not use the const_variant
+ of the shift library code when optimizing for size. */
+
+long a;
+long b;
+long c;
+long d;
+unsigned long e;
+unsigned long f;
+
+void
+foo (void)
+{
+ a = b >> 4;
+ c = d << 4;
+ e = f >> 4;
+}