diff options
Diffstat (limited to 'lib/IR')
| -rw-r--r-- | lib/IR/Instructions.cpp | 11 | 
1 files changed, 11 insertions, 0 deletions
| diff --git a/lib/IR/Instructions.cpp b/lib/IR/Instructions.cpp index 2e7cad103c12..90cb2c26e082 100644 --- a/lib/IR/Instructions.cpp +++ b/lib/IR/Instructions.cpp @@ -822,6 +822,17 @@ void CallBrInst::init(FunctionType *FTy, Value *Fn, BasicBlock *Fallthrough,    setName(NameStr);  } +void CallBrInst::updateArgBlockAddresses(unsigned i, BasicBlock *B) { +  assert(getNumIndirectDests() > i && "IndirectDest # out of range for callbr"); +  if (BasicBlock *OldBB = getIndirectDest(i)) { +    BlockAddress *Old = BlockAddress::get(OldBB); +    BlockAddress *New = BlockAddress::get(B); +    for (unsigned ArgNo = 0, e = getNumArgOperands(); ArgNo != e; ++ArgNo) +      if (dyn_cast<BlockAddress>(getArgOperand(ArgNo)) == Old) +        setArgOperand(ArgNo, New); +  } +} +  CallBrInst::CallBrInst(const CallBrInst &CBI)      : CallBase(CBI.Attrs, CBI.FTy, CBI.getType(), Instruction::CallBr,                 OperandTraits<CallBase>::op_end(this) - CBI.getNumOperands(), | 
