annotate test/CodeGen/SystemZ/rot-02.ll @ 128:c347d3398279 default tip

fix
author mir3636
date Wed, 06 Dec 2017 14:37:17 +0900
parents 1172e4bd9c6f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
1 ; Test removal of AND operations that don't affect last 6 bits of rotate amount
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
2 ; operand.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
3 ;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
4 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
5
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
6 ; Test that AND is not removed when some lower 6 bits are not set.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
7 define i32 @f1(i32 %val, i32 %amt) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
8 ; CHECK-LABEL: f1:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
9 ; CHECK: nil{{[lf]}} %r3, 31
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
10 ; CHECK: rll %r2, %r2, 0(%r3)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
11 %and = and i32 %amt, 31
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
12
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
13 %inv = sub i32 32, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
14 %parta = shl i32 %val, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
15 %partb = lshr i32 %val, %inv
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
16
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
17 %rotl = or i32 %parta, %partb
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
18
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
19 ret i32 %rotl
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
20 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
21
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
22 ; Test removal of AND mask with only bottom 6 bits set.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
23 define i32 @f2(i32 %val, i32 %amt) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
24 ; CHECK-LABEL: f2:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
25 ; CHECK-NOT: nil{{[lf]}} %r3, 63
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
26 ; CHECK: rll %r2, %r2, 0(%r3)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
27 %and = and i32 %amt, 63
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
28
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
29 %inv = sub i32 32, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
30 %parta = shl i32 %val, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
31 %partb = lshr i32 %val, %inv
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
32
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
33 %rotl = or i32 %parta, %partb
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
34
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
35 ret i32 %rotl
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
36 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
37
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
38 ; Test removal of AND mask including but not limited to bottom 6 bits.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
39 define i32 @f3(i32 %val, i32 %amt) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
40 ; CHECK-LABEL: f3:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
41 ; CHECK-NOT: nil{{[lf]}} %r3, 255
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
42 ; CHECK: rll %r2, %r2, 0(%r3)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
43 %and = and i32 %amt, 255
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
44
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
45 %inv = sub i32 32, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
46 %parta = shl i32 %val, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
47 %partb = lshr i32 %val, %inv
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
48
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
49 %rotl = or i32 %parta, %partb
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
50
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
51 ret i32 %rotl
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
52 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
53
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
54 ; Test removal of AND mask from RLLG.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
55 define i64 @f4(i64 %val, i64 %amt) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
56 ; CHECK-LABEL: f4:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
57 ; CHECK-NOT: nil{{[lf]}} %r3, 63
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
58 ; CHECK: rllg %r2, %r2, 0(%r3)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
59 %and = and i64 %amt, 63
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
60
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
61 %inv = sub i64 64, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
62 %parta = shl i64 %val, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
63 %partb = lshr i64 %val, %inv
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
64
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
65 %rotl = or i64 %parta, %partb
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
66
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
67 ret i64 %rotl
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
68 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
69
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
70 ; Test that AND is not entirely removed if the result is reused.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
71 define i32 @f5(i32 %val, i32 %amt) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
72 ; CHECK-LABEL: f5:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
73 ; CHECK: rll %r2, %r2, 0(%r3)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
74 ; CHECK: nil{{[lf]}} %r3, 63
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
75 ; CHECK: ar %r2, %r3
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
76 %and = and i32 %amt, 63
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
77
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
78 %inv = sub i32 32, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
79 %parta = shl i32 %val, %and
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
80 %partb = lshr i32 %val, %inv
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
81
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
82 %rotl = or i32 %parta, %partb
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
83
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
84 %reuse = add i32 %and, %rotl
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
85 ret i32 %reuse
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
86 }