Author: Paul Robinson Date: 2019-11-21T15:41:34-08:00 New Revision: 76817ab1e1043d269f415928fabd3f4a533b7e83
URL: https://github.com/llvm/llvm-project/commit/76817ab1e1043d269f415928fabd3f4a533b7e83 DIFF: https://github.com/llvm/llvm-project/commit/76817ab1e1043d269f415928fabd3f4a533b7e83.diff LOG: Merging r373219: ------------------------------------------------------------------------ r373219 | probinson | 2019-09-30 08:08:38 -0700 (Mon, 30 Sep 2019) | 3 lines [SSP] [2/3] Refactor an if/dyn_cast chain to switch on opcode. NFC Differential Revision: https://reviews.llvm.org/D67844 ------------------------------------------------------------------------ Added: Modified: llvm/lib/CodeGen/StackProtector.cpp Removed: ################################################################################ diff --git a/llvm/lib/CodeGen/StackProtector.cpp b/llvm/lib/CodeGen/StackProtector.cpp index aa55bb3506c3..68e902c2780c 100644 --- a/llvm/lib/CodeGen/StackProtector.cpp +++ b/llvm/lib/CodeGen/StackProtector.cpp @@ -159,33 +159,42 @@ bool StackProtector::ContainsProtectableArray(Type *Ty, bool &IsLarge, bool StackProtector::HasAddressTaken(const Instruction *AI, SmallPtrSetImpl<const PHINode *> &VisitedPHIs) { for (const User *U : AI->users()) { - if (const StoreInst *SI = dyn_cast<StoreInst>(U)) { - if (AI == SI->getValueOperand()) + const auto *I = cast<Instruction>(U); + switch (I->getOpcode()) { + case Instruction::Store: + if (AI == cast<StoreInst>(I)->getValueOperand()) return true; - } else if (const PtrToIntInst *SI = dyn_cast<PtrToIntInst>(U)) { - if (AI == SI->getOperand(0)) + break; + case Instruction::PtrToInt: + if (AI == cast<PtrToIntInst>(I)->getOperand(0)) return true; - } else if (const CallInst *CI = dyn_cast<CallInst>(U)) { + break; + case Instruction::Call: { // Ignore intrinsics that are not calls. TODO: Use isLoweredToCall(). + const auto *CI = cast<CallInst>(I); if (!isa<DbgInfoIntrinsic>(CI) && !CI->isLifetimeStartOrEnd()) return true; - } else if (isa<InvokeInst>(U)) { + break; + } + case Instruction::Invoke: return true; - } else if (const SelectInst *SI = dyn_cast<SelectInst>(U)) { - if (HasAddressTaken(SI, VisitedPHIs)) + case Instruction::BitCast: + case Instruction::GetElementPtr: + case Instruction::Select: + if (HasAddressTaken(I, VisitedPHIs)) return true; - } else if (const PHINode *PN = dyn_cast<PHINode>(U)) { + break; + case Instruction::PHI: { // Keep track of what PHI nodes we have already visited to ensure // they are only visited once. + const auto *PN = cast<PHINode>(I); if (VisitedPHIs.insert(PN).second) if (HasAddressTaken(PN, VisitedPHIs)) return true; - } else if (const GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(U)) { - if (HasAddressTaken(GEP, VisitedPHIs)) - return true; - } else if (const BitCastInst *BI = dyn_cast<BitCastInst>(U)) { - if (HasAddressTaken(BI, VisitedPHIs)) - return true; + break; + } + default: + break; } } return false; _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits