+2009-07-18 Adam Nemet <anemet@caviumnetworks.com>
+
+ * combine.c (make_compound_operation) <SUBREG>: If force_to_mode
+ re-expanded the compound use gen_lowpart instead to convert to the
+ desired mode.
+
2009-07-18 Adam Nemet <anemet@caviumnetworks.com>
* combine.c (try_widen_shift_mode): Add COUNT, OUTER_CODE and
if (GET_CODE (newer) != SUBREG)
newer = make_compound_operation (newer, in_code);
+ /* force_to_mode can expand compounds. If it just re-expanded the
+ compound use gen_lowpart instead to convert to the desired
+ mode. */
+ if (rtx_equal_p (newer, x))
+ return gen_lowpart (GET_MODE (x), tem);
+
return newer;
}
+2009-07-18 Adam Nemet <anemet@caviumnetworks.com>
+
+ * gcc.target/mips/ext-2.c: New test.
+
2009-07-18 Adam Nemet <anemet@caviumnetworks.com>
* gcc.target/mips/octeon-exts-7.c: New test.
--- /dev/null
+/* Turn the truncate,zero_extend,lshiftrt sequence before the or into a
+ zero_extract. The truncate is due to TARGET_PROMOTE_PROTOTYPES, the
+ zero_extend to PROMOTE_MODE. */
+/* { dg-do compile } */
+/* { dg-options "-O isa_rev>=2 -mgp64" } */
+/* { dg-final { scan-assembler "\tdext\t" } } */
+/* { dg-final { scan-assembler-not "and" } } */
+/* { dg-final { scan-assembler-not "srl" } } */
+
+void
+f (unsigned char x, unsigned char *r)
+{
+ *r = 0x50 | (x >> 4);
+}