// Determining the address of a TLS variable results in a function call in // certain TLS models. static bool memAddrUsesCTR(const PPCTargetMachine &TM, const Value *MemAddr) { const auto *GV = dyn_cast<GlobalValue>(MemAddr); if (!GV) { // Recurse to check for constants that refer to TLS global variables. if (const auto *CV = dyn_cast<Constant>(MemAddr)) for (const auto &CO : CV->operands()) if (memAddrUsesCTR(TM, CO)) return true; return false; } if (!GV->isThreadLocal()) return false; TLSModel::Model Model = TM.getTLSModel(GV); return Model == TLSModel::GeneralDynamic || Model == TLSModel::LocalDynamic; }
PPCSelectionDAGInfo::PPCSelectionDAGInfo(const PPCTargetMachine &TM) : TargetSelectionDAGInfo(TM.getDataLayout()) { }