[SelectionDAGBuilder] Make sure DemoteReg ends up in right reg-class.
[oota-llvm.git] / test / CodeGen / SystemZ / or-06.ll
1 ; Test that we can use OI 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: oi 0(%r2), 254
10 ; CHECK: br %r14
11   %val = load i8 , i8 *%ptr
12   %ext = zext i8 %val to i32
13   %or = or i32 %ext, -2
14   %trunc = trunc i32 %or 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: oi 0(%r2), 254
23 ; CHECK: br %r14
24   %val = load i8 , i8 *%ptr
25   %ext = zext i8 %val to i64
26   %or = or i64 %ext, -2
27   %trunc = trunc i64 %or 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: oi 0(%r2), 254
36 ; CHECK: br %r14
37   %val = load i8 , i8 *%ptr
38   %ext = zext i8 %val to i32
39   %or = or i32 %ext, 254
40   %trunc = trunc i32 %or 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: oi 0(%r2), 254
49 ; CHECK: br %r14
50   %val = load i8 , i8 *%ptr
51   %ext = zext i8 %val to i64
52   %or = or i64 %ext, 254
53   %trunc = trunc i64 %or 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: oi 0(%r2), 254
62 ; CHECK: br %r14
63   %val = load i8 , i8 *%ptr
64   %ext = sext i8 %val to i32
65   %or = or i32 %ext, -2
66   %trunc = trunc i32 %or 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: oi 0(%r2), 254
75 ; CHECK: br %r14
76   %val = load i8 , i8 *%ptr
77   %ext = sext i8 %val to i64
78   %or = or i64 %ext, -2
79   %trunc = trunc i64 %or 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: oi 0(%r2), 254
88 ; CHECK: br %r14
89   %val = load i8 , i8 *%ptr
90   %ext = sext i8 %val to i32
91   %or = or i32 %ext, 254
92   %trunc = trunc i32 %or 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: oi 0(%r2), 254
101 ; CHECK: br %r14
102   %val = load i8 , i8 *%ptr
103   %ext = sext i8 %val to i64
104   %or = or i64 %ext, 254
105   %trunc = trunc i64 %or to i8
106   store i8 %trunc, i8 *%ptr
107   ret void
108 }