diff options
| author | Duncan Sands <baldrick@free.fr> | 2010-11-05 15:20:29 +0000 | 
|---|---|---|
| committer | Duncan Sands <baldrick@free.fr> | 2010-11-05 15:20:29 +0000 | 
| commit | 6c25ca4f2bff3bd7569170e209dc22ec9ba01361 (patch) | |
| tree | 2a98fe91d5f4cef921fa73be47ba2884c33aa200 | |
| parent | b7383e6d80af774880784587b0e7d7edceb4b295 (diff) | |
| download | bcm5719-llvm-6c25ca4f2bff3bd7569170e209dc22ec9ba01361.tar.gz bcm5719-llvm-6c25ca4f2bff3bd7569170e209dc22ec9ba01361.zip  | |
When passing a parameter using the 'byval' mechanism, inline code needs to be used
to perform the copy, which may be of lots of memory [*].  It would be good if the
fall-back code generated something reasonable, i.e. did the copy in a loop, rather
than vast numbers of loads and stores.  Add a note about this.  Currently target
specific code seems to always kick in so this is more of a theoretical issue rather
than a practical one now that X86 has been fixed.
[*] It's amazing how often people pass mega-byte long arrays by copy...
llvm-svn: 118275
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 2 | 
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 0840bd740be..5477e7bf60d 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -3283,6 +3283,8 @@ static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, DebugLoc dl,    // Expand memcpy to a series of load and store ops if the size operand falls    // below a certain threshold. +  // TODO: In the AlwaysInline case, if the size is big then generate a loop +  // rather than maybe a humongous number of loads and stores.    const TargetLowering &TLI = DAG.getTargetLoweringInfo();    std::vector<EVT> MemOps;    bool DstAlignCanChange = false;  | 

