2016-11-05 12 views
0

私は以下のllvm irを持っており、デバッグしようとするときに一番の部分を費やしています。プログラムは単に私のWindowsマシン上で実行されるときにループでsegfaultをフリーズします。llvm irが予期したとおりに動作しない

; standard declaration etc 
%gen__list__0 = type { i8*, i64, i64 } 
%const_array_offset = type { i64, i64 } 
; other declaration etc 
@gbl_constant_59 = common constant [20 x i8] c"aaaaaaaaaaaaaaaaaaaa", align 
; more function declarations etc 

define internal %gen__list__0 @gen__fun__elevate12(%const_array_offset*) { 
entry: 
    %1 = alloca %gen__list__0 
    %2 = getelementptr %const_array_offset, %const_array_offset* %0, i32 0, i32 0 
    %3 = load i64, i64* %2 
    %4 = getelementptr %const_array_offset, %const_array_offset* %0, i32 0, i32 1 
    %5 = load i64, i64* %4 
    %6 = sub i64 %5, %3 
    %7 = mul i64 %6, i64 2 
    %8 = getelementptr %gen__list__0, %gen__list__0* %1, i32 0, i32 0 
    %9 = getelementptr %gen__list__0, %gen__list__0* %1, i32 0, i32 1 
    %10 = getelementptr %gen__list__0, %gen__list__0* %1, i32 0, i32 2 
    store i64 %6, i64* %9 
    store i64 %7, i64* %10 
    %11 = mul i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64), %7 
    %12 = call i8* @malloc(i64 %11) 
    store i8* %12, i8** %8 
    %13 = getelementptr %gen__list__0, %gen__list__0* %1, i32 0, i32 0 
    %14 = load i8*, i8** %13 
    %15 = getelementptr i8, i8* %14, i64 %6 
    %16 = getelementptr [20 x i8], [20 x i8]* @gbl_constant_59, i32 0, i64 %3 
    %17 = alloca i8* 
    store i8* %16, i8** %17 
    %18 = alloca i8* 
    store i8* %14, i8** %18 
    br label %bb2 

bb2:            ; preds = %bb3, %entry 
    %19 = load i8*, i8** %18 
    %20 = icmp ne i8* %19, %15 
    br i1 %20, label %bb3, label %bb4 

bb3:            ; preds = %bb2 
    %21 = load i8*, i8** %17 
    %22 = getelementptr i8, i8* %21, i32 1 
    store i8* %22, i8** %17 
    %23 = load i8*, i8** %18 
    %24 = getelementptr i8, i8* %23, i32 1 
    store i8* %24, i8** %18 
    br label %bb2 

bb4:            ; preds = %bb2 
    %25 = load %gen__list__0, %gen__list__0* %1 
    ret %gen__list__0 %25 
} 

私は間違っている可能性があります。

ループは、単に問題がLLCを通じてコードを置くことによって発見された、これは

for(iterator it = begin; it != end; ++it) { 
    //code in loop - atm blank 
} 
+1

'llc -debug'を実行しようとしましたか?コードがどこで停止しているかを確認するか、ここにデバッグ情報を投稿してください。 – ConsistentProgrammer

答えて

0

を実装して、ループの並べ替えのための

C++スタイルの擬似コードを実装します。明らかに一般的なリンケージでマークされた定数は、初期化器をゼロにすることができます。ここで@gbl_constant_59のようにゼロ初期化子なしでグローバル定数を使用するには、内部または外部の定数を宣言する必要があります。

関連する問題