[X86] combineTargetShuffle - commute VPERMV3 shuffles so any load is on the RHS
[llvm-project.git] / llvm / test / CodeGen / SystemZ / scalar-ctlz-02.ll
blob2c3bf944cdf89f267b9ac1f0ffeaed9f99a373de
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
4 ; FIXME: can do better here ...
6 declare i128 @llvm.ctlz.i128(i128, i1)
8 define 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
44 define 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