forked from OSchip/llvm-project
parent
3b568aa4ed
commit
f4c6441b01
|
@ -441,34 +441,31 @@ namespace {
|
|||
lookup(Val)[BB] = Result;
|
||||
}
|
||||
|
||||
LVILatticeVal getBlockValue(Value *Val, BasicBlock *BB);
|
||||
bool getEdgeValue(Value *V, BasicBlock *F, BasicBlock *T,
|
||||
LVILatticeVal &Result,
|
||||
Instruction *CxtI = nullptr);
|
||||
bool hasBlockValue(Value *Val, BasicBlock *BB);
|
||||
LVILatticeVal getBlockValue(Value *Val, BasicBlock *BB);
|
||||
bool getEdgeValue(Value *V, BasicBlock *F, BasicBlock *T,
|
||||
LVILatticeVal &Result, Instruction *CxtI = nullptr);
|
||||
bool hasBlockValue(Value *Val, BasicBlock *BB);
|
||||
|
||||
// These methods process one work item and may add more. A false value
|
||||
// returned means that the work item was not completely processed and must
|
||||
// be revisited after going through the new items.
|
||||
bool solveBlockValue(Value *Val, BasicBlock *BB);
|
||||
bool solveBlockValueNonLocal(LVILatticeVal &BBLV,
|
||||
Value *Val, BasicBlock *BB);
|
||||
bool solveBlockValuePHINode(LVILatticeVal &BBLV,
|
||||
PHINode *PN, BasicBlock *BB);
|
||||
bool solveBlockValueSelect(LVILatticeVal &BBLV,
|
||||
SelectInst *S, BasicBlock *BB);
|
||||
bool solveBlockValueBinaryOp(LVILatticeVal &BBLV,
|
||||
Instruction *BBI, BasicBlock *BB);
|
||||
bool solveBlockValueCast(LVILatticeVal &BBLV,
|
||||
Instruction *BBI, BasicBlock *BB);
|
||||
void intersectAssumeBlockValueConstantRange(Value *Val, LVILatticeVal &BBLV,
|
||||
Instruction *BBI);
|
||||
// These methods process one work item and may add more. A false value
|
||||
// returned means that the work item was not completely processed and must
|
||||
// be revisited after going through the new items.
|
||||
bool solveBlockValue(Value *Val, BasicBlock *BB);
|
||||
bool solveBlockValueNonLocal(LVILatticeVal &BBLV, Value *Val, BasicBlock *BB);
|
||||
bool solveBlockValuePHINode(LVILatticeVal &BBLV, PHINode *PN, BasicBlock *BB);
|
||||
bool solveBlockValueSelect(LVILatticeVal &BBLV, SelectInst *S,
|
||||
BasicBlock *BB);
|
||||
bool solveBlockValueBinaryOp(LVILatticeVal &BBLV, Instruction *BBI,
|
||||
BasicBlock *BB);
|
||||
bool solveBlockValueCast(LVILatticeVal &BBLV, Instruction *BBI,
|
||||
BasicBlock *BB);
|
||||
void intersectAssumeBlockValueConstantRange(Value *Val, LVILatticeVal &BBLV,
|
||||
Instruction *BBI);
|
||||
|
||||
void solve();
|
||||
void solve();
|
||||
|
||||
ValueCacheEntryTy &lookup(Value *V) {
|
||||
return ValueCache[LVIValueHandle(V, this)];
|
||||
}
|
||||
ValueCacheEntryTy &lookup(Value *V) {
|
||||
return ValueCache[LVIValueHandle(V, this)];
|
||||
}
|
||||
|
||||
bool isOverdefined(Value *V, BasicBlock *BB) const {
|
||||
auto ODI = OverDefinedCache.find(BB);
|
||||
|
|
|
@ -361,10 +361,11 @@ static bool isRequiredForExecution(const SectionRef Section) {
|
|||
// may be zero for sections with content. In Obj files, SizeOfRawData
|
||||
// gives the section size, and VirtualSize is always zero. Hence
|
||||
// the need to check for both cases below.
|
||||
bool HasContent = (CoffSection->VirtualSize > 0)
|
||||
|| (CoffSection->SizeOfRawData > 0);
|
||||
bool IsDiscardable = CoffSection->Characteristics &
|
||||
(COFF::IMAGE_SCN_MEM_DISCARDABLE | COFF::IMAGE_SCN_LNK_INFO);
|
||||
bool HasContent =
|
||||
(CoffSection->VirtualSize > 0) || (CoffSection->SizeOfRawData > 0);
|
||||
bool IsDiscardable =
|
||||
CoffSection->Characteristics &
|
||||
(COFF::IMAGE_SCN_MEM_DISCARDABLE | COFF::IMAGE_SCN_LNK_INFO);
|
||||
return HasContent && !IsDiscardable;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue