Hi Richard,
>> What's the motivation of splitting this into a equal type
>> and a non-equal type case? Simply only allow nop-conversions here
>> (tree_nop_conversion_p) and unconditionally emit
Done.
Thanks for the review and Comments. Implemented the modifications
as per you review comments.
Please review the modified patch and let me know if its okay?
Thanks,
Naveen
diff --git a/gcc/match.pd b/gcc/match.pd
index 75aa601..928a529 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -1896,10 +1896,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(for cmp (simple_comparison)
scmp (swapped_simple_comparison)
(simplify
- (cmp (bit_not@2 @0) CONSTANT_CLASS_P@1)
+ (cmp (convert?@3 (bit_not@2 @0)) CONSTANT_CLASS_P@1)
(if (single_use (@2)
- && (TREE_CODE (@1) == INTEGER_CST || TREE_CODE (@1) == VECTOR_CST))
- (scmp @0 (bit_not @1)))))
+ && (TREE_CODE (@1) == INTEGER_CST || TREE_CODE (@1) == VECTOR_CST)
+ && (TYPE_PRECISION (TREE_TYPE (@3)) == TYPE_PRECISION (TREE_TYPE (@2)))
+ && tree_nop_conversion_p (type, TREE_TYPE (@0)))
+ (with { tree newtype = TREE_TYPE (@1); }
+ (scmp (view_convert:newtype @0) (bit_not @1))))))
(for cmp (simple_comparison)
/* Fold (double)float1 CMP (double)float2 into float1 CMP float2. */