Skip to content

Instantly share code, notes, and snippets.

@sklam
Created March 25, 2013 16:10
Show Gist options
  • Save sklam/5238271 to your computer and use it in GitHub Desktop.
Save sklam/5238271 to your computer and use it in GitHub Desktop.
numba-bytecode->llvm test3 dump
define %unknown* @test3(%unknown* %a, %unknown* %b, %unknown* %c) {
block0:
%0 = load %unknown** @numba.builtin.range
%1 = call %unknown* @numba.abstract.const.i32(i32 1)
%2 = call %unknown* @numba.abstract.pack.unknown_p.unknown_p(%unknown* %1, %unknown* %a)
%3 = call %unknown* @numba.abstract.call.unknown_p.unknown_p.unknown_p(%unknown* %0, %unknown* %2, %unknown* null)
%4 = call %unknown* @numba.abstract.get_iter.unknown_p(%unknown* %3)
br label %block16
block16: ; preds = %block45, %block0
%.02 = phi %unknown* [ null, %block0 ], [ %.13, %block45 ]
%.01 = phi %unknown* [ null, %block0 ], [ %5, %block45 ]
%.0 = phi %unknown* [ %c, %block0 ], [ %.1, %block45 ]
%5 = call %unknown* @numba.abstract.iter.next.unknown_p(%unknown* %4)
%6 = call i1 @numba.abstract.iter.empty.unknown_p(%unknown* %5)
br i1 %6, label %block69, label %subblock16
block45: ; preds = %subblock45, %subblock16
%.13 = phi %unknown* [ %.02, %subblock16 ], [ %7, %subblock45 ]
%.1 = phi %unknown* [ %10, %subblock16 ], [ %17, %subblock45 ]
%7 = call %unknown* @numba.abstract.iter.next.unknown_p(%unknown* %15)
%8 = call i1 @numba.abstract.iter.empty.unknown_p(%unknown* %7)
br i1 %8, label %block16, label %subblock45
block69: ; preds = %block16
ret %unknown* %.0
subblock16: ; preds = %block16
%9 = call %unknown* @numba.abstract.decref.unknown_p(%unknown* %.01)
%10 = call %unknown* @numba.abstract.binop.add.unknown_p.unknown_p(%unknown* %.0, %unknown* %5)
%11 = call %unknown* @numba.abstract.decref.unknown_p(%unknown* %.0)
%12 = load %unknown** @numba.builtin.range
%13 = call %unknown* @numba.abstract.pack.unknown_p(%unknown* %b)
%14 = call %unknown* @numba.abstract.call.unknown_p.unknown_p.unknown_p(%unknown* %12, %unknown* %13, %unknown* null)
%15 = call %unknown* @numba.abstract.get_iter.unknown_p(%unknown* %14)
br label %block45
subblock45: ; preds = %block45
%16 = call %unknown* @numba.abstract.decref.unknown_p(%unknown* %.13)
%17 = call %unknown* @numba.abstract.binop.add.unknown_p.unknown_p(%unknown* %.1, %unknown* %7)
%18 = call %unknown* @numba.abstract.decref.unknown_p(%unknown* %.1)
br label %block45
}
define %unknown* @test3(%unknown* %a, %unknown* %b, %unknown* %c) {
block0:
%0 = load %unknown** @numba.builtin.range
%1 = tail call %unknown* @PyInt_FromLong(i32 1)
%2 = tail call %unknown* (i64, ...)* @PyTuple_Pack(i64 2, %unknown* %1, %unknown* %a)
%3 = tail call %unknown* @PyObject_Call(%unknown* %0, %unknown* %2, %unknown* null)
%4 = tail call %unknown* @PyObject_GetIter(%unknown* %3)
%5 = tail call %unknown* @PyIter_Next(%unknown* %4)
%6 = icmp eq %unknown* %5, null
br i1 %6, label %block69, label %subblock16
block16.loopexit: ; preds = %block45.backedge, %numba.abstract.decref.unknown_p.exit5
%.1.lcssa = phi %unknown* [ %12, %numba.abstract.decref.unknown_p.exit5 ], [ %24, %block45.backedge ]
%.13.lcssa = phi %unknown* [ %.0210, %numba.abstract.decref.unknown_p.exit5 ], [ %21, %block45.backedge ]
%7 = tail call %unknown* @PyIter_Next(%unknown* %4)
%8 = icmp eq %unknown* %7, null
br i1 %8, label %block69, label %subblock16
block69: ; preds = %block16.loopexit, %block0
%.0.lcssa = phi %unknown* [ %c, %block0 ], [ %.1.lcssa, %block16.loopexit ]
ret %unknown* %.0.lcssa
subblock16: ; preds = %block0, %block16.loopexit
%9 = phi %unknown* [ %7, %block16.loopexit ], [ %5, %block0 ]
%.012 = phi %unknown* [ %.1.lcssa, %block16.loopexit ], [ %c, %block0 ]
%.0111 = phi %unknown* [ %9, %block16.loopexit ], [ null, %block0 ]
%.0210 = phi %unknown* [ %.13.lcssa, %block16.loopexit ], [ null, %block0 ]
%10 = icmp eq %unknown* %.0111, null
br i1 %10, label %numba.abstract.decref.unknown_p.exit4, label %11
; <label>:11 ; preds = %subblock16
tail call void @Py_DecRef(%unknown* %.0111)
br label %numba.abstract.decref.unknown_p.exit4
numba.abstract.decref.unknown_p.exit4: ; preds = %subblock16, %11
%12 = tail call %unknown* @PyNumber_Add(%unknown* %.012, %unknown* %9)
%13 = icmp eq %unknown* %.012, null
br i1 %13, label %numba.abstract.decref.unknown_p.exit5, label %14
; <label>:14 ; preds = %numba.abstract.decref.unknown_p.exit4
tail call void @Py_DecRef(%unknown* %.012)
br label %numba.abstract.decref.unknown_p.exit5
numba.abstract.decref.unknown_p.exit5: ; preds = %numba.abstract.decref.unknown_p.exit4, %14
%15 = load %unknown** @numba.builtin.range
%16 = tail call %unknown* (i64, ...)* @PyTuple_Pack(i64 1, %unknown* %b)
%17 = tail call %unknown* @PyObject_Call(%unknown* %15, %unknown* %16, %unknown* null)
%18 = tail call %unknown* @PyObject_GetIter(%unknown* %17)
%19 = tail call %unknown* @PyIter_Next(%unknown* %18)
%20 = icmp eq %unknown* %19, null
br i1 %20, label %block16.loopexit, label %subblock45
subblock45: ; preds = %numba.abstract.decref.unknown_p.exit5, %block45.backedge
%21 = phi %unknown* [ %26, %block45.backedge ], [ %19, %numba.abstract.decref.unknown_p.exit5 ]
%.18 = phi %unknown* [ %24, %block45.backedge ], [ %12, %numba.abstract.decref.unknown_p.exit5 ]
%.137 = phi %unknown* [ %21, %block45.backedge ], [ %.0210, %numba.abstract.decref.unknown_p.exit5 ]
%22 = icmp eq %unknown* %.137, null
br i1 %22, label %numba.abstract.decref.unknown_p.exit6, label %23
; <label>:23 ; preds = %subblock45
tail call void @Py_DecRef(%unknown* %.137)
br label %numba.abstract.decref.unknown_p.exit6
numba.abstract.decref.unknown_p.exit6: ; preds = %subblock45, %23
%24 = tail call %unknown* @PyNumber_Add(%unknown* %.18, %unknown* %21)
%25 = icmp eq %unknown* %.18, null
br i1 %25, label %block45.backedge, label %28
block45.backedge: ; preds = %numba.abstract.decref.unknown_p.exit6, %28
%26 = tail call %unknown* @PyIter_Next(%unknown* %18)
%27 = icmp eq %unknown* %26, null
br i1 %27, label %block16.loopexit, label %subblock45
; <label>:28 ; preds = %numba.abstract.decref.unknown_p.exit6
tail call void @Py_DecRef(%unknown* %.18)
br label %block45.backedge
}
define %unknown* @test3(%unknown* %a, %unknown* %b, %unknown* %c) {
block0:
%0 = load %unknown** @numba.builtin.range
%1 = tail call %unknown* @PyInt_FromLong(i32 1)
%2 = icmp eq %unknown* %1, null
br i1 %2, label %3, label %4
; <label>:3 ; preds = %block0
ret %unknown* null
; <label>:4 ; preds = %block0
%5 = tail call %unknown* (i64, ...)* @PyTuple_Pack(i64 2, %unknown* %1, %unknown* %a)
%6 = icmp eq %unknown* %5, null
br i1 %6, label %7, label %8
; <label>:7 ; preds = %4
ret %unknown* null
; <label>:8 ; preds = %4
%9 = tail call %unknown* @PyObject_Call(%unknown* %0, %unknown* %5, %unknown* null)
%10 = icmp eq %unknown* %9, null
br i1 %10, label %11, label %12
; <label>:11 ; preds = %8
ret %unknown* null
; <label>:12 ; preds = %8
%13 = tail call %unknown* @PyObject_GetIter(%unknown* %9)
%14 = icmp eq %unknown* %13, null
br i1 %14, label %15, label %16
; <label>:15 ; preds = %12
ret %unknown* null
; <label>:16 ; preds = %12
%17 = tail call %unknown* @PyIter_Next(%unknown* %13)
%18 = icmp eq %unknown* %17, null
%19 = call %unknown* @PyErr_Occurred()
%20 = icmp ne %unknown* %19, null
%21 = and i1 %18, %20
br i1 %21, label %22, label %23
; <label>:22 ; preds = %16
ret %unknown* null
; <label>:23 ; preds = %16
%24 = icmp eq %unknown* %17, null
br i1 %24, label %block69, label %subblock16
block16.loopexit: ; preds = %77, %61
%.1.lcssa = phi %unknown* [ %36, %61 ], [ %66, %77 ]
%.13.lcssa = phi %unknown* [ %.0210, %61 ], [ %63, %77 ]
%25 = tail call %unknown* @PyIter_Next(%unknown* %13)
%26 = icmp eq %unknown* %25, null
%27 = call %unknown* @PyErr_Occurred()
%28 = icmp ne %unknown* %27, null
%29 = and i1 %26, %28
br i1 %29, label %30, label %31
; <label>:30 ; preds = %block16.loopexit
ret %unknown* null
; <label>:31 ; preds = %block16.loopexit
%32 = icmp eq %unknown* %25, null
br i1 %32, label %block69, label %subblock16
block69: ; preds = %31, %23
%.0.lcssa = phi %unknown* [ %c, %23 ], [ %.1.lcssa, %31 ]
ret %unknown* %.0.lcssa
subblock16: ; preds = %23, %31
%33 = phi %unknown* [ %25, %31 ], [ %17, %23 ]
%.012 = phi %unknown* [ %.1.lcssa, %31 ], [ %c, %23 ]
%.0111 = phi %unknown* [ %33, %31 ], [ null, %23 ]
%.0210 = phi %unknown* [ %.13.lcssa, %31 ], [ null, %23 ]
%34 = icmp eq %unknown* %.0111, null
br i1 %34, label %numba.abstract.decref.unknown_p.exit4, label %35
; <label>:35 ; preds = %subblock16
tail call void @Py_DecRef(%unknown* %.0111)
br label %numba.abstract.decref.unknown_p.exit4
numba.abstract.decref.unknown_p.exit4: ; preds = %subblock16, %35
%36 = tail call %unknown* @PyNumber_Add(%unknown* %.012, %unknown* %33)
%37 = icmp eq %unknown* %36, null
br i1 %37, label %38, label %39
; <label>:38 ; preds = %numba.abstract.decref.unknown_p.exit4
ret %unknown* null
; <label>:39 ; preds = %numba.abstract.decref.unknown_p.exit4
%40 = icmp eq %unknown* %.012, null
br i1 %40, label %numba.abstract.decref.unknown_p.exit5, label %41
; <label>:41 ; preds = %39
tail call void @Py_DecRef(%unknown* %.012)
br label %numba.abstract.decref.unknown_p.exit5
numba.abstract.decref.unknown_p.exit5: ; preds = %39, %41
%42 = load %unknown** @numba.builtin.range
%43 = tail call %unknown* (i64, ...)* @PyTuple_Pack(i64 1, %unknown* %b)
%44 = icmp eq %unknown* %43, null
br i1 %44, label %45, label %46
; <label>:45 ; preds = %numba.abstract.decref.unknown_p.exit5
ret %unknown* null
; <label>:46 ; preds = %numba.abstract.decref.unknown_p.exit5
%47 = tail call %unknown* @PyObject_Call(%unknown* %42, %unknown* %43, %unknown* null)
%48 = icmp eq %unknown* %47, null
br i1 %48, label %49, label %50
; <label>:49 ; preds = %46
ret %unknown* null
; <label>:50 ; preds = %46
%51 = tail call %unknown* @PyObject_GetIter(%unknown* %47)
%52 = icmp eq %unknown* %51, null
br i1 %52, label %53, label %54
; <label>:53 ; preds = %50
ret %unknown* null
; <label>:54 ; preds = %50
%55 = tail call %unknown* @PyIter_Next(%unknown* %51)
%56 = icmp eq %unknown* %55, null
%57 = call %unknown* @PyErr_Occurred()
%58 = icmp ne %unknown* %57, null
%59 = and i1 %56, %58
br i1 %59, label %60, label %61
; <label>:60 ; preds = %54
ret %unknown* null
; <label>:61 ; preds = %54
%62 = icmp eq %unknown* %55, null
br i1 %62, label %block16.loopexit, label %subblock45
subblock45: ; preds = %61, %77
%63 = phi %unknown* [ %71, %77 ], [ %55, %61 ]
%.18 = phi %unknown* [ %66, %77 ], [ %36, %61 ]
%.137 = phi %unknown* [ %63, %77 ], [ %.0210, %61 ]
%64 = icmp eq %unknown* %.137, null
br i1 %64, label %numba.abstract.decref.unknown_p.exit6, label %65
; <label>:65 ; preds = %subblock45
tail call void @Py_DecRef(%unknown* %.137)
br label %numba.abstract.decref.unknown_p.exit6
numba.abstract.decref.unknown_p.exit6: ; preds = %subblock45, %65
%66 = tail call %unknown* @PyNumber_Add(%unknown* %.18, %unknown* %63)
%67 = icmp eq %unknown* %66, null
br i1 %67, label %68, label %69
; <label>:68 ; preds = %numba.abstract.decref.unknown_p.exit6
ret %unknown* null
; <label>:69 ; preds = %numba.abstract.decref.unknown_p.exit6
%70 = icmp eq %unknown* %.18, null
br i1 %70, label %block45.backedge, label %79
block45.backedge: ; preds = %69, %79
%71 = tail call %unknown* @PyIter_Next(%unknown* %51)
%72 = icmp eq %unknown* %71, null
%73 = call %unknown* @PyErr_Occurred()
%74 = icmp ne %unknown* %73, null
%75 = and i1 %72, %74
br i1 %75, label %76, label %77
; <label>:76 ; preds = %block45.backedge
ret %unknown* null
; <label>:77 ; preds = %block45.backedge
%78 = icmp eq %unknown* %71, null
br i1 %78, label %block16.loopexit, label %subblock45
; <label>:79 ; preds = %69
tail call void @Py_DecRef(%unknown* %.18)
br label %block45.backedge
}
define %unknown* @test3(%unknown* %a, %unknown* %b, %unknown* %c) {
block0:
%0 = load %unknown** @numba.builtin.range
%1 = tail call %unknown* @PyInt_FromLong(i32 1)
%2 = icmp eq %unknown* %1, null
br i1 %2, label %block69, label %3
block69: ; preds = %block16.loopexit, %40, %37, %34, %numba.abstract.decref.unknown_p.exit5, %numba.abstract.decref.unknown_p.exit4, %block45.backedge, %numba.abstract.decref.unknown_p.exit6, %12, %9, %6, %3, %block0
%merge = phi %unknown* [ %.mux, %12 ], [ null, %9 ], [ null, %6 ], [ null, %3 ], [ null, %block0 ], [ null, %numba.abstract.decref.unknown_p.exit6 ], [ null, %block45.backedge ], [ %.mux16, %block16.loopexit ], [ null, %40 ], [ null, %37 ], [ null, %34 ], [ null, %numba.abstract.decref.unknown_p.exit5 ], [ null, %numba.abstract.decref.unknown_p.exit4 ]
ret %unknown* %merge
; <label>:3 ; preds = %block0
%4 = tail call %unknown* (i64, ...)* @PyTuple_Pack(i64 2, %unknown* %1, %unknown* %a)
%5 = icmp eq %unknown* %4, null
br i1 %5, label %block69, label %6
; <label>:6 ; preds = %3
%7 = tail call %unknown* @PyObject_Call(%unknown* %0, %unknown* %4, %unknown* null)
%8 = icmp eq %unknown* %7, null
br i1 %8, label %block69, label %9
; <label>:9 ; preds = %6
%10 = tail call %unknown* @PyObject_GetIter(%unknown* %7)
%11 = icmp eq %unknown* %10, null
br i1 %11, label %block69, label %12
; <label>:12 ; preds = %9
%13 = tail call %unknown* @PyIter_Next(%unknown* %10)
%14 = icmp eq %unknown* %13, null
%15 = tail call %unknown* @PyErr_Occurred()
%16 = icmp ne %unknown* %15, null
%17 = and i1 %14, %16
%.mux = select i1 %17, %unknown* null, %unknown* %c
br i1 %14, label %block69, label %subblock16
block16.loopexit: ; preds = %59, %46
%.1.lcssa = phi %unknown* [ %26, %46 ], [ %50, %59 ]
%.13.lcssa = phi %unknown* [ %.0210, %46 ], [ %47, %59 ]
%18 = tail call %unknown* @PyIter_Next(%unknown* %10)
%19 = icmp eq %unknown* %18, null
%20 = tail call %unknown* @PyErr_Occurred()
%21 = icmp ne %unknown* %20, null
%22 = and i1 %19, %21
%.mux16 = select i1 %22, %unknown* null, %unknown* %.1.lcssa
br i1 %19, label %block69, label %subblock16
subblock16: ; preds = %12, %block16.loopexit
%23 = phi %unknown* [ %18, %block16.loopexit ], [ %13, %12 ]
%.012 = phi %unknown* [ %.1.lcssa, %block16.loopexit ], [ %c, %12 ]
%.0111 = phi %unknown* [ %23, %block16.loopexit ], [ null, %12 ]
%.0210 = phi %unknown* [ %.13.lcssa, %block16.loopexit ], [ null, %12 ]
%24 = icmp eq %unknown* %.0111, null
br i1 %24, label %numba.abstract.decref.unknown_p.exit4, label %25
; <label>:25 ; preds = %subblock16
tail call void @Py_DecRef(%unknown* %.0111)
br label %numba.abstract.decref.unknown_p.exit4
numba.abstract.decref.unknown_p.exit4: ; preds = %subblock16, %25
%26 = tail call %unknown* @PyNumber_Add(%unknown* %.012, %unknown* %23)
%27 = icmp eq %unknown* %26, null
br i1 %27, label %block69, label %28
; <label>:28 ; preds = %numba.abstract.decref.unknown_p.exit4
%29 = icmp eq %unknown* %.012, null
br i1 %29, label %numba.abstract.decref.unknown_p.exit5, label %30
; <label>:30 ; preds = %28
tail call void @Py_DecRef(%unknown* %.012)
br label %numba.abstract.decref.unknown_p.exit5
numba.abstract.decref.unknown_p.exit5: ; preds = %28, %30
%31 = load %unknown** @numba.builtin.range
%32 = tail call %unknown* (i64, ...)* @PyTuple_Pack(i64 1, %unknown* %b)
%33 = icmp eq %unknown* %32, null
br i1 %33, label %block69, label %34
; <label>:34 ; preds = %numba.abstract.decref.unknown_p.exit5
%35 = tail call %unknown* @PyObject_Call(%unknown* %31, %unknown* %32, %unknown* null)
%36 = icmp eq %unknown* %35, null
br i1 %36, label %block69, label %37
; <label>:37 ; preds = %34
%38 = tail call %unknown* @PyObject_GetIter(%unknown* %35)
%39 = icmp eq %unknown* %38, null
br i1 %39, label %block69, label %40
; <label>:40 ; preds = %37
%41 = tail call %unknown* @PyIter_Next(%unknown* %38)
%42 = icmp eq %unknown* %41, null
%43 = tail call %unknown* @PyErr_Occurred()
%44 = icmp ne %unknown* %43, null
%45 = and i1 %42, %44
br i1 %45, label %block69, label %46
; <label>:46 ; preds = %40
br i1 %42, label %block16.loopexit, label %subblock45
subblock45: ; preds = %46, %59
%47 = phi %unknown* [ %54, %59 ], [ %41, %46 ]
%.18 = phi %unknown* [ %50, %59 ], [ %26, %46 ]
%.137 = phi %unknown* [ %47, %59 ], [ %.0210, %46 ]
%48 = icmp eq %unknown* %.137, null
br i1 %48, label %numba.abstract.decref.unknown_p.exit6, label %49
; <label>:49 ; preds = %subblock45
tail call void @Py_DecRef(%unknown* %.137)
br label %numba.abstract.decref.unknown_p.exit6
numba.abstract.decref.unknown_p.exit6: ; preds = %subblock45, %49
%50 = tail call %unknown* @PyNumber_Add(%unknown* %.18, %unknown* %47)
%51 = icmp eq %unknown* %50, null
br i1 %51, label %block69, label %52
; <label>:52 ; preds = %numba.abstract.decref.unknown_p.exit6
%53 = icmp eq %unknown* %.18, null
br i1 %53, label %block45.backedge, label %60
block45.backedge: ; preds = %52, %60
%54 = tail call %unknown* @PyIter_Next(%unknown* %38)
%55 = icmp eq %unknown* %54, null
%56 = tail call %unknown* @PyErr_Occurred()
%57 = icmp ne %unknown* %56, null
%58 = and i1 %55, %57
br i1 %58, label %block69, label %59
; <label>:59 ; preds = %block45.backedge
br i1 %55, label %block16.loopexit, label %subblock45
; <label>:60 ; preds = %52
tail call void @Py_DecRef(%unknown* %.18)
br label %block45.backedge
}
def test3(a, b, c):
for i in range(1, a):
c += i
for j in range(b):
c += j
return c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment