https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114425

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Though, guess it would help if evrp avoided undesirable propagation here:
It is changing:
   <bb 2> :
   # DEBUG BEGIN_STMT
   _8 = .ADD_OVERFLOW (d_7(D), 0);
   _1 = IMAGPART_EXPR <_8>;
   _2 = (_Bool) _1;
   # DEBUG o => (int) _2
   # DEBUG BEGIN_STMT
   a.0_3 = a;
   _4 = (_BitInt(2000)) a.0_3;
   c.1_5 = c;
   m_11 = _4 * c.1_5;
   # DEBUG m => m_11
   # DEBUG BEGIN_STMT
   u_12 = (unsigned int) m_11;
   # DEBUG u => u_12
   # DEBUG BEGIN_STMT
-  o.2_6 = (unsigned int) _2;
+  o.2_6 = (unsigned int) _1;
   _13 = o.2_6 + u_12;
   return _13;

 }
which is surely possible because IMAGPART_EXPR of .{ADD,SUB,MUL}_OVERFLOW has
[0, 1]
range, but for such large/huge _BitInt IMAGPART_EXPR it extends the lifetime of
an expensive large variable rather than just being a boolean.

Reply via email to