Home | History | Annotate | Download | only in reader_tests
      1 ; Test of global initializers.
      2 
      3 ; RUN: %p2i -i %s --insts --args -allow-externally-defined-symbols \
      4 ; RUN: | FileCheck %s
      5 ; RUN: %l2i -i %s --insts --args -allow-externally-defined-symbols \
      6 ; RUN: | %ifl FileCheck %s
      7 ; RUN: %lc2i -i %s --insts --args -allow-externally-defined-symbols \
      8 ; RUN: | %iflc FileCheck %s
      9 ; RUN:   %p2i -i %s --args -notranslate -timing \
     10 ; RUN:        -allow-externally-defined-symbols | \
     11 ; RUN:   FileCheck --check-prefix=NOIR %s
     12 
     13 @PrimitiveInit = internal global [4 x i8] c"\1B\00\00\00", align 4
     14 ; CHECK: @PrimitiveInit = internal global [4 x i8] c"\1B\00\00\00", align 4
     15 
     16 @PrimitiveInitConst = internal constant [4 x i8] c"\0D\00\00\00", align 4
     17 ; CHECK-NEXT: @PrimitiveInitConst = internal constant [4 x i8] c"\0D\00\00\00", align 4
     18 
     19 @ArrayInit = internal global [20 x i8] c"\0A\00\00\00\14\00\00\00\1E\00\00\00(\00\00\002\00\00\00", align 4
     20 ; CHECK-NEXT: @ArrayInit = internal global [20 x i8] c"\0A\00\00\00\14\00\00\00\1E\00\00\00(\00\00\002\00\00\00", align 4
     21 
     22 @ArrayInitPartial = internal global [40 x i8] c"<\00\00\00F\00\00\00P\00\00\00Z\00\00\00d\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00", align 4
     23 ; CHECK-NEXT: @ArrayInitPartial = internal global [40 x i8] c"<\00\00\00F\00\00\00P\00\00\00Z\00\00\00d\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00", align 4
     24 
     25 @PrimitiveInitStatic = internal global [4 x i8] zeroinitializer, align 4
     26 ; CHECK-NEXT: @PrimitiveInitStatic = internal global [4 x i8] zeroinitializer, align 4
     27 
     28 @PrimitiveUninit = internal global [4 x i8] zeroinitializer, align 4
     29 ; CHECK-NEXT: @PrimitiveUninit = internal global [4 x i8] zeroinitializer, align 4
     30 
     31 @ArrayUninit = internal global [20 x i8] zeroinitializer, align 4
     32 ; CHECK-NEXT: @ArrayUninit = internal global [20 x i8] zeroinitializer, align 4
     33 
     34 @ArrayUninitConstDouble = internal constant [200 x i8] zeroinitializer, align 8
     35 ; CHECK-NEXT: @ArrayUninitConstDouble = internal constant [200 x i8] zeroinitializer, align 8
     36 
     37 @ArrayUninitConstInt = internal constant [20 x i8] zeroinitializer, align 4
     38 ; CHECK-NEXT: @ArrayUninitConstInt = internal constant [20 x i8] zeroinitializer, align 4
     39 
     40 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
     41 ; CHECK-NEXT: @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
     42 
     43 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
     44 ; CHECK: @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
     45 
     46 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
     47 ; CHECK: @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
     48 
     49 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
     50 ; CHECK: @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
     51 
     52 define internal i32 @main(i32 %argc, i32 %argv) {
     53 entry:
     54   %expanded1 = ptrtoint [4 x i8]* @PrimitiveInit to i32
     55   call void @use(i32 %expanded1)
     56   %expanded3 = ptrtoint [4 x i8]* @PrimitiveInitConst to i32
     57   call void @use(i32 %expanded3)
     58   %expanded5 = ptrtoint [4 x i8]* @PrimitiveInitStatic to i32
     59   call void @use(i32 %expanded5)
     60   %expanded7 = ptrtoint [4 x i8]* @PrimitiveUninit to i32
     61   call void @use(i32 %expanded7)
     62   %expanded9 = ptrtoint [20 x i8]* @ArrayInit to i32
     63   call void @use(i32 %expanded9)
     64   %expanded11 = ptrtoint [40 x i8]* @ArrayInitPartial to i32
     65   call void @use(i32 %expanded11)
     66   %expanded13 = ptrtoint [20 x i8]* @ArrayUninit to i32
     67   call void @use(i32 %expanded13)
     68   ret i32 0
     69 }
     70 
     71 declare void @use(i32)
     72 
     73 define internal i32 @nacl_tp_tdb_offset(i32 %__0) {
     74 entry:
     75   ret i32 0
     76 }
     77 
     78 define internal i32 @nacl_tp_tls_offset(i32 %size) {
     79 entry:
     80   %result = sub i32 0, %size
     81   ret i32 %result
     82 }
     83 
     84 ; NOIR: Total across all functions
     85