2017-01-11 17 views
0

下の図の左側にCコードが表示され、右側の部分には最適化されていないLLVM IR形式が表示されています。 IRにMemoryDe​​pendenceAnalysisを実行読み取り後の依存関係LLVMメモリ依存解析

The Figure

は、メモリの依存関係を検索します。 1つの依存関係が、元のコードとそのIR同等物の両方に、矢印線を使用して示されています。我々が持っている、解析からの出力で

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 

:ここ

が挙げ依存性を含んでいる分析の出力である

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

変数aはその両方のステートメントで読み込まれますRAR依存性です。コードスニペット(LLVM-3.9.0、lib/Analysis/MemoryDe​​pendenceAnalysis.cpp:549-551)に示されているように、LLVMはこれらのロードを相互のデフとみなします。どういう意味ですか?

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

また、分析はCソースではなくIRで実行されることに注意してください。

答えて

0

私はLLVMを一度も使用しませんでしたが、提供されたCコードとLLVM IRに基づいて、a変数が2回読み込まれます。私は間違いを見ない。私は間違っていますか?

enter image description here