From: sandeep Date: Wed, 14 Jun 2000 18:03:25 +0000 (+0000) Subject: fixed problem with union substitution X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=8c0409db152a0307ef4f7769c5183e1ab2c28e6d;p=fw%2Fsdcc fixed problem with union substitution git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@276 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/src/SDCCcse.c b/src/SDCCcse.c index 2af7f3ee..f1f91676 100644 --- a/src/SDCCcse.c +++ b/src/SDCCcse.c @@ -1243,13 +1243,14 @@ int cseBBlock ( eBBlock *ebb, int computeOnly, /* do some algebraic optimizations if possible */ algebraicOpts (ic); - if (POINTER_GET(ic)) fixUpTypes(ic); while (constFold(ic,cseSet)); /* small klugde */ if (POINTER_GET(ic) && !IS_PTR(operandType(IC_LEFT(ic)))) { setOperandType(IC_LEFT(ic), aggrToPtr(operandType(IC_LEFT(ic)),FALSE)); + fixUpTypes(ic); + } if (POINTER_SET(ic) && !IS_PTR(operandType(IC_RESULT(ic)))) { setOperandType(IC_RESULT(ic), @@ -1357,6 +1358,9 @@ int cseBBlock ( eBBlock *ebb, int computeOnly, IS_ITEMP(IC_RESULT(ic)) && ! computeOnly) { applyToSet (cseSet,findPrevIc,ic,&pdic); + if (pdic && checkType(operandType(IC_RESULT(pdic)), + operandType(IC_RESULT(ic))) != 1) + pdic = NULL; } /* if found then eliminate this and add to*/