type = genActualType(lclTyp);
-#if SMALL_TREE_NODES
- if (callNode)
+ // If this is a no-op cast, just use op1.
+ if (!ovfl && (type == op1->TypeGet()) && (genTypeSize(type) == genTypeSize(lclTyp)))
{
- op1 = gtNewCastNodeL(type, op1, uns, lclTyp);
+ // Nothing needs to change
}
+ // Work is evidently required, add cast node
else
-#endif // SMALL_TREE_NODES
{
- op1 = gtNewCastNode(type, op1, uns, lclTyp);
- }
+#if SMALL_TREE_NODES
+ if (callNode)
+ {
+ op1 = gtNewCastNodeL(type, op1, uns, lclTyp);
+ }
+ else
+#endif // SMALL_TREE_NODES
+ {
+ op1 = gtNewCastNode(type, op1, uns, lclTyp);
+ }
- if (ovfl)
- {
- op1->gtFlags |= (GTF_OVERFLOW | GTF_EXCEPT);
+ if (ovfl)
+ {
+ op1->gtFlags |= (GTF_OVERFLOW | GTF_EXCEPT);
+ }
}
+
impPushOnStack(op1, tiRetVal);
break;