[Hexagon] Deleting old variants of intrinsics and adding missing tests.
[oota-llvm.git] / test / CodeGen / Hexagon / intrinsics / alu32_perm.ll
1 ; RUN: llc -march=hexagon -O0 < %s | FileCheck %s
2 ; Hexagon Programmer's Reference Manual 11.1.2 ALU32/PERM
3
4 ; Combine words into doubleword
5 declare i64 @llvm.hexagon.A4.combineri(i32, i32)
6 define i64 @A4_combineri(i32 %a) {
7   %z = call i64 @llvm.hexagon.A4.combineri(i32 %a, i32 0)
8   ret i64 %z
9 }
10 ; CHECK:  = combine(r0, #0)
11
12 declare i64 @llvm.hexagon.A4.combineir(i32, i32)
13 define i64 @A4_combineir(i32 %a) {
14   %z = call i64 @llvm.hexagon.A4.combineir(i32 0, i32 %a)
15   ret i64 %z
16 }
17 ; CHECK:  = combine(#0, r0)
18
19 declare i64 @llvm.hexagon.A2.combineii(i32, i32)
20 define i64 @A2_combineii() {
21   %z = call i64 @llvm.hexagon.A2.combineii(i32 0, i32 0)
22   ret i64 %z
23 }
24 ; CHECK: r1:0 = combine(#0, #0)
25
26 declare i32 @llvm.hexagon.A2.combine.hh(i32, i32)
27 define i32 @A2_combine_hh(i32 %a, i32 %b) {
28   %z = call i32 @llvm.hexagon.A2.combine.hh(i32 %a, i32 %b)
29   ret i32 %z
30 }
31 ; CHECK: r0 = combine(r0.h, r1.h)
32
33 declare i32 @llvm.hexagon.A2.combine.hl(i32, i32)
34 define i32 @A2_combine_hl(i32 %a, i32 %b) {
35   %z = call i32 @llvm.hexagon.A2.combine.hl(i32 %a, i32 %b)
36   ret i32 %z
37 }
38 ; CHECK: r0 = combine(r0.h, r1.l)
39
40 declare i32 @llvm.hexagon.A2.combine.lh(i32, i32)
41 define i32 @A2_combine_lh(i32 %a, i32 %b) {
42   %z = call i32 @llvm.hexagon.A2.combine.lh(i32 %a, i32 %b)
43   ret i32 %z
44 }
45 ; CHECK: r0 = combine(r0.l, r1.h)
46
47 declare i32 @llvm.hexagon.A2.combine.ll(i32, i32)
48 define i32 @A2_combine_ll(i32 %a, i32 %b) {
49   %z = call i32 @llvm.hexagon.A2.combine.ll(i32 %a, i32 %b)
50   ret i32 %z
51 }
52 ; CHECK: r0 = combine(r0.l, r1.l)
53
54 declare i64 @llvm.hexagon.A2.combinew(i32, i32)
55 define i64 @A2_combinew(i32 %a, i32 %b) {
56   %z = call i64 @llvm.hexagon.A2.combinew(i32 %a, i32 %b)
57   ret i64 %z
58 }
59 ; CHECK: r1:0 = combine(r0, r1)
60
61 ; Mux
62 declare i32 @llvm.hexagon.C2.muxri(i32, i32, i32)
63 define i32 @C2_muxri(i32 %a, i32 %b) {
64   %z = call i32 @llvm.hexagon.C2.muxri(i32 %a, i32 0, i32 %b)
65   ret i32 %z
66 }
67 ; CHECK: r0 = mux(p0, #0, r1)
68
69 declare i32 @llvm.hexagon.C2.muxir(i32, i32, i32)
70 define i32 @C2_muxir(i32 %a, i32 %b) {
71   %z = call i32 @llvm.hexagon.C2.muxir(i32 %a, i32 %b, i32 0)
72   ret i32 %z
73 }
74 ; CHECK: r0 = mux(p0, r1, #0)
75
76 declare i32 @llvm.hexagon.C2.mux(i32, i32, i32)
77 define i32 @C2_mux(i32 %a, i32 %b, i32 %c) {
78   %z = call i32 @llvm.hexagon.C2.mux(i32 %a, i32 %b, i32 %c)
79   ret i32 %z
80 }
81 ; CHECK: r0 = mux(p0, r1, r2)
82
83 ; Shift word by 16
84 declare i32 @llvm.hexagon.A2.aslh(i32)
85 define i32 @A2_aslh(i32 %a) {
86   %z = call i32 @llvm.hexagon.A2.aslh(i32 %a)
87   ret i32 %z
88 }
89 ; CHECK: r0 = aslh(r0)
90
91 declare i32 @llvm.hexagon.A2.asrh(i32)
92 define i32 @A2_asrh(i32 %a) {
93   %z = call i32 @llvm.hexagon.A2.asrh(i32 %a)
94   ret i32 %z
95 }
96 ; CHECK: r0 = asrh(r0)
97
98 ; Pack high and low halfwords
99 declare i64 @llvm.hexagon.S2.packhl(i32, i32)
100 define i64 @S2_packhl(i32 %a, i32 %b) {
101   %z = call i64 @llvm.hexagon.S2.packhl(i32 %a, i32 %b)
102   ret i64 %z
103 }
104 ; CHECK: r1:0 = packhl(r0, r1)