Lost extrema values cause AWLF unit test prd2AKD.sac to fail
Bugzilla Link | 984 |
Created on | Jun 19, 2012 21:45 |
Resolution | FIXED |
Resolved on | Jul 08, 2012 19:07 |
Version | svn |
OS | Linux |
Architecture | PC |
Extended Description
A simple unit test for AWLF now fails, due to lost extrema. The problem is that, if I compile with this: cd ~/sac/testsuite/optimizations/awlf sac2c prd2AKD.sac -doawlf -nowlf -nocyc -bopt:glf >crud.glf I get this code fragment in crud.glf: _flat_5 = [ shp ]; _idc_46, _icc_34_pred = _non_neg_val_V_( _flat_5); ... _flat_0 = [ shp ]; What we want is to have all references to _flat_5 that follow the _non_neg_val_V_( _flat_5) to become references to _idc_46. The assignment of _flat_0 is, in a sense, a violation of this, because _flat_0 does not carry the AVIS_MIN generated by the guard. The code that inserts the guards is correct as it stands. The _flat_0 assign exists by the end of TC (phase 7). So, we want to get rid of the common expression before we insert constraints, so we clearly need a CSE/DCR traversal in CWC, just before ICC. Ah, you mean, like this? cse : Applying common subexpression elimination dcr : Removing dead code icc : Inserting Conformity Checks Hmmm. Let's look at what we have in iota() after that DCR: _flat_5 = [ shp ]; _flat_4 = [ shp ]; _flat_3 = 0; _flat_2 = _mul_SxV_( _flat_3, _flat_4); _flat_1 = 0; _flat_0 = [ shp ]; Not exactly what we were hoping for. CSE never traverses iota(), but it does traverse a lot of wrappers: grep CSEfundef crud.cwcdcr CSEfundef: CSE: Begin traversing (wrapper) partitionIntersectMax CSEfundef: CSE: Done traversing (wrapper) partitionIntersectMax CSEfundef: CSE: Begin traversing (wrapper) partitionSlicer CSEfundef: CSE: Done traversing (wrapper) partitionSlicer CSEfundef: CSE: Begin traversing (wrapper) isPartitionIntersectNull CSEfundef: CSE: Done traversing (wrapper) isPartitionIntersectNull CSEfundef: CSE: Begin traversing (wrapper) partitionIntersectMin CSEfundef: CSE: Done traversing (wrapper) partitionIntersectMin CSEfundef: CSE: Begin traversing (wrapper) adjustLacFunParams CSEfundef: CSE: Done traversing (wrapper) adjustLacFunParams CSEfundef: CSE: Begin traversing (wrapper) main CSEfundef: CSE: Done traversing (wrapper) main CSEfundef: CSE: Begin traversing (wrapper) prod CSEfundef: CSE: Done traversing (wrapper) prod CSEfundef: CSE: Begin traversing (wrapper) adjustLacFunParamsReshape CSEfundef: CSE: Done traversing (wrapper) adjustLacFunParamsReshape CSEfundef: CSE: Begin traversing (wrapper) eq CSEfundef: CSE: Done traversing (wrapper) eq CSEfundef: CSE: Begin traversing (wrapper) eq CSEfundef: CSE: Done traversing (wrapper) eq CSEfundef: CSE: Begin traversing (wrapper) eq CSEfundef: CSE: Done traversing (wrapper) eq CSEfundef: CSE: Begin traversing (wrapper) eq CSEfundef: CSE: Done traversing (wrapper) eq CSEfundef: CSE: Begin traversing (wrapper) eq CSEfundef: CSE: Done traversing (wrapper) eq CSEfundef: CSE: Begin traversing (wrapper) gridFiller CSEfundef: CSE: Done traversing (wrapper) gridFiller CSEfundef: CSE: Begin traversing (wrapper) zero CSEfundef: CSE: Done traversing (wrapper) zero CSEfundef: CSE: Begin traversing (wrapper) zero CSEfundef: CSE: Done traversing (wrapper) zero CSEfundef: CSE: Begin traversing (wrapper) zero CSEfundef: CSE: Done traversing (wrapper) zero CSEfundef: CSE: Begin traversing (wrapper) zero CSEfundef: CSE: Done traversing (wrapper) zero CSEfundef: CSE: Begin traversing (wrapper) zero CSEfundef: CSE: Done traversing (wrapper) zero CSEfundef: CSE: Begin traversing (wrapper) partitionMax CSEfundef: CSE: Done traversing (wrapper) partitionMax CSEfundef: CSE: Begin traversing function iota__Cond_0 CSEfundef: CSE: Done traversing function iota__Cond_0 I am not sure where to go from here. This unit test did work properly some time ago.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information