blob: c5b0fc2947e4f5e8dd71bfbef6b840421370ea01 [file] [log] [blame]
Jim Stichnothf1156be2014-11-03 12:36:29 -08001; Tests the integrated assembler for instructions with multiple
2; relocations.
3
Jim Stichnoth729dbd02015-02-25 14:48:43 -08004; RUN: %if --need=allow_dump --command %p2i -i %s --args -O2 \
5; RUN: | %if --need=allow_dump --command FileCheck %s
Jim Stichnothf1156be2014-11-03 12:36:29 -08006
7; char global_char;
8; char *p_global_char;
9; void dummy();
10; void store_immediate_to_global() { p_global_char = &global_char; }
11; void add_in_place() { p_global_char += (int)&global_char; }
12; void cmp_global_immediate() { if (p_global_char == &global_char) dummy(); }
13
14@global_char = internal global [1 x i8] zeroinitializer, align 1
15@p_global_char = internal global [4 x i8] zeroinitializer, align 4
Jan Voung0faec4c2014-11-05 17:29:56 -080016declare void @dummy()
Jim Stichnothf1156be2014-11-03 12:36:29 -080017
18define internal void @store_immediate_to_global() {
19entry:
20 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32*
21 %expanded1 = ptrtoint [1 x i8]* @global_char to i32
22 store i32 %expanded1, i32* %p_global_char.bc, align 1
23 ret void
24}
25; CHECK-LABEL: store_immediate_to_global
26; CHECK: .long p_global_char
27; CHECK: .long global_char
28
29define internal void @add_in_place() {
30entry:
31 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070032 %0 = load i32, i32* %p_global_char.bc, align 1
Jim Stichnothf1156be2014-11-03 12:36:29 -080033 %expanded1 = ptrtoint [1 x i8]* @global_char to i32
34 %gep = add i32 %0, %expanded1
35 %p_global_char.bc3 = bitcast [4 x i8]* @p_global_char to i32*
36 store i32 %gep, i32* %p_global_char.bc3, align 1
37 ret void
38}
39; CHECK-LABEL: add_in_place
40; CHECK: .long global_char
41; CHECK: .long p_global_char
42
43define internal void @cmp_global_immediate() {
44entry:
45 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32*
Jim Stichnothe5b58fb2015-06-01 15:17:20 -070046 %0 = load i32, i32* %p_global_char.bc, align 1
Jim Stichnothf1156be2014-11-03 12:36:29 -080047 %expanded1 = ptrtoint [1 x i8]* @global_char to i32
48 %cmp = icmp eq i32 %0, %expanded1
49 br i1 %cmp, label %if.then, label %if.end
50
51if.then: ; preds = %entry
Jan Voung0faec4c2014-11-05 17:29:56 -080052 tail call void @dummy()
Jim Stichnothf1156be2014-11-03 12:36:29 -080053 br label %if.end
54
55if.end: ; preds = %if.then, %entry
56 ret void
57}
58; CHECK-LABEL: cmp_global_immediate
59; CHECK: .long p_global_char
60; CHECK: .long global_char
Jan Voung0faec4c2014-11-05 17:29:56 -080061; CHECK: .long dummy