[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / SystemZ / and-06.ll
blob48d696bf532b57ce0c4aae9975f76b598f1b3c87
1 ; Test that we can use NI for byte operations that are expressed as i32
2 ; or i64 operations.
4 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
6 ; Zero extension to 32 bits, negative constant.
7 define void @f1(i8 *%ptr) {
8 ; CHECK-LABEL: f1:
9 ; CHECK: ni 0(%r2), 254
10 ; CHECK: br %r14
11   %val = load i8, i8 *%ptr
12   %ext = zext i8 %val to i32
13   %and = and i32 %ext, -2
14   %trunc = trunc i32 %and to i8
15   store i8 %trunc, i8 *%ptr
16   ret void
19 ; Zero extension to 64 bits, negative constant.
20 define void @f2(i8 *%ptr) {
21 ; CHECK-LABEL: f2:
22 ; CHECK: ni 0(%r2), 254
23 ; CHECK: br %r14
24   %val = load i8, i8 *%ptr
25   %ext = zext i8 %val to i64
26   %and = and i64 %ext, -2
27   %trunc = trunc i64 %and to i8
28   store i8 %trunc, i8 *%ptr
29   ret void
32 ; Zero extension to 32 bits, positive constant.
33 define void @f3(i8 *%ptr) {
34 ; CHECK-LABEL: f3:
35 ; CHECK: ni 0(%r2), 254
36 ; CHECK: br %r14
37   %val = load i8, i8 *%ptr
38   %ext = zext i8 %val to i32
39   %and = and i32 %ext, 254
40   %trunc = trunc i32 %and to i8
41   store i8 %trunc, i8 *%ptr
42   ret void
45 ; Zero extension to 64 bits, positive constant.
46 define void @f4(i8 *%ptr) {
47 ; CHECK-LABEL: f4:
48 ; CHECK: ni 0(%r2), 254
49 ; CHECK: br %r14
50   %val = load i8, i8 *%ptr
51   %ext = zext i8 %val to i64
52   %and = and i64 %ext, 254
53   %trunc = trunc i64 %and to i8
54   store i8 %trunc, i8 *%ptr
55   ret void
58 ; Sign extension to 32 bits, negative constant.
59 define void @f5(i8 *%ptr) {
60 ; CHECK-LABEL: f5:
61 ; CHECK: ni 0(%r2), 254
62 ; CHECK: br %r14
63   %val = load i8, i8 *%ptr
64   %ext = sext i8 %val to i32
65   %and = and i32 %ext, -2
66   %trunc = trunc i32 %and to i8
67   store i8 %trunc, i8 *%ptr
68   ret void
71 ; Sign extension to 64 bits, negative constant.
72 define void @f6(i8 *%ptr) {
73 ; CHECK-LABEL: f6:
74 ; CHECK: ni 0(%r2), 254
75 ; CHECK: br %r14
76   %val = load i8, i8 *%ptr
77   %ext = sext i8 %val to i64
78   %and = and i64 %ext, -2
79   %trunc = trunc i64 %and to i8
80   store i8 %trunc, i8 *%ptr
81   ret void
84 ; Sign extension to 32 bits, positive constant.
85 define void @f7(i8 *%ptr) {
86 ; CHECK-LABEL: f7:
87 ; CHECK: ni 0(%r2), 254
88 ; CHECK: br %r14
89   %val = load i8, i8 *%ptr
90   %ext = sext i8 %val to i32
91   %and = and i32 %ext, 254
92   %trunc = trunc i32 %and to i8
93   store i8 %trunc, i8 *%ptr
94   ret void
97 ; Sign extension to 64 bits, positive constant.
98 define void @f8(i8 *%ptr) {
99 ; CHECK-LABEL: f8:
100 ; CHECK: ni 0(%r2), 254
101 ; CHECK: br %r14
102   %val = load i8, i8 *%ptr
103   %ext = sext i8 %val to i64
104   %and = and i64 %ext, 254
105   %trunc = trunc i64 %and to i8
106   store i8 %trunc, i8 *%ptr
107   ret void