C++: Sync identical files.

This commit is contained in:
Mathias Vorreiter Pedersen
2021-03-04 15:38:36 +01:00
parent 200d94777a
commit 8a4cc3b5c2
8 changed files with 55 additions and 0 deletions

View File

@@ -2055,6 +2055,13 @@ class ChiInstruction extends Instruction {
final predicate getUpdatedInterval(int startBit, int endBit) {
Construction::getIntervalUpdatedByChi(this, startBit, endBit)
}
/**
* Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`.
* This means that the `ChiPartialOperand` will not override the entire memory associated with the
* `ChiTotalOperand`.
*/
final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) }
}
/**

View File

@@ -194,6 +194,8 @@ predicate getIntervalUpdatedByChi(ChiInstruction chi, int startBit, int endBit)
*/
predicate getUsedInterval(Operand operand, int startBit, int endBit) { none() }
predicate chiOnlyPartiallyUpdatesLocation(ChiInstruction chi) { none() }
/** Gets a non-phi instruction that defines an operand of `instr`. */
private Instruction getNonPhiOperandDef(Instruction instr) {
result = getRegisterOperandDefinition(instr, _)

View File

@@ -2055,6 +2055,13 @@ class ChiInstruction extends Instruction {
final predicate getUpdatedInterval(int startBit, int endBit) {
Construction::getIntervalUpdatedByChi(this, startBit, endBit)
}
/**
* Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`.
* This means that the `ChiPartialOperand` will not override the entire memory associated with the
* `ChiTotalOperand`.
*/
final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) }
}
/**

View File

@@ -178,6 +178,17 @@ private module Cached {
)
}
cached
predicate chiOnlyPartiallyUpdatesLocation(ChiInstruction chi) {
exists(Alias::MemoryLocation location, OldInstruction oldInstruction |
oldInstruction = getOldInstruction(chi.getPartial()) and
location = Alias::getResultMemoryLocation(oldInstruction)
|
Alias::getStartBitOffset(location) != 0 or
Alias::getEndBitOffset(location) != 8 * location.getType().getByteSize()
)
}
/**
* Holds if `instr` is part of a cycle in the operand graph that doesn't go
* through a phi instruction and therefore should be impossible.

View File

@@ -2055,6 +2055,13 @@ class ChiInstruction extends Instruction {
final predicate getUpdatedInterval(int startBit, int endBit) {
Construction::getIntervalUpdatedByChi(this, startBit, endBit)
}
/**
* Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`.
* This means that the `ChiPartialOperand` will not override the entire memory associated with the
* `ChiTotalOperand`.
*/
final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) }
}
/**

View File

@@ -228,6 +228,9 @@ private module Cached {
cached
predicate getUsedInterval(Operand operand, int startBit, int endBit) { none() }
cached
predicate chiOnlyPartiallyUpdatesLocation(ChiInstruction chi) { none() }
/**
* Holds if `instr` is part of a cycle in the operand graph that doesn't go
* through a phi instruction and therefore should be impossible.

View File

@@ -2055,6 +2055,13 @@ class ChiInstruction extends Instruction {
final predicate getUpdatedInterval(int startBit, int endBit) {
Construction::getIntervalUpdatedByChi(this, startBit, endBit)
}
/**
* Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`.
* This means that the `ChiPartialOperand` will not override the entire memory associated with the
* `ChiTotalOperand`.
*/
final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) }
}
/**

View File

@@ -178,6 +178,17 @@ private module Cached {
)
}
cached
predicate chiOnlyPartiallyUpdatesLocation(ChiInstruction chi) {
exists(Alias::MemoryLocation location, OldInstruction oldInstruction |
oldInstruction = getOldInstruction(chi.getPartial()) and
location = Alias::getResultMemoryLocation(oldInstruction)
|
Alias::getStartBitOffset(location) != 0 or
Alias::getEndBitOffset(location) != 8 * location.getType().getByteSize()
)
}
/**
* Holds if `instr` is part of a cycle in the operand graph that doesn't go
* through a phi instruction and therefore should be impossible.