diff options
author | Reid Kleckner <rnk@google.com> | 2017-05-09 16:02:20 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2017-05-09 16:02:20 +0000 |
commit | 3a363fff7e1725caa840cc0b7323129f7370606a (patch) | |
tree | 5bcf747c7ea58bbea7a92489a9cde12f8f2edbda /llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | |
parent | 84075fddfff8163c2e799ebd55a27b7b37d161b6 (diff) | |
download | bcm5719-llvm-3a363fff7e1725caa840cc0b7323129f7370606a.tar.gz bcm5719-llvm-3a363fff7e1725caa840cc0b7323129f7370606a.zip |
Re-land "Use the frame index side table for byval and inalloca arguments"
This re-lands r302483. It was not the cause of PR32977.
llvm-svn: 302544
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 7a411640360..1d0717fb737 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -4676,7 +4676,8 @@ bool SelectionDAGBuilder::EmitFuncArgumentDbgValue( bool IsIndirect = false; Optional<MachineOperand> Op; // Some arguments' frame index is recorded during argument lowering. - if (int FI = FuncInfo.getArgumentFrameIndex(Arg)) + int FI = FuncInfo.getArgumentFrameIndex(Arg); + if (FI != INT_MAX) Op = MachineOperand::CreateFI(FI); if (!Op && N.getNode()) { @@ -4927,6 +4928,13 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) { return nullptr; } + // Byval arguments with frame indices were already handled after argument + // lowering and before isel. + const auto *Arg = + dyn_cast<Argument>(Address->stripInBoundsConstantOffsets()); + if (Arg && FuncInfo.getArgumentFrameIndex(Arg) != INT_MAX) + return nullptr; + SDValue &N = NodeMap[Address]; if (!N.getNode() && isa<Argument>(Address)) // Check unused arguments map. |