On 07.04.2012, at 08:57, John McCall <[email protected]> wrote:

> On Apr 6, 2012, at 11:26 PM, Jonathan Sauer wrote:
>>> The speedup from vectorization isn't very large, as we fall back to bytewise
>>> scanning when we hit a newline. There might be a way to avoid leaving the 
>>> sse
>>> loop but everything I tried didn't work out because a call to push_back
>>> clobbers xmm registers.
>>
>> Wouldn't that indicate a codegen bug? Judging from 
>> <http://www.agner.org/optimize/calling_conventions.pdf>,
>> most calling conventions specify that at least some xmm registers are 
>> scratch registers, i.e. must be
>> saved on the stack before calling a function and restored afterwards, if 
>> they should keep their value.
>> If that doesn't happen, it seems to me to be a bug in the compiler you used 
>> to compile clang.
>
> When we talk about clobbering a register, we usually assume that the compiler 
> understands that the register has been invalidated and is taking precautions. 
>  Usually those precautions are expensive, e.g. spilling the register to the 
> stack a lot.  In this case, Benjamin is saying that the performance impact of 
> vectorization isn't as large as it could be because the compiler has to spill 
> and rematerialize his vectors across a call that occurs at every newline.

Exactly. In this case llvm reloads the vectors with the '\r' and '\n'
patterns from memory on every iteration if we have a call in the loop,
killing performance. push_back may call crazy functions like malloc,
so the compiler cannot know if the %xmm registers still have their
value after the call.

It might be possible to use a preallocated buffer of some size and
leave the loop only when it's full, I didn't implement that so far for
simplicity's sake.

- Ben



> The only ABI I know of that makes any of the XMM registers non-scratch is 
> Win64.
>
> John.
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to