]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - opencl/llvm.git/blob - test/CodeGen/SystemZ/int-add-12.ll
Mass update to CodeGen tests to use CHECK-LABEL for labels corresponding to function...
[opencl/llvm.git] / test / CodeGen / SystemZ / int-add-12.ll
1 ; Test 64-bit additions of constants to memory.
2 ;
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5 ; Check additions of 1.
6 define void @f1(i64 *%ptr) {
7 ; CHECK-LABEL: f1:
8 ; CHECK: agsi 0(%r2), 1
9 ; CHECK: br %r14
10   %val = load i64 *%ptr
11   %add = add i64 %val, 127
12   store i64 %add, i64 *%ptr
13   ret void
14 }
16 ; Check the high end of the constant range.
17 define void @f2(i64 *%ptr) {
18 ; CHECK-LABEL: f2:
19 ; CHECK: agsi 0(%r2), 127
20 ; CHECK: br %r14
21   %val = load i64 *%ptr
22   %add = add i64 %val, 127
23   store i64 %add, i64 *%ptr
24   ret void
25 }
27 ; Check the next constant up, which must use an addition and a store.
28 ; Both LG/AGHI and LGHI/AG would be OK.
29 define void @f3(i64 *%ptr) {
30 ; CHECK-LABEL: f3:
31 ; CHECK-NOT: agsi
32 ; CHECK: stg %r0, 0(%r2)
33 ; CHECK: br %r14
34   %val = load i64 *%ptr
35   %add = add i64 %val, 128
36   store i64 %add, i64 *%ptr
37   ret void
38 }
40 ; Check the low end of the constant range.
41 define void @f4(i64 *%ptr) {
42 ; CHECK-LABEL: f4:
43 ; CHECK: agsi 0(%r2), -128
44 ; CHECK: br %r14
45   %val = load i64 *%ptr
46   %add = add i64 %val, -128
47   store i64 %add, i64 *%ptr
48   ret void
49 }
51 ; Check the next value down, with the same comment as f3.
52 define void @f5(i64 *%ptr) {
53 ; CHECK-LABEL: f5:
54 ; CHECK-NOT: agsi
55 ; CHECK: stg %r0, 0(%r2)
56 ; CHECK: br %r14
57   %val = load i64 *%ptr
58   %add = add i64 %val, -129
59   store i64 %add, i64 *%ptr
60   ret void
61 }
63 ; Check the high end of the aligned AGSI range.
64 define void @f6(i64 *%base) {
65 ; CHECK-LABEL: f6:
66 ; CHECK: agsi 524280(%r2), 1
67 ; CHECK: br %r14
68   %ptr = getelementptr i64 *%base, i64 65535
69   %val = load i64 *%ptr
70   %add = add i64 %val, 1
71   store i64 %add, i64 *%ptr
72   ret void
73 }
75 ; Check the next doubleword up, which must use separate address logic.
76 ; Other sequences besides this one would be OK.
77 define void @f7(i64 *%base) {
78 ; CHECK-LABEL: f7:
79 ; CHECK: agfi %r2, 524288
80 ; CHECK: agsi 0(%r2), 1
81 ; CHECK: br %r14
82   %ptr = getelementptr i64 *%base, i64 65536
83   %val = load i64 *%ptr
84   %add = add i64 %val, 1
85   store i64 %add, i64 *%ptr
86   ret void
87 }
89 ; Check the low end of the AGSI range.
90 define void @f8(i64 *%base) {
91 ; CHECK-LABEL: f8:
92 ; CHECK: agsi -524288(%r2), 1
93 ; CHECK: br %r14
94   %ptr = getelementptr i64 *%base, i64 -65536
95   %val = load i64 *%ptr
96   %add = add i64 %val, 1
97   store i64 %add, i64 *%ptr
98   ret void
99 }
101 ; Check the next doubleword down, which must use separate address logic.
102 ; Other sequences besides this one would be OK.
103 define void @f9(i64 *%base) {
104 ; CHECK-LABEL: f9:
105 ; CHECK: agfi %r2, -524296
106 ; CHECK: agsi 0(%r2), 1
107 ; CHECK: br %r14
108   %ptr = getelementptr i64 *%base, i64 -65537
109   %val = load i64 *%ptr
110   %add = add i64 %val, 1
111   store i64 %add, i64 *%ptr
112   ret void
115 ; Check that AGSI does not allow indices.
116 define void @f10(i64 %base, i64 %index) {
117 ; CHECK-LABEL: f10:
118 ; CHECK: agr %r2, %r3
119 ; CHECK: agsi 8(%r2), 1
120 ; CHECK: br %r14
121   %add1 = add i64 %base, %index
122   %add2 = add i64 %add1, 8
123   %ptr = inttoptr i64 %add2 to i64 *
124   %val = load i64 *%ptr
125   %add = add i64 %val, 1
126   store i64 %add, i64 *%ptr
127   ret void