Wie erkennt ein Compiler ob ein inline asm Befehl/Block per Konstantenfaltung wegoptimiert werden kann?



  • also ein rtdsc befehl kann ja schlecht wegoptimiert werden. muß ich jeden dieser befehle auch wenns nicht mega viele sind angeben? wahrscheinlich schon oder? und wie schauts aus wenn ich gcc-c als zielsprache verwende und inline asm erlaube? sieht nach nem haufen arbeit aus... kennt jemand befehlstabellen o.ä?



  • Kommt auf den Compiler drauf an.

    Manche können keinen inline ASM.

    Manche optimieren inline ASM gar nicht.

    Manche optimieren in inline ASM nur so dass die beobachtbaren Side-Effects sich nicht ändern (auch kein Reordering von Befehlen mit Side-Effects).

    Manche optimieren ziemlich agressiv, und verlangen die Verwendung von extra pragmas/... wenn etwas nicht optimiert werden darf. GCC fällt soweit ich weiss in diese Gruppe.

    Mit Ausnahme der Gruppe die inline ASM gar nicht optimieren, sollte ein Compiler natürlich die Befehle der Target-CPU kennen, d.h. wissen was sie tun.

    also ein rtdsc befehl kann ja schlecht wegoptimiert werden

    Wieso nicht? Wenn das Ergebnis nirgends verwendet wird, sehe ich keinen Grund, einem Compiler das Wegoptimieren von RDTSC per Default zu verbieten.
    Wenn es einen Grund gibt warum RDTSC drin bleiben muss obwohl der Ergebnis nicht verwendet wird, kann man es ja immer noch über pragmas/... verbieten. (Würde mich allerdings wundern wenn RDTSC Side-Effects hätte die für was gut sind, so dass man es unbedingt drinlassen wollen würde.)


Log in to reply