Project

General

Profile

Bug #6287

Updated by Alexander Kamkin over 8 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> 

Back