OLD | NEW |
1 ; RUN: opt %s -minsfi-allocate-data-segment -S | FileCheck %s | 1 ; RUN: opt %s -minsfi-allocate-data-segment -S | FileCheck %s |
2 | 2 |
3 target datalayout = "p:32:32:32" | 3 target datalayout = "p:32:32:32" |
4 target triple = "le32-unknown-nacl" | 4 target triple = "le32-unknown-nacl" |
5 | 5 |
6 ; Every global variable in PNaCl IR must have an initializer. This is an | 6 ; Every global variable in PNaCl IR must have an initializer. This is an |
7 ; exhaustive list of all the possible formats. | 7 ; exhaustive list of all the possible formats. |
8 | 8 |
9 @a = global [1 x i8] zeroinitializer ; no alignment | 9 @a = global [1 x i8] zeroinitializer ; no alignment |
10 @b = global [3 x i8] c"ABC" ; no alignment | 10 @b = global [3 x i8] c"ABC" ; no alignment |
11 @c = global [5 x i8] c"ABCDE", align 16 ; explicit 16B align | 11 @c = global [5 x i8] c"ABCDE", align 16 ; explicit 16B align |
12 @d = global i32 ptrtoint ([3 x i8]* @b to i32) ; implicit 4B align | 12 @d = global i32 ptrtoint ([3 x i8]* @b to i32) ; implicit 4B align |
13 @e = global i32 add (i32 ptrtoint ([5 x i8]* @c to i32), i32 3), align 2 | 13 @e = global i32 add (i32 ptrtoint ([5 x i8]* @c to i32), i32 3), align 2 |
14 ; implicit 4B align | 14 ; implicit 4B align |
15 @f = global <{ [1 x i8], i32 }> | 15 @f = global <{ [1 x i8], i32 }> |
16 <{ [1 x i8] zeroinitializer, | 16 <{ [1 x i8] zeroinitializer, |
17 i32 ptrtoint ([5 x i8]* @c to i32) }> ; no alignment | 17 i32 ptrtoint ([5 x i8]* @c to i32) }> ; no alignment |
18 @g = global [1 x i8] zeroinitializer ; no alignment | 18 @g = global [1 x i8] zeroinitializer ; no alignment |
19 | 19 |
20 ; Use each variable to verify its location | 20 ; Use each variable to verify its location |
21 | 21 |
22 define void @use_variables() { | 22 define void @use_variables() { |
23 %a = load [1 x i8]* @a | 23 %a = load [1 x i8], [1 x i8]* @a |
24 %b = load [3 x i8]* @b | 24 %b = load [3 x i8], [3 x i8]* @b |
25 %c = load [5 x i8]* @c | 25 %c = load [5 x i8], [5 x i8]* @c |
26 %d = load i32* @d | 26 %d = load i32, i32* @d |
27 %e = load i32* @e | 27 %e = load i32, i32* @e |
28 %f = load <{ [1 x i8], i32 }>* @f | 28 %f = load <{ [1 x i8], i32 }>, <{ [1 x i8], i32 }>* @f |
29 %g = load [1 x i8]* @g | 29 %g = load [1 x i8], [1 x i8]* @g |
30 ret void | 30 ret void |
31 } | 31 } |
32 | 32 |
33 ; CHECK: %__sfi_data_segment = type <{ [1 x i8], [3 x i8], [12 x i8], [5 x i8],
[3 x i8], i32, i32, <{ [1 x i8], i32 }>, [1 x i8] }> | 33 ; CHECK: %__sfi_data_segment = type <{ [1 x i8], [3 x i8], [12 x i8], [5 x i8],
[3 x i8], i32, i32, <{ [1 x i8], i32 }>, [1 x i8] }> |
34 ; CHECK: @__sfi_data_segment = constant %__sfi_data_segment <{ [1 x i8] zeroinit
ializer, [3 x i8] c"ABC", [12 x i8] zeroinitializer, [5 x i8] c"ABCDE", [3 x i8]
zeroinitializer, i32 65537, i32 65555, <{ [1 x i8], i32 }> <{ [1 x i8] zeroinit
ializer, i32 65552 }>, [1 x i8] zeroinitializer }> | 34 ; CHECK: @__sfi_data_segment = constant %__sfi_data_segment <{ [1 x i8] zeroinit
ializer, [3 x i8] c"ABC", [12 x i8] zeroinitializer, [5 x i8] c"ABCDE", [3 x i8]
zeroinitializer, i32 65537, i32 65555, <{ [1 x i8], i32 }> <{ [1 x i8] zeroinit
ializer, i32 65552 }>, [1 x i8] zeroinitializer }> |
35 ; CHECK: @__sfi_data_segment_size = constant i32 38 | 35 ; CHECK: @__sfi_data_segment_size = constant i32 38 |
36 | 36 |
37 ; CHECK-LABEL: define void @use_variables() { | 37 ; CHECK-LABEL: define void @use_variables() { |
38 ; CHECK-NEXT: %a = load [1 x i8]* inttoptr (i32 65536 to [1 x i8]*) | 38 ; CHECK-NEXT: %a = load [1 x i8], [1 x i8]* inttoptr (i32 65536 to [1 x i8]*) |
39 ; CHECK-NEXT: %b = load [3 x i8]* inttoptr (i32 65537 to [3 x i8]*) | 39 ; CHECK-NEXT: %b = load [3 x i8], [3 x i8]* inttoptr (i32 65537 to [3 x i8]*) |
40 ; CHECK-NEXT: %c = load [5 x i8]* inttoptr (i32 65552 to [5 x i8]*) | 40 ; CHECK-NEXT: %c = load [5 x i8], [5 x i8]* inttoptr (i32 65552 to [5 x i8]*) |
41 ; CHECK-NEXT: %d = load i32* inttoptr (i32 65560 to i32*) | 41 ; CHECK-NEXT: %d = load i32, i32* inttoptr (i32 65560 to i32*) |
42 ; CHECK-NEXT: %e = load i32* inttoptr (i32 65564 to i32*) | 42 ; CHECK-NEXT: %e = load i32, i32* inttoptr (i32 65564 to i32*) |
43 ; CHECK-NEXT: %f = load <{ [1 x i8], i32 }>* inttoptr (i32 65568 to <{ [1 x i
8], i32 }>*) | 43 ; CHECK-NEXT: %f = load <{ [1 x i8], i32 }>, <{ [1 x i8], i32 }>* inttoptr (i
32 65568 to <{ [1 x i8], i32 }>*) |
44 ; CHECK-NEXT: %g = load [1 x i8]* inttoptr (i32 65573 to [1 x i8]*) | 44 ; CHECK-NEXT: %g = load [1 x i8], [1 x i8]* inttoptr (i32 65573 to [1 x i8]*) |
45 ; CHECK-NEXT: ret void | 45 ; CHECK-NEXT: ret void |
46 ; CHECK-NEXT: } | 46 ; CHECK-NEXT: } |
OLD | NEW |