Wie kann man die automatische "pass by pointer" -Optimierung in clang ++ deaktivieren?

8

Ich habe eine Funktion

%Vor%

Wenn ich es kompiliere, sehe ich, dass clang seine Signatur in

ändert %Vor%

Es ist unbequem, weil ich diese Funktion von irgendeinem llvm IR-Code direkt verwende. Wie kann man diese Optimierung verbieten?

Bearbeiten: Minimales Arbeitsbeispiel:

%Vor%

Durch die folgende Befehlszeile:

%Vor%

Das Function wird übersetzt in:

%Vor%     
Necto 01.07.2014, 12:44
quelle

1 Antwort

2

Sie müssen die Option -mdisable-fp-elim

hinzufügen
  

Deaktivieren Sie die Eliminierung der Bildzeigeroptimierung.

Hier, wo ich diese Option finde: Option kling

Und hier ist eine gute Erklärung dafür, warum clang das tut: Option verstehen 'Rahmenzeiger weglassen'

* Bearbeiten: *

Nach einiger Inspektion habe ich folgendes gefunden:

  • Ihr Objekt wird nach dem Kompilieren korrekt übergeben:

Beispiel:

%Vor%

Ausgabe:

  

Objekt erstellt

     

Objektkopie erstellt

     

Ich bin eine Objektkopie

     

Ich bin ein Objekt

  • Zweiter Punkt:

können Sie direkt nach dem Funktionsprototyp sehen

%Vor%

Damit erhält die Funktion die Kopie des Objekts. Sie können in der main die Kopie des Objekts sehen

Ihr Code scheint also gut zu funktionieren;)

    
Vink 01.07.2014 13:29
quelle