diff options
author | Paul Robinson <paul.robinson@sony.com> | 2019-09-30 15:08:38 +0000 |
---|---|---|
committer | Paul Robinson <paul.robinson@sony.com> | 2019-09-30 15:08:38 +0000 |
commit | 527815f5b087be6b31d0cb21752c581d26769c8a (patch) | |
tree | fed86468f11b9436725e629c306fb95436337fbe /llvm/lib/CodeGen/StackProtector.cpp | |
parent | 57dbfe194cb53b25246a40e8a73e5c77cc804619 (diff) | |
download | bcm5719-llvm-527815f5b087be6b31d0cb21752c581d26769c8a.tar.gz bcm5719-llvm-527815f5b087be6b31d0cb21752c581d26769c8a.zip |
[SSP] [2/3] Refactor an if/dyn_cast chain to switch on opcode. NFC
Differential Revision: https://reviews.llvm.org/D67844
llvm-svn: 373219
Diffstat (limited to 'llvm/lib/CodeGen/StackProtector.cpp')
-rw-r--r-- | llvm/lib/CodeGen/StackProtector.cpp | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/llvm/lib/CodeGen/StackProtector.cpp b/llvm/lib/CodeGen/StackProtector.cpp index dc215a033fc..7cce1c597ff 100644 --- a/llvm/lib/CodeGen/StackProtector.cpp +++ b/llvm/lib/CodeGen/StackProtector.cpp @@ -158,33 +158,42 @@ bool StackProtector::ContainsProtectableArray(Type *Ty, bool &IsLarge, bool StackProtector::HasAddressTaken(const Instruction *AI) { 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)) + case Instruction::BitCast: + case Instruction::GetElementPtr: + case Instruction::Select: + if (HasAddressTaken(I)) 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)) return true; - } else if (const GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(U)) { - if (HasAddressTaken(GEP)) - return true; - } else if (const BitCastInst *BI = dyn_cast<BitCastInst>(U)) { - if (HasAddressTaken(BI)) - return true; + break; + } + default: + break; } } return false; |