blob: 0fc8ba4bf1dce1bfdcd68aaf0c585ca324373e4a [file] [log] [blame]
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +00001; RUN: llc -march=hexagon < %s | FileCheck %s
2
3; CHECK-LABEL: t00
Sanjay Patelf24900b2018-12-16 14:57:04 +00004; CHECK: vand(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +00005define <128 x i8> @t00(<128 x i8> %a0, <128 x i8> %a1) #0 {
6 %q0 = trunc <128 x i8> %a0 to <128 x i1>
7 %q1 = trunc <128 x i8> %a1 to <128 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +00008 %q2 = and <128 x i1> %q0, %q1
9 %v0 = zext <128 x i1> %q2 to <128 x i8>
10 ret <128 x i8> %v0
11}
12
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000013declare <1024 x i1> @llvm.hexagon.vandvrt.128B(<128 x i8>, i32)
14
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000015; CHECK-LABEL: t01
Sanjay Patelf24900b2018-12-16 14:57:04 +000016; CHECK: vor(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000017define <128 x i8> @t01(<128 x i8> %a0, <128 x i8> %a1) #0 {
18 %q0 = trunc <128 x i8> %a0 to <128 x i1>
19 %q1 = trunc <128 x i8> %a1 to <128 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000020 %q2 = or <128 x i1> %q0, %q1
21 %v0 = zext <128 x i1> %q2 to <128 x i8>
22 ret <128 x i8> %v0
23}
24
25; CHECK-LABEL: t02
Sanjay Patelf24900b2018-12-16 14:57:04 +000026; CHECK: vxor(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000027define <128 x i8> @t02(<128 x i8> %a0, <128 x i8> %a1) #0 {
28 %q0 = trunc <128 x i8> %a0 to <128 x i1>
29 %q1 = trunc <128 x i8> %a1 to <128 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000030 %q2 = xor <128 x i1> %q0, %q1
31 %v0 = zext <128 x i1> %q2 to <128 x i8>
32 ret <128 x i8> %v0
33}
34
35; CHECK-LABEL: t10
Sanjay Patelf24900b2018-12-16 14:57:04 +000036; CHECK: vand(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000037define <64 x i16> @t10(<64 x i16> %a0, <64 x i16> %a1) #0 {
38 %q0 = trunc <64 x i16> %a0 to <64 x i1>
39 %q1 = trunc <64 x i16> %a1 to <64 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000040 %q2 = and <64 x i1> %q0, %q1
41 %v0 = zext <64 x i1> %q2 to <64 x i16>
42 ret <64 x i16> %v0
43}
44
45; CHECK-LABEL: t11
Sanjay Patelf24900b2018-12-16 14:57:04 +000046; CHECK: vor(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000047define <64 x i16> @t11(<64 x i16> %a0, <64 x i16> %a1) #0 {
48 %q0 = trunc <64 x i16> %a0 to <64 x i1>
49 %q1 = trunc <64 x i16> %a1 to <64 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000050 %q2 = or <64 x i1> %q0, %q1
51 %v0 = zext <64 x i1> %q2 to <64 x i16>
52 ret <64 x i16> %v0
53}
54
55; CHECK-LABEL: t12
Sanjay Patelf24900b2018-12-16 14:57:04 +000056; CHECK: vxor(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000057define <64 x i16> @t12(<64 x i16> %a0, <64 x i16> %a1) #0 {
58 %q0 = trunc <64 x i16> %a0 to <64 x i1>
59 %q1 = trunc <64 x i16> %a1 to <64 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000060 %q2 = xor <64 x i1> %q0, %q1
61 %v0 = zext <64 x i1> %q2 to <64 x i16>
62 ret <64 x i16> %v0
63}
64
65; CHECK-LABEL: t20
Sanjay Patelf24900b2018-12-16 14:57:04 +000066; CHECK: vand(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000067define <32 x i32> @t20(<32 x i32> %a0, <32 x i32> %a1) #0 {
68 %q0 = trunc <32 x i32> %a0 to <32 x i1>
69 %q1 = trunc <32 x i32> %a1 to <32 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000070 %q2 = and <32 x i1> %q0, %q1
71 %v0 = zext <32 x i1> %q2 to <32 x i32>
72 ret <32 x i32> %v0
73}
74
75; CHECK-LABEL: t21
Sanjay Patelf24900b2018-12-16 14:57:04 +000076; CHECK: vor(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000077define <32 x i32> @t21(<32 x i32> %a0, <32 x i32> %a1) #0 {
78 %q0 = trunc <32 x i32> %a0 to <32 x i1>
79 %q1 = trunc <32 x i32> %a1 to <32 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000080 %q2 = or <32 x i1> %q0, %q1
81 %v0 = zext <32 x i1> %q2 to <32 x i32>
82 ret <32 x i32> %v0
83}
84
85; CHECK-LABEL: t22
Sanjay Patelf24900b2018-12-16 14:57:04 +000086; CHECK: vxor(v{{[0-9:]+}},v{{[0-9:]+}})
Krzysztof Parzyszek840b02b2018-05-22 18:27:02 +000087define <32 x i32> @t22(<32 x i32> %a0, <32 x i32> %a1) #0 {
88 %q0 = trunc <32 x i32> %a0 to <32 x i1>
89 %q1 = trunc <32 x i32> %a1 to <32 x i1>
Krzysztof Parzyszeke8a0ae72018-05-16 21:00:24 +000090 %q2 = xor <32 x i1> %q0, %q1
91 %v0 = zext <32 x i1> %q2 to <32 x i32>
92 ret <32 x i32> %v0
93}
94
95attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length128b" }