1 ; Tests if we handle global variables with relocation initializers. 2 3 ; RUN: %p2i -i %s --insts | FileCheck %s 4 ; RUN: %l2i -i %s --insts | %ifl FileCheck %s 5 ; RUN: %lc2i -i %s --insts | %iflc FileCheck %s 6 ; RUN: %p2i -i %s --args -notranslate -timing | \ 7 ; RUN: FileCheck --check-prefix=NOIR %s 8 9 @bytes = internal global [7 x i8] c"abcdefg" 10 ; CHECK: @bytes = internal global [7 x i8] c"abcdefg" 11 12 @const_bytes = internal constant [7 x i8] c"abcdefg" 13 ; CHECK-NEXT: @const_bytes = internal constant [7 x i8] c"abcdefg" 14 15 @ptr_to_ptr = internal global i32 ptrtoint (i32* @ptr to i32) 16 ; CHECK-NEXT: @ptr_to_ptr = internal global i32 ptrtoint (i32* @ptr to i32) 17 18 @const_ptr_to_ptr = internal constant i32 ptrtoint (i32* @ptr to i32) 19 ; CHECK-NEXT: @const_ptr_to_ptr = internal constant i32 ptrtoint (i32* @ptr to i32) 20 21 @ptr_to_func = internal global i32 ptrtoint (void ()* @func to i32) 22 ; CHECK-NEXT: @ptr_to_func = internal global i32 ptrtoint (void ()* @func to i32) 23 24 @const_ptr_to_func = internal constant i32 ptrtoint (void ()* @func to i32) 25 ; CHECK-NEXT: @const_ptr_to_func = internal constant i32 ptrtoint (void ()* @func to i32) 26 27 @compound = internal global <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint (void ()* @func to i32) }> 28 ; CHECK-NEXT: @compound = internal global <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint (void ()* @func to i32) }> 29 30 @const_compound = internal constant <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint (void ()* @func to i32) }> 31 32 ; CHECK-NEXT: @const_compound = internal constant <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint (void ()* @func to i32) }> 33 34 @ptr = internal global i32 ptrtoint ([7 x i8]* @bytes to i32) 35 ; CHECK-NEXT: @ptr = internal global i32 ptrtoint ([7 x i8]* @bytes to i32) 36 37 @const_ptr = internal constant i32 ptrtoint ([7 x i8]* @bytes to i32) 38 ; CHECK-NEXT: @const_ptr = internal constant i32 ptrtoint ([7 x i8]* @bytes to i32) 39 40 @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1) 41 ; CHECK-NEXT: @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1) 42 43 @const_addend_ptr = internal constant i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1) 44 ; CHECK-NEXT: @const_addend_ptr = internal constant i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1) 45 46 @addend_negative = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 -1) 47 ; CHECK-NEXT: @addend_negative = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 -1) 48 49 @const_addend_negative = internal constant i32 add (i32 ptrtoint (i32* @ptr to i32), i32 -1) 50 ; CHECK-NEXT: @const_addend_negative = internal constant i32 add (i32 ptrtoint (i32* @ptr to i32), i32 -1) 51 52 @addend_array1 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 1) 53 ; CHECK-NEXT: @addend_array1 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 1) 54 55 @const_addend_array1 = internal constant i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 1) 56 ; CHECK-NEXT: @const_addend_array1 = internal constant i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 1) 57 58 @addend_array2 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 7) 59 ; CHECK-NEXT: @addend_array2 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 7) 60 61 @const_addend_array2 = internal constant i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 7) 62 ; CHECK-NEXT: @const_addend_array2 = internal constant i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 7) 63 64 @addend_array3 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 9) 65 ; CHECK-NEXT: @addend_array3 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 9) 66 67 @const_addend_array3 = internal constant i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 9) 68 ; CHECK-NEXT: @const_addend_array3 = internal constant i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 9) 69 70 @addend_struct1 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 1) 71 ; CHECK-NEXT: @addend_struct1 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 1) 72 73 @const_addend_struct1 = internal constant i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 1) 74 ; CHECK-NEXT: @const_addend_struct1 = internal constant i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 1) 75 76 @addend_struct2 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 4) 77 ; CHECK-NEXT: @addend_struct2 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 4) 78 79 @const_addend_struct2 = internal constant i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 4) 80 ; CHECK-NEXT: @const_addend_struct2 = internal constant i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 4) 81 82 @ptr_to_func_align = internal global i32 ptrtoint (void ()* @func to i32), align 8 83 ; CHECK-NEXT: @ptr_to_func_align = internal global i32 ptrtoint (void ()* @func to i32), align 8 84 85 @const_ptr_to_func_align = internal constant i32 ptrtoint (void ()* @func to i32), align 8 86 ; CHECK-NEXT: @const_ptr_to_func_align = internal constant i32 ptrtoint (void ()* @func to i32), align 8 87 88 @char = internal constant [1 x i8] c"0" 89 ; CHECK-NEXT: @char = internal constant [1 x i8] c"0" 90 91 @short = internal constant [2 x i8] zeroinitializer 92 ; CHECK-NEXT: @short = internal constant [2 x i8] zeroinitializer 93 94 define internal void @func() { 95 ret void 96 } 97 98 ; CHECK-NEXT: define internal void @func() { 99 100 ; NOIR: Total across all functions 101