tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] inline assembly and optimization passes


From: Thomas Preud'homme
Subject: Re: [Tinycc-devel] inline assembly and optimization passes
Date: Fri, 20 Sep 2013 15:50:28 +0200
User-agent: KMail/4.10.5 (Linux/3.10-1-amd64; KDE/4.10.5; x86_64; ; )

Le vendredi 20 septembre 2013 03:08:10 Sylvain BERTRAND a écrit :
> Hi,
> 
> ----
> 
> I wonder if the internals of tinycc can easily supports basic
> optimization passes. The idea is not to compete with gcc and its
> hundred of passes, but my guess is that very few optimization
> passes would be required to give a significant performance boost
> to generated code. Just need to select the "right" ones...
> 
> As a C writer, I have been thinking about the "variable aliasing"
> pass over a compilation unit. Because a lot of code use many C
> variables to reference the same actual variable to make code more
> readable. Then in my ignorant mind I see a lot of wasted
> registers and stack space and a significant performance loss at a
> global scale. Wrong?

I'm not familiar with optimization but I would guess it would have a non 
negligeable impact on tcc's performance. If you want basic optimization you 
could try -O1 switch of gcc or clang. Unless the cost of an optimization is 
negligeable, I think adding it to tcc is not a good idea. Many people are 
interested in tcc because of its fast compilation so I would say it's more 
important to keep it fast than to make the generated code better.

> 
> I thought about a "constant folding" pass but I'm not convince
> this pass would give a significant boost over my perception of
> general C code.

There is constant propagation in tcc, I don't know if it is what you are 
talking about.

> 
> ----
> 
> Another thing is about inline assembly. Indeed, I happened to
> write some code without a libc for x86-64, namely directly wired
> to linux syscalls. Quickly the need of assembly caught up. I
> could use an assembler (gas, yasm...) but then I would pay the
> price of the C calling convention (prolog/epilog/parameters
> passing) and the call/ret. The whole point of inline assembly is
> to avoid to "dance" too much with the registers/stack because of
> the function call. On modern architectures, is the performance
> loss of such a "dance" worth the complexity of inline
> assembly?
> 
> I know it would mean, at least for x86-64, to write an
> assembler/use an external assembler in/for the architecture
> backend.
> 
> On that subject, to work around the complexity of an inline
> assembly infrastructure, I notice that it seems inline assembly
> is interesting in not that many cases. We could imagine to extend
> per architecture the C language with builtin functions/new
> operators/keywords. For instance for atomic operations, syscalls...
> Am I missing a case we would really want which makes this work
> around really and obviously impractical?

There is already inline assembly in tcc for i386 and x86-64. However, the 
support is not fully complete.

> 
> ----
> 
> Of course, all that is from my perspective, meaning with
> 0-experience on compiler programming. The idea is to achieve
> a reasonable global performance level compared to gcc on
> "classic" system loads. To lower the distance, code "hotspots"
> would be written in assembly (cf ffmpeg).
> 
> thanks,

Best regards,

Thomas

Attachment: signature.asc
Description: This is a digitally signed message part.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]