Bug #6287
Updated by Alexander Kamkin about 9 years ago
For attached code six (6) code paths are produced: 1: L1.Event=MISS, L2.Event=MISS, pmem.condition=0, pmem.dependent!=1, pmem.STOP +2: 2: L1.Event=MISS, L2.Event=MISS, pmem.condition=0, pmem.dependent=1, pmem.STOP+ pmem.STOP +3: 3: L1.Event=MISS, L2.Event=MISS, pmem.condition!=0, pmem.dependent!=1, pmem.STOP+ pmem.STOP 4: L1.Event=MISS, L2.Event=MISS, pmem.condition!=0, pmem.dependent=1, pmem.STOP 5: L1.Event=MISS, L2.Event=HIT, pmem.STOP 6: L1.Event=HIT, pmem.STOP None of them being pruned with isFeasible() check while paths 2 and 3 are infeasible. <pre> read = { l1Tag = va.vaddress<47..12>; l2Tag = va.vaddress<47..17>; if L1(va).hit then l1Entry = L1(va); line = l1Entry.DATA; else if L2(va).hit then l2Entry = L2(va); line = l2Entry.DATA; // Fill L1. l1Entry.TAG = l1Tag; l1Entry.DATA = line; L1(va) = l1Entry; else pa.addrdesc.paddress.physicaladdress<1..0> = 0b00; tempValue = MEM(pa); line<(64 * 0 + 63)..(64 * 0)> = tempValue; pa.addrdesc.paddress.physicaladdress<1..0> = 0b01; tempValue = MEM(pa); line<(64 * 1 + 63)..(64 * 1)> = tempValue; pa.addrdesc.paddress.physicaladdress<1..0> = 0b10; tempValue = MEM(pa); line<(64 * 2 + 63)..(64 * 2)> = tempValue; pa.addrdesc.paddress.physicaladdress<1..0> = 0b11; tempValue = MEM(pa); line<(64 * 3 + 63)..(64 * 3)> = tempValue; // Fill L2. l2Entry.TAG = l2Tag; l2Entry.DATA = line; L2(va) = l2Entry; // Fill L1. l1Entry.TAG = l1Tag; l1Entry.DATA = line; L1(va) = l1Entry; if condition != 0 then dependent = 1; else dependent = 0; endif; if dependent == 1 then temp.value = 0; endif; endif; endif; data = line<(64 * va.vaddress<4..3> + 63)..(64 * va.vaddress<4..3>)>; } </pre>