2017-01-11 4 views
0

In der folgenden Abbildung sehen Sie auf der linken Seite den C-Code, während der Teil auf der rechten Seite die nicht optimierte LLVM IR-Form zeigt.Lesen nach Lesen Abhängigkeit in LLVM Speicherabhängigkeitsanalyse

The Figure

Lauf MemoryDependenceAnalysis auf dem IR findet die Speicher Abhängigkeiten. Eine Abhängigkeit wird sowohl in dem ursprünglichen Code als auch in dessen IR-Äquivalent unter Verwendung der Pfeillinie gezeigt.

Hier ist der Ausgang der Analyse ist es, die die erwähnte Abhängigkeit beinhaltet:

Printing analysis 'Print MemDeps of function' for function 'main': 
    Def from: %retval = alloca i32, align 4 
    store i32 0, i32* %retval, align 4 

    Def from: %d = alloca i32, align 4 
    store i32 0, i32* %d, align 4 

    Def from: %a = alloca i32, align 4 
    store i32 0, i32* %a, align 4 

    Def from: store i32 0, i32* %a, align 4 
    %0 = load i32, i32* %a, align 4 

    Def from: %b = alloca i32, align 4 
    store i32 %0, i32* %b, align 4 

    Def from: %0 = load i32, i32* %a, align 4 
    %1 = load i32, i32* %a, align 4 

    Def from: store i32 0, i32* %d, align 4 
    %2 = load i32, i32* %d, align 4 

    Def from: %c = alloca i32, align 4 
    store i32 %add, i32* %c, align 4 

    Def from: %2 = load i32, i32* %d, align 4 
    store i32 2, i32* %d, align 4 

Im Ergebnis der Analyse haben wir:

Def from: %0 = load i32, i32* %a, align 4 
    %1 = load i32, i32* %a, align 4 

Die Variable a wird in beiden Aussagen lesen, ist eine RAR-Abhängigkeit. Wie im Code-Snippet (LLVM-3.9.0 unter lib/Analysis/MemoryDependenceAnalysis.cpp: 549-551) gezeigt, betrachtet LLVM diese Lasten als voneinander abhängig. Was bedeutet das?

// Must aliased loads are defs of each other. 
    if (R == MustAlias) 
     return MemDepResult::getDef(Inst); 

Beachten Sie auch, dass die Analyse auf der IR, nicht auf der C-Quelle durchgeführt wird.

Antwort

0

Ich habe noch nie LLVM verwendet, aber basierend auf Ihrem bereitgestellten C-Code und LLVM IR wird die a Variable 2 Mal gelesen. Ich sehe keinen Fehler. Darf ich mich irren?

enter image description here