Make sure comparison widths match.
This commit is contained in:
parent
28168e0f57
commit
06e08dbdf0
28
elab_net.cc
28
elab_net.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: elab_net.cc,v 1.163 2005/05/10 05:10:40 steve Exp $"
|
#ident "$Id: elab_net.cc,v 1.164 2005/05/19 03:51:38 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -451,7 +451,7 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
|
||||||
(so that the eval_tree method can reduce constant
|
(so that the eval_tree method can reduce constant
|
||||||
expressions, including parameters) then turn those results
|
expressions, including parameters) then turn those results
|
||||||
into synthesized nets. */
|
into synthesized nets. */
|
||||||
NetExpr*lexp = left_->elaborate_expr(des, scope);
|
NetExpr*lexp = elab_and_eval(des, scope, left_);
|
||||||
if (lexp == 0) {
|
if (lexp == 0) {
|
||||||
cerr << get_line() << ": error: Cannot elaborate ";
|
cerr << get_line() << ": error: Cannot elaborate ";
|
||||||
left_->dump(cerr);
|
left_->dump(cerr);
|
||||||
|
|
@ -459,12 +459,7 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NetExpr*tmp = lexp->eval_tree()) {
|
NetExpr*rexp = elab_and_eval(des, scope, right_);
|
||||||
delete lexp;
|
|
||||||
lexp = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
NetExpr*rexp = right_->elaborate_expr(des, scope);
|
|
||||||
if (rexp == 0) {
|
if (rexp == 0) {
|
||||||
cerr << get_line() << ": error: Cannot elaborate ";
|
cerr << get_line() << ": error: Cannot elaborate ";
|
||||||
right_->dump(cerr);
|
right_->dump(cerr);
|
||||||
|
|
@ -472,10 +467,16 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NetExpr*tmp = rexp->eval_tree()) {
|
/* Choose the operand width to be the width of the widest
|
||||||
delete rexp;
|
self-determined operand. */
|
||||||
rexp = tmp;
|
unsigned operand_width = lexp->expr_width();
|
||||||
}
|
if (rexp->expr_width() > operand_width)
|
||||||
|
operand_width = rexp->expr_width();
|
||||||
|
|
||||||
|
lexp->set_width(operand_width);
|
||||||
|
lexp = pad_to_width(lexp, operand_width);
|
||||||
|
rexp->set_width(operand_width);
|
||||||
|
rexp = pad_to_width(rexp, operand_width);
|
||||||
|
|
||||||
NetNet*lsig = 0;
|
NetNet*lsig = 0;
|
||||||
NetNet*rsig = 0;
|
NetNet*rsig = 0;
|
||||||
|
|
@ -2460,6 +2461,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: elab_net.cc,v $
|
* $Log: elab_net.cc,v $
|
||||||
|
* Revision 1.164 2005/05/19 03:51:38 steve
|
||||||
|
* Make sure comparison widths match.
|
||||||
|
*
|
||||||
* Revision 1.163 2005/05/10 05:10:40 steve
|
* Revision 1.163 2005/05/10 05:10:40 steve
|
||||||
* Make sig-eq-constant optimization more effective.
|
* Make sig-eq-constant optimization more effective.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue