diff options
author | Devang Patel <dpatel@apple.com> | 2010-08-31 18:50:09 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2010-08-31 18:50:09 +0000 |
commit | 8480c2e314f6c01638ea16f32149417848352085 (patch) | |
tree | c65328cb1b461ce865bb8082ee75c663a338b348 /lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | |
parent | d4511e947ee1e89a4f199bfac0d401976930ccfe (diff) |
Remember byval argument's frame index during argument lowering and use this info to emit debug info.
Fixes Radar 8367011.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112623 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp b/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp index 77a2c86696..bed9c08ee9 100644 --- a/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp +++ b/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp @@ -254,6 +254,29 @@ 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. +/// This routine must be used after the argument's frame index is set. +/// If the argument does not have any entry in the map then assertion +/// will be raised. +int FunctionLoweringInfo::getByValArgumentFrameIndex(const Argument *A) { + assert (A->hasByValAttr() && "Argument does not have byval attribute!"); + DenseMap<const Argument *, int>::iterator I = + ByValArgFrameIndexMap.find(A); + assert (I != ByValArgFrameIndexMap.end() && + "Argument does not have assigned frame index!"); + return I->second; + +} + /// 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, |