This should always be signed chars, so use int8_t. This fixes a miscompile when
[llvm/stm8.git] / test / CodeGen / SystemZ / 02-MemArith.ll
blob04022a063f166c1ab111e2213d94083bcb0553c2
1 ; RUN: llc < %s -march=systemz | FileCheck %s
3 define i32 @foo1(i32 %a, i32 *%b, i64 %idx) signext {
4 ; CHECK: foo1:
5 ; CHECK:  a %r2, 4(%r1,%r3)
6 entry:
7     %idx2 = add i64 %idx, 1         ; <i64> [#uses=1]
8     %ptr = getelementptr i32* %b, i64 %idx2          ; <i32*> [#uses=1]
9     %c = load i32* %ptr
10     %d = add i32 %a, %c
11     ret i32 %d
14 define i32 @foo2(i32 %a, i32 *%b, i64 %idx) signext {
15 ; CHECK: foo2:
16 ; CHECK:  ay %r2, -4(%r1,%r3)
17 entry:
18     %idx2 = add i64 %idx, -1         ; <i64> [#uses=1]
19     %ptr = getelementptr i32* %b, i64 %idx2          ; <i32*> [#uses=1]
20     %c = load i32* %ptr
21     %d = add i32 %a, %c
22     ret i32 %d
25 define i64 @foo3(i64 %a, i64 *%b, i64 %idx) signext {
26 ; CHECK: foo3:
27 ; CHECK:  ag %r2, 8(%r1,%r3)
28 entry:
29     %idx2 = add i64 %idx, 1         ; <i64> [#uses=1]
30     %ptr = getelementptr i64* %b, i64 %idx2          ; <i64*> [#uses=1]
31     %c = load i64* %ptr
32     %d = add i64 %a, %c
33     ret i64 %d
36 define i32 @foo4(i32 %a, i32 *%b, i64 %idx) signext {
37 ; CHECK: foo4:
38 ; CHECK:  n %r2, 4(%r1,%r3)
39 entry:
40     %idx2 = add i64 %idx, 1         ; <i64> [#uses=1]
41     %ptr = getelementptr i32* %b, i64 %idx2          ; <i32*> [#uses=1]
42     %c = load i32* %ptr
43     %d = and i32 %a, %c
44     ret i32 %d
47 define i32 @foo5(i32 %a, i32 *%b, i64 %idx) signext {
48 ; CHECK: foo5:
49 ; CHECK:  ny %r2, -4(%r1,%r3)
50 entry:
51     %idx2 = add i64 %idx, -1         ; <i64> [#uses=1]
52     %ptr = getelementptr i32* %b, i64 %idx2          ; <i32*> [#uses=1]
53     %c = load i32* %ptr
54     %d = and i32 %a, %c
55     ret i32 %d
58 define i64 @foo6(i64 %a, i64 *%b, i64 %idx) signext {
59 ; CHECK: foo6:
60 ; CHECK:  ng %r2, 8(%r1,%r3)
61 entry:
62     %idx2 = add i64 %idx, 1         ; <i64> [#uses=1]
63     %ptr = getelementptr i64* %b, i64 %idx2          ; <i64*> [#uses=1]
64     %c = load i64* %ptr
65     %d = and i64 %a, %c
66     ret i64 %d
69 define i32 @foo7(i32 %a, i32 *%b, i64 %idx) signext {
70 ; CHECK: foo7:
71 ; CHECK:  o %r2, 4(%r1,%r3)
72 entry:
73     %idx2 = add i64 %idx, 1         ; <i64> [#uses=1]
74     %ptr = getelementptr i32* %b, i64 %idx2          ; <i32*> [#uses=1]
75     %c = load i32* %ptr
76     %d = or i32 %a, %c
77     ret i32 %d
80 define i32 @foo8(i32 %a, i32 *%b, i64 %idx) signext {
81 ; CHECK: foo8:
82 ; CHECK:  oy %r2, -4(%r1,%r3)
83 entry:
84     %idx2 = add i64 %idx, -1         ; <i64> [#uses=1]
85     %ptr = getelementptr i32* %b, i64 %idx2          ; <i32*> [#uses=1]
86     %c = load i32* %ptr
87     %d = or i32 %a, %c
88     ret i32 %d
91 define i64 @foo9(i64 %a, i64 *%b, i64 %idx) signext {
92 ; CHECK: foo9:
93 ; CHECK:  og %r2, 8(%r1,%r3)
94 entry:
95     %idx2 = add i64 %idx, 1         ; <i64> [#uses=1]
96     %ptr = getelementptr i64* %b, i64 %idx2          ; <i64*> [#uses=1]
97     %c = load i64* %ptr
98     %d = or i64 %a, %c
99     ret i64 %d
102 define i32 @foo10(i32 %a, i32 *%b, i64 %idx) signext {
103 ; CHECK: foo10:
104 ; CHECK:  x %r2, 4(%r1,%r3)
105 entry:
106     %idx2 = add i64 %idx, 1         ; <i64> [#uses=1]
107     %ptr = getelementptr i32* %b, i64 %idx2          ; <i32*> [#uses=1]
108     %c = load i32* %ptr
109     %d = xor i32 %a, %c
110     ret i32 %d
113 define i32 @foo11(i32 %a, i32 *%b, i64 %idx) signext {
114 ; CHECK: foo11:
115 ; CHECK:  xy %r2, -4(%r1,%r3)
116 entry:
117     %idx2 = add i64 %idx, -1         ; <i64> [#uses=1]
118     %ptr = getelementptr i32* %b, i64 %idx2          ; <i32*> [#uses=1]
119     %c = load i32* %ptr
120     %d = xor i32 %a, %c
121     ret i32 %d
124 define i64 @foo12(i64 %a, i64 *%b, i64 %idx) signext {
125 ; CHECK: foo12:
126 ; CHECK:  xg %r2, 8(%r1,%r3)
127 entry:
128     %idx2 = add i64 %idx, 1         ; <i64> [#uses=1]
129     %ptr = getelementptr i64* %b, i64 %idx2          ; <i64*> [#uses=1]
130     %c = load i64* %ptr
131     %d = xor i64 %a, %c
132     ret i64 %d