diff options
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | 23 | 
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp index 77a2c86..5ef6404 100644 --- a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp @@ -221,6 +221,7 @@ void FunctionLoweringInfo::clear() {  #endif    LiveOutRegInfo.clear();    ArgDbgValues.clear(); +  ByValArgFrameIndexMap.clear();    RegFixups.clear();  } @@ -254,6 +255,28 @@ unsigned FunctionLoweringInfo::CreateRegs(const Type *Ty) {    return FirstReg;  } +/// setByValArgumentFrameIndex - Record frame index for the byval +/// argument. This overrides previous frame index entry for this argument, +/// if any. +void FunctionLoweringInfo::setByValArgumentFrameIndex(const Argument *A,  +                                                      int FI) { +  assert (A->hasByValAttr() && "Argument does not have byval attribute!"); +  ByValArgFrameIndexMap[A] = FI; +} +   +/// getByValArgumentFrameIndex - Get frame index for the byval argument. +/// If the argument does not have any assigned frame index then 0 is +/// returned. +int FunctionLoweringInfo::getByValArgumentFrameIndex(const Argument *A) { +  assert (A->hasByValAttr() && "Argument does not have byval attribute!"); +  DenseMap<const Argument *, int>::iterator I =  +    ByValArgFrameIndexMap.find(A); +  if (I != ByValArgFrameIndexMap.end()) +    return I->second; +  DEBUG(dbgs() << "Argument does not have assigned frame index!"); +  return 0; +} +  /// AddCatchInfo - Extract the personality and type infos from an eh.selector  /// call, and add them to the specified machine basic block.  void llvm::AddCatchInfo(const CallInst &I, MachineModuleInfo *MMI,  | 
