1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
; (cd .. && make) && ../llvm/Release/bin/llvm-as test.ll -o=- | ../Debug/bin/klee
declare void @print_i32(i32)
%simple = type { i8, i16, i32, i64 }
@gInt = global i32 2
@gInts = global [2 x i32] [ i32 3, i32 5 ]
@gStruct = global %simple { i8 7, i16 11, i32 13, i64 17 }
@gZero = global %simple zeroinitializer
define i32 @main() {
entry:
%addr0 = getelementptr i32* @gInt, i32 0
%addr1 = getelementptr [2 x i32]* @gInts, i32 0, i32 0
%addr2 = getelementptr [2 x i32]* @gInts, i32 0, i32 1
%addr3 = getelementptr %simple* @gStruct, i32 0, i32 0
%addr4 = getelementptr %simple* @gStruct, i32 0, i32 1
%addr5 = getelementptr %simple* @gStruct, i32 0, i32 2
%addr6 = getelementptr %simple* @gStruct, i32 0, i32 3
%addr7 = getelementptr %simple* @gZero, i32 0, i32 2
%contents0 = load i32* %addr0
%contents1 = load i32* %addr1
%contents2 = load i32* %addr2
%contents3tmp = load i8* %addr3
%contents3 = zext i8 %contents3tmp to i32
%contents4tmp = load i16* %addr4
%contents4 = zext i16 %contents4tmp to i32
%contents5 = load i32* %addr5
%contents6tmp = load i64* %addr6
%contents6 = trunc i64 %contents6tmp to i32
%contents7 = load i32* %addr7
%tmp0 = mul i32 %contents0, %contents1
%tmp1 = mul i32 %tmp0, %contents2
%tmp2 = mul i32 %tmp1, %contents3
%tmp3 = mul i32 %tmp2, %contents4
%tmp4 = mul i32 %tmp3, %contents5
%tmp5 = mul i32 %tmp4, %contents6
%tmp6 = add i32 %tmp5, %contents7
%p = icmp eq i32 %tmp5, 510510
br i1 %p, label %exitTrue, label %exitFalse
exitTrue:
call void @print_i32(i32 1)
ret i32 0
exitFalse:
call void @print_i32(i32 0)
ret i32 0
}
|