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