Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/SystemZ/xor-06.ll @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | afa8332a0e37 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:95c75e76d11b |
---|---|
1 ; Test that we can use XI for byte operations that are expressed as i32 | |
2 ; or i64 operations. | |
3 ; | |
4 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s | |
5 | |
6 ; Zero extension to 32 bits, negative constant. | |
7 define void @f1(i8 *%ptr) { | |
8 ; CHECK-LABEL: f1: | |
9 ; CHECK: xi 0(%r2), 254 | |
10 ; CHECK: br %r14 | |
11 %val = load i8 *%ptr | |
12 %ext = zext i8 %val to i32 | |
13 %xor = xor i32 %ext, -2 | |
14 %trunc = trunc i32 %xor to i8 | |
15 store i8 %trunc, i8 *%ptr | |
16 ret void | |
17 } | |
18 | |
19 ; Zero extension to 64 bits, negative constant. | |
20 define void @f2(i8 *%ptr) { | |
21 ; CHECK-LABEL: f2: | |
22 ; CHECK: xi 0(%r2), 254 | |
23 ; CHECK: br %r14 | |
24 %val = load i8 *%ptr | |
25 %ext = zext i8 %val to i64 | |
26 %xor = xor i64 %ext, -2 | |
27 %trunc = trunc i64 %xor to i8 | |
28 store i8 %trunc, i8 *%ptr | |
29 ret void | |
30 } | |
31 | |
32 ; Zero extension to 32 bits, positive constant. | |
33 define void @f3(i8 *%ptr) { | |
34 ; CHECK-LABEL: f3: | |
35 ; CHECK: xi 0(%r2), 254 | |
36 ; CHECK: br %r14 | |
37 %val = load i8 *%ptr | |
38 %ext = zext i8 %val to i32 | |
39 %xor = xor i32 %ext, 254 | |
40 %trunc = trunc i32 %xor to i8 | |
41 store i8 %trunc, i8 *%ptr | |
42 ret void | |
43 } | |
44 | |
45 ; Zero extension to 64 bits, positive constant. | |
46 define void @f4(i8 *%ptr) { | |
47 ; CHECK-LABEL: f4: | |
48 ; CHECK: xi 0(%r2), 254 | |
49 ; CHECK: br %r14 | |
50 %val = load i8 *%ptr | |
51 %ext = zext i8 %val to i64 | |
52 %xor = xor i64 %ext, 254 | |
53 %trunc = trunc i64 %xor to i8 | |
54 store i8 %trunc, i8 *%ptr | |
55 ret void | |
56 } | |
57 | |
58 ; Sign extension to 32 bits, negative constant. | |
59 define void @f5(i8 *%ptr) { | |
60 ; CHECK-LABEL: f5: | |
61 ; CHECK: xi 0(%r2), 254 | |
62 ; CHECK: br %r14 | |
63 %val = load i8 *%ptr | |
64 %ext = sext i8 %val to i32 | |
65 %xor = xor i32 %ext, -2 | |
66 %trunc = trunc i32 %xor to i8 | |
67 store i8 %trunc, i8 *%ptr | |
68 ret void | |
69 } | |
70 | |
71 ; Sign extension to 64 bits, negative constant. | |
72 define void @f6(i8 *%ptr) { | |
73 ; CHECK-LABEL: f6: | |
74 ; CHECK: xi 0(%r2), 254 | |
75 ; CHECK: br %r14 | |
76 %val = load i8 *%ptr | |
77 %ext = sext i8 %val to i64 | |
78 %xor = xor i64 %ext, -2 | |
79 %trunc = trunc i64 %xor to i8 | |
80 store i8 %trunc, i8 *%ptr | |
81 ret void | |
82 } | |
83 | |
84 ; Sign extension to 32 bits, positive constant. | |
85 define void @f7(i8 *%ptr) { | |
86 ; CHECK-LABEL: f7: | |
87 ; CHECK: xi 0(%r2), 254 | |
88 ; CHECK: br %r14 | |
89 %val = load i8 *%ptr | |
90 %ext = sext i8 %val to i32 | |
91 %xor = xor i32 %ext, 254 | |
92 %trunc = trunc i32 %xor to i8 | |
93 store i8 %trunc, i8 *%ptr | |
94 ret void | |
95 } | |
96 | |
97 ; Sign extension to 64 bits, positive constant. | |
98 define void @f8(i8 *%ptr) { | |
99 ; CHECK-LABEL: f8: | |
100 ; CHECK: xi 0(%r2), 254 | |
101 ; CHECK: br %r14 | |
102 %val = load i8 *%ptr | |
103 %ext = sext i8 %val to i64 | |
104 %xor = xor i64 %ext, 254 | |
105 %trunc = trunc i64 %xor to i8 | |
106 store i8 %trunc, i8 *%ptr | |
107 ret void | |
108 } |