OLD | NEW |
---|---|
(Empty) | |
1 ; Checks if llvm bitcode defines a struct type before the pointer type, | |
2 ; even if the struct definintion appears after the pointer type, while | |
3 ; pnacl bitcode moves the pointer before the struct. | |
4 ; RUN: llvm-as < %s | llvm-bcanalyzer -dump | FileCheck %s -check-prefix=LLVM | |
5 ; RUN: llvm-as < %s | pnacl-freeze | pnacl-bcanalyzer -dump | FileCheck %s -chec k-prefix=PNACL | |
6 | |
7 %typeB = type { i8, %typeA, i32, %typeA } | |
8 %typeA = type { i16 } | |
9 | |
10 define %typeB* @foo(%typeB* %a) { | |
11 ret %typeB* %a | |
12 } | |
13 | |
14 define %typeB* @bar(%typeB* %b) { | |
15 ret %typeB* %b | |
16 } | |
17 | |
18 define i16 @bam(i16 %a) { | |
19 ret i16 %a | |
20 } | |
21 | |
22 ; Show the ordering llvm uses to order types, which is to expand subtypes | |
23 ; (including accross pointers) before the type. Expands types for functions | |
24 ; in order: @foo, @bar, @bam. | |
25 ; LLVM: <TYPE_BLOCK_ID {{.*}}> | |
26 ; i8 | |
27 ; LLVM: <INTEGER op0=8/> | |
28 ; i6 | |
jvoung (off chromium)
2013/05/20 22:39:36
i6 -> i16
Karl
2013/05/20 23:05:06
Done.
| |
29 ; LLVM: <INTEGER op0=16/> | |
30 ; %typeA = type { i16 } | |
31 ; LLVM: <STRUCT_NAME abbrevid=7 op0=116 op1=121 op2=112 op3=101 op4=65/> | |
32 ; LLVM: <STRUCT_NAMED abbrevid=8 op0=0 op1=1/> | |
33 ; i32 | |
34 ; LLVM: <INTEGER op0=32/> | |
35 ; %typeB = type { i8, %typeA, i32, %typeA } | |
36 ; LLVM: <STRUCT_NAME abbrevid=7 op0=116 op1=121 op2=112 op3=101 op4=66/> | |
37 ; LLVM: <STRUCT_NAMED abbrevid=8 op0=0 op1=0 op2=2 op3=3 op4=2/> | |
38 ; %typeB* | |
39 ; LLVM: <POINTER abbrevid=4 op0=4 op1=0/> | |
40 ; %typeB* (%typeB*) | |
41 ; LLVM: <FUNCTION abbrevid=5 op0=0 op1=5 op2=5/> | |
42 ; %typeB* (%typeB*)* | |
43 ; LLVM: <POINTER abbrevid=4 op0=6 op1=0/> | |
44 ; i16 (i16) | |
45 ; LLVM: <FUNCTION abbrevid=5 op0=0 op1=1 op2=1/> | |
46 ; i16 (i16)* | |
47 ; LLVM: <POINTER abbrevid=4 op0=8 op1=0/> | |
48 ; type of instruction "RET" | |
49 ; LLVM: <VOID/> | |
50 ; LLVM: </TYPE_BLOCK_ID> | |
51 | |
52 ; Show the ordering pnacl-freeze uses to order types. | |
53 ; PNACL: <TYPE_BLOCK_ID {{.*}}> | |
54 ; %typeB* | |
55 ; PNACL: <POINTER abbrevid=4 op0=8 op1=0/> | |
56 ; i16 | |
57 ; PNACL: <INTEGER op0=16/> | |
58 ; type of instruction "RET" | |
59 ; PNACL: <VOID/> | |
60 ; %typeA = type { i16 } | |
61 ; PNACL: <STRUCT_NAME abbrevid=7 op0=116 op1=121 op2=112 op3=101 op4=65/> | |
62 ; PNACL: <STRUCT_NAMED abbrevid=8 op0=0 op1=1/> | |
63 ; %typeB* (%typeB*) | |
64 ; PNACL: <FUNCTION abbrevid=5 op0=0 op1=0 op2=0/> | |
65 ; %typeB* (%typeB*)* | |
66 ; PNACL: <POINTER abbrevid=4 op0=4 op1=0/> | |
67 ; i8 | |
68 ; PNACL: <INTEGER op0=8/> | |
69 ; i32 | |
70 ; PNACL: <INTEGER op0=32/> | |
71 ; %typeB = type { i8, %typeA, i32, %typeA } | |
72 ; PNACL: <STRUCT_NAME abbrevid=7 op0=116 op1=121 op2=112 op3=101 op4=66/> | |
73 ; PNACL: <STRUCT_NAMED abbrevid=8 op0=0 op1=6 op2=3 op3=7 op4=3/> | |
74 ; i16 (i16) | |
75 ; PNACL: <FUNCTION abbrevid=5 op0=0 op1=1 op2=1/> | |
76 ; i16 (i16)* | |
77 ; PNACL: <POINTER abbrevid=4 op0=9 op1=0/> | |
78 ; PNACL: </TYPE_BLOCK_ID> | |
OLD | NEW |