Hello!
I was playing a bit with TARGET_SHIFT_TRUNCATION_MASK on x86 in the
hope that redundant masking would get eliminated from:
int test (int a, int c)
{
return a << (c & 0x1f);
}
The macro was defined as:
+/* Implement TARGET_SHIFT_TRUNCATION_MASK. */
+static unsigned HOST_WIDE_INT
+ix86_shift_truncation_mask (enum machine_mode mode)
+{
+ switch (mode)
+ {
+ case QImode:
+ case HImode:
+ case SImode:
+ return 31;
+
+ case DImode:
+ if (TARGET_64BIT)
+ return 63;
+
+ default:
+ return 0;
+ }
+}
However, I was not able to get rid of the masking "and".
Uros.