On Wed, 14 Oct 2015, Richard Biener wrote:
+/* Fold (a * (1 << b)) into (a << b) */
+(simplify
+ (mult:c @0 (convert? (lshift integer_onep@1 @2)))
+ (if (! FLOAT_TYPE_P (type)
+ && tree_nop_conversion_p (type, TREE_TYPE (@2)))
+ (lshift @0 (convert @2))))
You don't need/want to convert @2 (fold-const doesn't convert, does it?),
and you don't need to check for tree_nop_conversion_p.
I think for long x and x * (long)(1u << b) you need to do because the
result for b == 33 would be different.
- that check should be with TREE_TYPE (@1)
- 1u << 33 is undefined, isn't it?
x * (int)(1ul << b), which for b=33 should yield 0, would give the
undefined x << b so some check does seem needed indeed.
--
Marc Glisse