1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
3; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck %s
4
5; mask 0xFFFFFFFE
6define i32 @test1(i32 %a) {
7; CHECK-LABEL: test1:
8; CHECK:       # %bb.0:
9; CHECK-NEXT:    rlwinm 3, 3, 0, 0, 30
10; CHECK-NEXT:    blr
11  %and = and i32 %a, -2
12  ret i32 %and
13}
14
15; mask 0xFFFFFFFFFFFFFFF9
16define i64 @test2(i64 %a) {
17; CHECK-LABEL: test2:
18; CHECK:       # %bb.0:
19; CHECK-NEXT:    rldicl 3, 3, 61, 2
20; CHECK-NEXT:    rotldi 3, 3, 3
21; CHECK-NEXT:    blr
22  %and = and i64 %a, -7
23  ret i64 %and
24}
25
26; mask: 0xFFFFFFC00000
27define i64 @test3(i64 %a) {
28; CHECK-LABEL: test3:
29; CHECK:       # %bb.0:
30; CHECK-NEXT:    rldicl 3, 3, 42, 22
31; CHECK-NEXT:    rldicl 3, 3, 22, 16
32; CHECK-NEXT:    blr
33  %and = and i64 %a, 281474972516352
34  ret i64 %and
35}
36
37; mask: 0xC000000FF
38define i64 @test4(i64 %a) {
39; CHECK-LABEL: test4:
40; CHECK:       # %bb.0:
41; CHECK-NEXT:    rldicl 3, 3, 30, 26
42; CHECK-NEXT:    rldicl 3, 3, 34, 28
43; CHECK-NEXT:    blr
44  %and = and i64 %a, 51539607807
45  ret i64 %and
46}
47
48; mask: 0xFFC0FFFF
49define i64 @test5(i64 %a) {
50; CHECK-LABEL: test5:
51; CHECK:       # %bb.0:
52; CHECK-NEXT:    rldicl 3, 3, 42, 6
53; CHECK-NEXT:    rldicl 3, 3, 22, 32
54; CHECK-NEXT:    blr
55  %and = and i64 %a, 4290838527
56  ret i64 %and
57}
58
59; mask: 0x3FC0FFE0
60define i64 @test6(i64 %a) {
61; CHECK-LABEL: test6:
62; CHECK:       # %bb.0:
63; CHECK-NEXT:    lis 4, 16320
64; CHECK-NEXT:    ori 4, 4, 65504
65; CHECK-NEXT:    and 3, 3, 4
66; CHECK-NEXT:    blr
67  %and = and i64 %a, 1069613024
68  ret i64 %and
69}
70
71; mask: 0x3FC000001FFFF
72define i64 @test7(i64 %a) {
73; CHECK-LABEL: test7:
74; CHECK:       # %bb.0:
75; CHECK-NEXT:    rldicl 3, 3, 22, 25
76; CHECK-NEXT:    rldicl 3, 3, 42, 14
77; CHECK-NEXT:    blr
78  %and = and i64 %a, 1121501860462591
79  ret i64 %and
80}
81