quebex

A software analysis framework built around the QBE intermediate language

git clone https://git.8pit.net/quebex.git

 1function w $first_divisor(w %.1) {
 2@start.1
 3	%.2 =l alloc4 4
 4	storew %.1, %.2
 5	%.3 =l alloc4 4
 6@body.2
 7	storew 2, %.3
 8@for_cond.3
 9	%.4 =w loadw %.3
10	%.5 =w loadw %.2
11	%.6 =w cultw %.4, %.5
12	jnz %.6, @for_body.4, @for_join.6
13@for_body.4
14	%.7 =w loadw %.2
15	%.8 =w loadw %.3
16	%.9 =w urem %.7, %.8
17	%.10 =w ceqw %.9, 0
18	jnz %.10, @if_true.7, @if_false.8
19@if_true.7
20	%.11 =w loadw %.3
21	ret %.11
22@if_false.8
23@for_cont.5
24	%.12 =w loadw %.3
25	%.13 =w add %.12, 1
26	storew %.13, %.3
27	jmp @for_cond.3
28@for_join.6
29	%.14 =w loadw %.2
30	ret %.14
31}
32data $.Lstring.3 = align 1 { b "a\000", }
33export
34function w $main() {
35@start.9
36	%.1 =l alloc4 4
37@body.10
38	%.2 =l extsw 1
39	call $quebex_symbolic_array(l %.1, l %.2, l 4, l $.Lstring.3)
40	%.3 =w loadw %.1
41	%.4 =w culew %.3, 200
42	jnz %.4, @if_true.11, @if_false.12
43@if_true.11
44	%.5 =w loadw %.1
45	%.6 =w cugtw %.5, 1
46	jnz %.6, @logic_right.13, @logic_join.14
47@logic_right.13
48	%.7 =w loadw %.1
49	%.8 =w call $first_divisor(w %.7)
50	%.9 =w loadw %.1
51	%.10 =w ceqw %.8, %.9
52	%.11 =w cnew %.10, 0
53@logic_join.14
54	%.12 =w phi @if_true.11 0, @logic_right.13 %.11
55	jnz %.12, @if_true.15, @if_false.16
56@if_true.15
57	ret 1
58@if_false.16
59	ret 0
60@if_join.17
61@if_false.12
62	ret 0
63}