Forum: Digitale Signalverarbeitung / DSP / Machine Learning [Blackfin] GCC optimiert Hardware-Loop weg


von Gast (Gast)


Lesenswert?

Hallo,

ich hab ein Problem mit einer Funktion, die mir einfach wegoptimiert 
wird, sobald ich eine Hardware-Loop einbaue.

Mit -O1 kompiliert kommt das hier raus:
1
_myfunc:        
2
  LINK 0;
3
  P1 = R0;
4
  P2 = R2;
5
#APP
6
  i0 = P1;
7
  i1 = P2;
8
  r0 = 2;
9
  lc0 = r0;
10
  LOOP bla1 lc0;
11
  LOOP_BEGIN bla1;
12
  r0 = [i0++];
13
  [i1++] = r0;
14
  LOOP_END bla1;
15
  
16
#NO_APP
17
  UNLINK;
18
  rts;

Mit -O2 oder -O3 verschwindet das ganz. Es Funktioniert allerdings mit 
O0 und O1 auch nicht, d.h. der Compiler hat wohl recht ...

Weiß jemand, was ich falsch mache?

Grüße
Gast

von Gast (Gast)


Lesenswert?

Okay, Fehler gefunden ...

Die Clobberliste im GCC-Inline-Assembler war schuld. Der Compiler hat 
keine Register mehr gefunden, die er für übergebene Variablen verwenden 
kann und hat nur bei -O0 gemeckert. Bei -O2 ists einfach verschwunden 
ohne Fehler.

Sieht doch nach einem Bug vom bfin-gcc aus, oder?

Grüße
Gast

von Strubi (Gast)


Lesenswert?

Hi Gast,

duerfte wohl ein Bug sein. Am besten nochmal den Tracker 
(blackfin.uclinux.org) checken, ev. eine Toolchain selber aus dem 
SVN-Tree bauen (das ist allerdings kein Spass, mit dem offiziellen 
Build-Script), wenn's dann immer noch nicht tut, wuerde ich es gleich im 
Tracker eingeben. Mit Sourcecode, usw.

Gruss,

- Strubi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.