1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
use core:lang;
// TODO: A hash table with weak keys would be better here.
private WeakSet<Function> acquireFns on Compiler;
private WeakSet<Function> releaseFns on Compiler;
private WeakSet<Function> showFns on Compiler;
progvis:program:Barrier fnBarrier(Function f) on Compiler {
progvis:program:Barrier result = progvis:program:Barrier:none;
if (acquireFns.has(f))
result += progvis:program:Barrier:acquire;
if (releaseFns.has(f))
result += progvis:program:Barrier:release;
if (showFns.has(f))
result += progvis:program:Barrier:showCall;
result;
}
void registerBarrier(Function fn, progvis:program:Barrier type) on Compiler {
if (type.has(progvis:program:Barrier:acquire))
acquireFns.put(fn);
if (type.has(progvis:program:Barrier:release))
releaseFns.put(fn);
}
void registerShownBarrier(Function fn, progvis:program:Barrier type) on Compiler {
registerBarrier(fn, type);
showFns.put(fn);
}
|