|
9 | 9 | import com.dat3m.dartagnan.program.analysis.ReachingDefinitionsAnalysis;
|
10 | 10 | import com.dat3m.dartagnan.program.analysis.alias.AliasAnalysis;
|
11 | 11 | import com.dat3m.dartagnan.program.event.Event;
|
| 12 | +import com.dat3m.dartagnan.program.event.RegReader; |
12 | 13 | import com.dat3m.dartagnan.program.event.Tag;
|
13 | 14 | import com.dat3m.dartagnan.program.event.core.*;
|
14 | 15 | import com.dat3m.dartagnan.program.filter.Filter;
|
|
32 | 33 | import java.util.concurrent.ConcurrentHashMap;
|
33 | 34 | import java.util.stream.Collectors;
|
34 | 35 |
|
| 36 | +import static com.dat3m.dartagnan.configuration.Arch.RISCV; |
35 | 37 | import static com.dat3m.dartagnan.program.Register.UsageType.*;
|
36 | 38 | import static com.dat3m.dartagnan.program.event.Tag.FENCE;
|
37 | 39 | import static com.dat3m.dartagnan.program.event.Tag.VISIBLE;
|
@@ -231,6 +233,16 @@ public RelationAnalysis.Knowledge visitInternalDataDependency(DirectDataDependen
|
231 | 233 |
|
232 | 234 | private EventGraph computeInternalDependencies(Set<Register.UsageType> usageTypes) {
|
233 | 235 | Map<Event, Set<Event>> data = new HashMap<>();
|
| 236 | + program.getThreadEvents(RegReader.class).forEach(reader -> { |
| 237 | + ReachingDefinitionsAnalysis.Writers state = definitions.getWriters(reader); |
| 238 | + reader.getRegisterReads().forEach(read -> { |
| 239 | + if (usageTypes.contains(read.usageType())) { |
| 240 | + Register register = read.register(); |
| 241 | + state.ofRegister(register).getMayWriters() |
| 242 | + .forEach(writer -> data.computeIfAbsent(writer, x -> new HashSet<>()).add(reader)); |
| 243 | + } |
| 244 | + }); |
| 245 | + }); |
234 | 246 | if (usageTypes.contains(DATA)) {
|
235 | 247 | program.getThreadEvents(ExecutionStatus.class).forEach(execStatus -> {
|
236 | 248 | if (execStatus.doesTrackDep()) {
|
|
0 commit comments