forked from OSchip/llvm-project
CodeGenPrep: add separate hook say when GEPs should be used for sinking. NFCI.
Up to now, we've decided whether to sink address calculations using GEPs or normal arithmetic based on the useAA hook, but there are other reasons GEPs might be preferred. So this patch splits the two questions, with a default implementation falling back to useAA. llvm-svn: 371721
This commit is contained in:
parent
719087bbb7
commit
98534843fb
|
@ -274,6 +274,12 @@ public:
|
|||
/// scheduling, DAGCombine, etc.).
|
||||
virtual bool useAA() const;
|
||||
|
||||
/// \brief Sink addresses into blocks using GEP instructions rather than
|
||||
/// pointer casts and arithmetic.
|
||||
virtual bool addrSinkUsingGEPs() const {
|
||||
return useAA();
|
||||
}
|
||||
|
||||
/// Enable the use of the early if conversion pass.
|
||||
virtual bool enableEarlyIfConversion() const { return false; }
|
||||
|
||||
|
|
|
@ -4791,8 +4791,8 @@ bool CodeGenPrepare::optimizeMemoryInst(Instruction *MemoryInst, Value *Addr,
|
|||
<< " for " << *MemoryInst << "\n");
|
||||
if (SunkAddr->getType() != Addr->getType())
|
||||
SunkAddr = Builder.CreatePointerCast(SunkAddr, Addr->getType());
|
||||
} else if (AddrSinkUsingGEPs ||
|
||||
(!AddrSinkUsingGEPs.getNumOccurrences() && TM && TTI->useAA())) {
|
||||
} else if (AddrSinkUsingGEPs || (!AddrSinkUsingGEPs.getNumOccurrences() &&
|
||||
TM && SubtargetInfo->addrSinkUsingGEPs())) {
|
||||
// By default, we use the GEP-based method when AA is used later. This
|
||||
// prevents new inttoptr/ptrtoint pairs from degrading AA capabilities.
|
||||
LLVM_DEBUG(dbgs() << "CGP: SINKING nonlocal addrmode: " << AddrMode
|
||||
|
|
Loading…
Reference in New Issue