[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / SystemZ / ctpop-02.ll
blob5b9d41f9af2e9f855b8c2846bac3c4d3630e9f8b
1 ; Test population-count instruction on arch13
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=arch13 | FileCheck %s
5 declare i32 @llvm.ctpop.i32(i32 %a)
6 declare i64 @llvm.ctpop.i64(i64 %a)
8 define i32 @f1(i32 %a) {
9 ; CHECK-LABEL: f1:
10 ; CHECK: llgfr   %r0, %r2
11 ; CHECK: popcnt  %r2, %r0, 8
12 ; CHECK: br      %r14
14   %popcnt = call i32 @llvm.ctpop.i32(i32 %a)
15   ret i32 %popcnt
18 define i32 @f2(i32 %a) {
19 ; CHECK-LABEL: f2:
20 ; CHECK: llghr   %r0, %r2
21 ; CHECK: popcnt  %r2, %r0, 8
22 ; CHECK: br      %r14
23   %and = and i32 %a, 65535
24   %popcnt = call i32 @llvm.ctpop.i32(i32 %and)
25   ret i32 %popcnt
28 define i32 @f3(i32 %a) {
29 ; CHECK-LABEL: f3:
30 ; CHECK: llgcr   %r0, %r2
31 ; CHECK: popcnt  %r2, %r0, 8
32 ; CHECK: br      %r14
33   %and = and i32 %a, 255
34   %popcnt = call i32 @llvm.ctpop.i32(i32 %and)
35   ret i32 %popcnt
38 define i64 @f4(i64 %a) {
39 ; CHECK-LABEL: f4:
40 ; CHECK: popcnt  %r2, %r2, 8
41 ; CHECK: br      %r14
42   %popcnt = call i64 @llvm.ctpop.i64(i64 %a)
43   ret i64 %popcnt
46 define i64 @f5(i64 %a) {
47 ; CHECK-LABEL: f5:
48 ; CHECK: llgfr   %r0, %r2
49 ; CHECK: popcnt  %r2, %r0, 8
50   %and = and i64 %a, 4294967295
51   %popcnt = call i64 @llvm.ctpop.i64(i64 %and)
52   ret i64 %popcnt
55 define i64 @f6(i64 %a) {
56 ; CHECK-LABEL: f6:
57 ; CHECK: llghr   %r0, %r2
58 ; CHECK: popcnt  %r2, %r0, 8
59 ; CHECK: br      %r14
60   %and = and i64 %a, 65535
61   %popcnt = call i64 @llvm.ctpop.i64(i64 %and)
62   ret i64 %popcnt
65 define i64 @f7(i64 %a) {
66 ; CHECK-LABEL: f7:
67 ; CHECK: llgcr   %r0, %r2
68 ; CHECK: popcnt  %r2, %r0, 8
69 ; CHECK: br      %r14
70   %and = and i64 %a, 255
71   %popcnt = call i64 @llvm.ctpop.i64(i64 %and)
72   ret i64 %popcnt