xref: /llvm-project/llvm/test/CodeGen/SystemZ/scalar-ctlz-02.ll (revision a65ccc1b9fe740c9f65d9cf2b627de50278aad56)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
3
4; FIXME: can do better here ...
5
6declare i128 @llvm.ctlz.i128(i128, i1)
7
8define i128 @f1(i128 %a) {
9; CHECK-LABEL: f1:
10; CHECK:       # %bb.0:
11; CHECK-NEXT:    vl %v0, 0(%r3), 3
12; CHECK-NEXT:    vrepib %v1, 1
13; CHECK-NEXT:    vsrl %v1, %v0, %v1
14; CHECK-NEXT:    vo %v0, %v0, %v1
15; CHECK-NEXT:    vrepib %v1, 2
16; CHECK-NEXT:    vsrl %v1, %v0, %v1
17; CHECK-NEXT:    vo %v0, %v0, %v1
18; CHECK-NEXT:    vrepib %v1, 4
19; CHECK-NEXT:    vsrl %v1, %v0, %v1
20; CHECK-NEXT:    vo %v0, %v0, %v1
21; CHECK-NEXT:    vrepib %v1, 8
22; CHECK-NEXT:    vsrlb %v1, %v0, %v1
23; CHECK-NEXT:    vo %v0, %v0, %v1
24; CHECK-NEXT:    vrepib %v1, 16
25; CHECK-NEXT:    vsrlb %v1, %v0, %v1
26; CHECK-NEXT:    vo %v0, %v0, %v1
27; CHECK-NEXT:    vrepib %v1, 32
28; CHECK-NEXT:    vsrlb %v1, %v0, %v1
29; CHECK-NEXT:    vo %v0, %v0, %v1
30; CHECK-NEXT:    vrepib %v1, 64
31; CHECK-NEXT:    vsrlb %v1, %v0, %v1
32; CHECK-NEXT:    vno %v0, %v0, %v1
33; CHECK-NEXT:    vpopct %v0, %v0, 0
34; CHECK-NEXT:    vgbm %v1, 0
35; CHECK-NEXT:    vsumb %v0, %v0, %v1
36; CHECK-NEXT:    vsumgf %v0, %v0, %v1
37; CHECK-NEXT:    vsumqg %v0, %v0, %v1
38; CHECK-NEXT:    vst %v0, 0(%r2), 3
39; CHECK-NEXT:    br %r14
40  %res = tail call i128 @llvm.ctlz.i128(i128 %a, i1 false)
41  ret i128 %res
42}
43
44define i128 @f2(i128 %a) {
45; CHECK-LABEL: f2:
46; CHECK:       # %bb.0:
47; CHECK-NEXT:    vl %v0, 0(%r3), 3
48; CHECK-NEXT:    vrepib %v1, 1
49; CHECK-NEXT:    vsrl %v1, %v0, %v1
50; CHECK-NEXT:    vo %v0, %v0, %v1
51; CHECK-NEXT:    vrepib %v1, 2
52; CHECK-NEXT:    vsrl %v1, %v0, %v1
53; CHECK-NEXT:    vo %v0, %v0, %v1
54; CHECK-NEXT:    vrepib %v1, 4
55; CHECK-NEXT:    vsrl %v1, %v0, %v1
56; CHECK-NEXT:    vo %v0, %v0, %v1
57; CHECK-NEXT:    vrepib %v1, 8
58; CHECK-NEXT:    vsrlb %v1, %v0, %v1
59; CHECK-NEXT:    vo %v0, %v0, %v1
60; CHECK-NEXT:    vrepib %v1, 16
61; CHECK-NEXT:    vsrlb %v1, %v0, %v1
62; CHECK-NEXT:    vo %v0, %v0, %v1
63; CHECK-NEXT:    vrepib %v1, 32
64; CHECK-NEXT:    vsrlb %v1, %v0, %v1
65; CHECK-NEXT:    vo %v0, %v0, %v1
66; CHECK-NEXT:    vrepib %v1, 64
67; CHECK-NEXT:    vsrlb %v1, %v0, %v1
68; CHECK-NEXT:    vno %v0, %v0, %v1
69; CHECK-NEXT:    vpopct %v0, %v0, 0
70; CHECK-NEXT:    vgbm %v1, 0
71; CHECK-NEXT:    vsumb %v0, %v0, %v1
72; CHECK-NEXT:    vsumgf %v0, %v0, %v1
73; CHECK-NEXT:    vsumqg %v0, %v0, %v1
74; CHECK-NEXT:    vst %v0, 0(%r2), 3
75; CHECK-NEXT:    br %r14
76  %res = tail call i128 @llvm.ctlz.i128(i128 %a, i1 true)
77  ret i128 %res
78}
79