[Gambas-user] JIT bug 6 :-)
Benoît Minisini
gambas at ...1...
Tue Jul 10 21:51:46 CEST 2012
In the fractal example, if I set the GB_JIT environment variable to get
a dump of the jit-compiled fractal computing loop, the program aborts:
gb.jit: using LLVM 3.1.
------------------------------------------------------------------------
gb.jit: beginning compiling FFractal.FastDrawFractalRect:
------------------------------------------------------------------------
------------------------------------------------------------------------
gb.jit: dumping function FFractal.FastDrawFractalRect:
------------------------------------------------------------------------
; ModuleID = 'jit_mod'
target datalayout =
"e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-pc-linux-gnu"
%ValueObject = type { i8*, i8*, i8* }
%Null = type { i64 }
%Object = type { i8*, i8* }
%Float = type { i64, double }
%Integer = type { i64, i32 }
%GosubStackNode = type { i16, %Value* }
%Value = type { i64, i64, i64, i64 }
%Void = type { i64, i64, i64, i64 }
%OBJECT = type { i8*, i64 }
%ValueFunction = type { i64, i8*, i8*, i8, i8, i16 }
define void @func_0_FFractal_3() {
entry:
%0 = load i8** inttoptr (i64 6647792 to i8**)
tail call void @GB.NewArray(i8* inttoptr (i64 6647856 to i8*), i32
16, i32 0)
%1 = load i8** inttoptr (i64 6647776 to i8**)
%2 = getelementptr i8* %1, i64 -256
%3 = bitcast i8* %2 to %ValueObject*
%4 = bitcast i8* %2 to %Null*
%5 = getelementptr %Null* %4, i64 0, i32 0
%6 = load i64* %5
%7 = icmp eq i64 %6, 15
%8 = getelementptr %ValueObject* %3, i64 0, i32 1
%9 = load i8** %8
%10 = getelementptr %ValueObject* %3, i64 0, i32 0
%11 = load i8** %10
%12 = insertvalue %Object undef, i8* %11, 0
%13 = insertvalue %Object %12, i8* %9, 1
%14 = select i1 %7, %Object { i8* inttoptr (i64 14338600 to i8*), i8*
null }, %Object %13
%15 = getelementptr i8* %1, i64 -224
%16 = bitcast i8* %15 to %Float*
%17 = getelementptr %Float* %16, i64 0, i32 1
%18 = load double* %17
%19 = getelementptr i8* %1, i64 -192
%20 = bitcast i8* %19 to %Float*
%21 = getelementptr %Float* %20, i64 0, i32 1
%22 = load double* %21
%23 = getelementptr i8* %1, i64 -160
%24 = bitcast i8* %23 to %Float*
%25 = getelementptr %Float* %24, i64 0, i32 1
%26 = load double* %25
%27 = getelementptr i8* %1, i64 -128
%28 = bitcast i8* %27 to %Integer*
%29 = getelementptr %Integer* %28, i64 0, i32 1
%30 = load i32* %29
%31 = getelementptr i8* %1, i64 -96
%32 = bitcast i8* %31 to %Integer*
%33 = getelementptr %Integer* %32, i64 0, i32 1
%34 = load i32* %33
%35 = getelementptr i8* %1, i64 -64
%36 = bitcast i8* %35 to %Integer*
%37 = getelementptr %Integer* %36, i64 0, i32 1
%38 = load i32* %37
%39 = getelementptr i8* %1, i64 -32
%40 = bitcast i8* %39 to %Integer*
%41 = getelementptr %Integer* %40, i64 0, i32 1
%42 = load i32* %41
%43 = load i8** inttoptr (i64 6647744 to i8**)
%44 = load i8** inttoptr (i64 6647768 to i8**)
%45 = getelementptr i8* %44, i64 704
%46 = icmp eq i8* %45, %43
br i1 %46, label %if.cont, label %if.then
if.then: ; preds = %entry
tail call void @stack_corrupted_abort()
unreachable
if.cont: ; preds = %entry
%47 = getelementptr i8* %0, i64 241
%48 = load i8* %47
%49 = and i8 %48, 1
%50 = icmp eq i8 %49, 0
%51 = sitofp i32 %30 to double
%52 = fmul double %51, %26
%53 = fadd double %18, %52
%54 = sitofp i32 %34 to double
%55 = fmul double %54, %26
%56 = fadd double %22, %55
%57 = icmp slt i32 %38, 5
%58 = icmp slt i32 %42, 5
%or.cond = and i1 %57, %58
br i1 %or.cond, label %if.cont265, label %if.cont18
if.cont18: ; preds = %if.cont
%59 = add i32 %38, -1
%60 = sitofp i32 %59 to double
%61 = fmul double %60, %26
%62 = fadd double %53, %61
%63 = add i32 %42, -1
%64 = sitofp i32 %63 to double
%65 = fmul double %64, %26
%66 = fadd double %56, %65
%67 = fcmp olt double %53, gbx3: APFloat.cpp :285 : void
interpretDecimal(llvm::StringRef::iterator, llvm::StringRef::iterator,
decimalInfo*): L'assertion « (*p == 'e' || *p == 'E') && "Invalid
character in significand" » a échoué.
--
Benoît Minisini
More information about the User
mailing list