OLD | NEW |
1 ; Tests the integrated assembler for instructions with multiple | 1 ; Tests the integrated assembler for instructions with multiple |
2 ; relocations. | 2 ; relocations. |
3 | 3 |
4 ; RUN: %p2i -i %s --args -O2 | FileCheck %s | 4 ; RUN: %p2i -i %s --args -O2 | FileCheck %s |
5 | 5 |
6 ; char global_char; | 6 ; char global_char; |
7 ; char *p_global_char; | 7 ; char *p_global_char; |
8 ; void dummy(); | 8 ; void dummy(); |
9 ; void store_immediate_to_global() { p_global_char = &global_char; } | 9 ; void store_immediate_to_global() { p_global_char = &global_char; } |
10 ; void add_in_place() { p_global_char += (int)&global_char; } | 10 ; void add_in_place() { p_global_char += (int)&global_char; } |
11 ; void cmp_global_immediate() { if (p_global_char == &global_char) dummy(); } | 11 ; void cmp_global_immediate() { if (p_global_char == &global_char) dummy(); } |
12 | 12 |
13 @global_char = internal global [1 x i8] zeroinitializer, align 1 | 13 @global_char = internal global [1 x i8] zeroinitializer, align 1 |
14 @p_global_char = internal global [4 x i8] zeroinitializer, align 4 | 14 @p_global_char = internal global [4 x i8] zeroinitializer, align 4 |
15 declare void @dummy(i32) | 15 declare void @dummy() |
16 | 16 |
17 define internal void @store_immediate_to_global() { | 17 define internal void @store_immediate_to_global() { |
18 entry: | 18 entry: |
19 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* | 19 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* |
20 %expanded1 = ptrtoint [1 x i8]* @global_char to i32 | 20 %expanded1 = ptrtoint [1 x i8]* @global_char to i32 |
21 store i32 %expanded1, i32* %p_global_char.bc, align 1 | 21 store i32 %expanded1, i32* %p_global_char.bc, align 1 |
22 ret void | 22 ret void |
23 } | 23 } |
24 ; CHECK-LABEL: store_immediate_to_global | 24 ; CHECK-LABEL: store_immediate_to_global |
25 ; CHECK: .long p_global_char | 25 ; CHECK: .long p_global_char |
(...skipping 15 matching lines...) Expand all Loading... |
41 | 41 |
42 define internal void @cmp_global_immediate() { | 42 define internal void @cmp_global_immediate() { |
43 entry: | 43 entry: |
44 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* | 44 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* |
45 %0 = load i32* %p_global_char.bc, align 1 | 45 %0 = load i32* %p_global_char.bc, align 1 |
46 %expanded1 = ptrtoint [1 x i8]* @global_char to i32 | 46 %expanded1 = ptrtoint [1 x i8]* @global_char to i32 |
47 %cmp = icmp eq i32 %0, %expanded1 | 47 %cmp = icmp eq i32 %0, %expanded1 |
48 br i1 %cmp, label %if.then, label %if.end | 48 br i1 %cmp, label %if.then, label %if.end |
49 | 49 |
50 if.then: ; preds = %entry | 50 if.then: ; preds = %entry |
51 %dummy.bc = bitcast void (i32)* @dummy to void ()* | 51 tail call void @dummy() |
52 tail call void %dummy.bc() | |
53 br label %if.end | 52 br label %if.end |
54 | 53 |
55 if.end: ; preds = %if.then, %entry | 54 if.end: ; preds = %if.then, %entry |
56 ret void | 55 ret void |
57 } | 56 } |
58 ; CHECK-LABEL: cmp_global_immediate | 57 ; CHECK-LABEL: cmp_global_immediate |
59 ; CHECK: .long p_global_char | 58 ; CHECK: .long p_global_char |
60 ; CHECK: .long global_char | 59 ; CHECK: .long global_char |
61 ; CHECK: call dummy | 60 ; CHECK: .long dummy |
OLD | NEW |