[llvm] r258149 - Use larger write sizes for MCFillFragment.

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 19 10:04:50 PST 2016


I just realized I could write the test as attached, but it is probably
still not worth it.

Cheers,
Rafael

On 19 January 2016 at 12:47, Rafael Espindola via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: rafael
> Date: Tue Jan 19 11:47:48 2016
> New Revision: 258149
>
> URL: http://llvm.org/viewvc/llvm-project?rev=258149&view=rev
> Log:
> Use larger write sizes for MCFillFragment.
>
> This brings the pr26208 testcase down to 3.2 seconds. Not checking it in
> since it does create a 4GB .o file.
>
> Modified:
>     llvm/trunk/lib/MC/MCAssembler.cpp
>
> Modified: llvm/trunk/lib/MC/MCAssembler.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAssembler.cpp?rev=258149&r1=258148&r2=258149&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAssembler.cpp (original)
> +++ llvm/trunk/lib/MC/MCAssembler.cpp Tue Jan 19 11:47:48 2016
> @@ -488,9 +488,20 @@ static void writeFragment(const MCAssemb
>    case MCFragment::FT_Fill: {
>      ++stats::EmittedFillFragments;
>      const MCFillFragment &FF = cast<MCFillFragment>(F);
> +    uint8_t V = FF.getValue();
> +    const unsigned MaxChunkSize = 16;
> +    char Data[MaxChunkSize];
> +    memcpy(Data, &V, 1);
> +    for (unsigned I = 1; I < MaxChunkSize; ++I)
> +      Data[I] = Data[0];
>
> -    for (uint64_t I = 0, E = FF.getSize(); I != E; ++I)
> -      OW->write8(FF.getValue());
> +    uint64_t Size = FF.getSize();
> +    for (unsigned ChunkSize = MaxChunkSize; ChunkSize; ChunkSize /= 2) {
> +      StringRef Ref(Data, ChunkSize);
> +      for (uint64_t I = 0, E = Size / ChunkSize; I != E; ++I)
> +        OW->writeBytes(Ref);
> +      Size = Size % ChunkSize;
> +    }
>      break;
>    }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr26208.s
Type: application/octet-stream
Size: 364 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160119/08274de8/attachment.obj>


More information about the llvm-commits mailing list