[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / saturating-intrinsics.ll
blob05d9e2710d342be97701813d8d3f8d447ac2acf4
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O3 -mtriple=powerpc64le-unknown-unknown -ppc-asm-full-reg-names \
3 ; RUN:   -verify-machineinstrs -mcpu=pwr7 < %s | FileCheck %s
4 define dso_local <16 x i8 > @vectorsaddb(<16 x i8 > %a, <16 x i8 > %b) {
5 ; CHECK-LABEL: vectorsaddb:
6 ; CHECK:       # %bb.0: # %entry
7 ; CHECK-NEXT:    vaddsbs v2, v2, v3
8 ; CHECK-NEXT:    blr
9 entry:
10   %call = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %a, <16 x i8> %b)
11   ret <16 x i8> %call
14 define dso_local <16 x i8 > @vectorssubb(<16 x i8 > %a, <16 x i8 > %b) {
15 ; CHECK-LABEL: vectorssubb:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    vsubsbs v2, v2, v3
18 ; CHECK-NEXT:    blr
19 entry:
20   %call = call <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8> %a, <16 x i8> %b)
21   ret <16 x i8> %call
24 define dso_local <16 x i8 > @vectoruaddb(<16 x i8 > %a, <16 x i8 > %b) {
25 ; CHECK-LABEL: vectoruaddb:
26 ; CHECK:       # %bb.0: # %entry
27 ; CHECK-NEXT:    vaddubs v2, v2, v3
28 ; CHECK-NEXT:    blr
29 entry:
30   %call = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %a, <16 x i8> %b)
31   ret <16 x i8> %call
34 define dso_local <16 x i8 > @vectorusubb(<16 x i8 > %a, <16 x i8 > %b) {
35 ; CHECK-LABEL: vectorusubb:
36 ; CHECK:       # %bb.0: # %entry
37 ; CHECK-NEXT:    vsububs v2, v2, v3
38 ; CHECK-NEXT:    blr
39 entry:
40   %call = call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %a, <16 x i8> %b)
41   ret <16 x i8> %call
44 define dso_local <8 x i16 > @vectorsaddh(<8 x i16 > %a, <8 x i16 > %b) {
45 ; CHECK-LABEL: vectorsaddh:
46 ; CHECK:       # %bb.0: # %entry
47 ; CHECK-NEXT:    vaddshs v2, v2, v3
48 ; CHECK-NEXT:    blr
49 entry:
50   %call = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %a, <8 x i16> %b)
51   ret <8 x i16> %call
54 define dso_local <8 x i16 > @vectorssubh(<8 x i16 > %a, <8 x i16 > %b) {
55 ; CHECK-LABEL: vectorssubh:
56 ; CHECK:       # %bb.0: # %entry
57 ; CHECK-NEXT:    vsubshs v2, v2, v3
58 ; CHECK-NEXT:    blr
59 entry:
60   %call = call <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16> %a, <8 x i16> %b)
61   ret <8 x i16> %call
64 define dso_local <8 x i16 > @vectoruaddh(<8 x i16 > %a, <8 x i16 > %b) {
65 ; CHECK-LABEL: vectoruaddh:
66 ; CHECK:       # %bb.0: # %entry
67 ; CHECK-NEXT:    vadduhs v2, v2, v3
68 ; CHECK-NEXT:    blr
69 entry:
70   %call = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %a, <8 x i16> %b)
71   ret <8 x i16> %call
74 define dso_local <8 x i16 > @vectorusubh(<8 x i16 > %a, <8 x i16 > %b) {
75 ; CHECK-LABEL: vectorusubh:
76 ; CHECK:       # %bb.0: # %entry
77 ; CHECK-NEXT:    vsubuhs v2, v2, v3
78 ; CHECK-NEXT:    blr
79 entry:
80   %call = call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %a, <8 x i16> %b)
81   ret <8 x i16> %call
84 define dso_local <4 x i32 > @vectorsaddw(<4 x i32 > %a, <4 x i32 > %b) {
85 ; CHECK-LABEL: vectorsaddw:
86 ; CHECK:       # %bb.0: # %entry
87 ; CHECK-NEXT:    vaddsws v2, v2, v3
88 ; CHECK-NEXT:    blr
89 entry:
90   %call = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
91   ret <4 x i32> %call
94 define dso_local <4 x i32 > @vectorssubw(<4 x i32 > %a, <4 x i32 > %b) {
95 ; CHECK-LABEL: vectorssubw:
96 ; CHECK:       # %bb.0: # %entry
97 ; CHECK-NEXT:    vsubsws v2, v2, v3
98 ; CHECK-NEXT:    blr
99 entry:
100   %call = call <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
101   ret <4 x i32> %call
104 define dso_local <4 x i32 > @vectoruaddw(<4 x i32 > %a, <4 x i32 > %b) {
105 ; CHECK-LABEL: vectoruaddw:
106 ; CHECK:       # %bb.0: # %entry
107 ; CHECK-NEXT:    vadduws v2, v2, v3
108 ; CHECK-NEXT:    blr
109 entry:
110   %call = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
111   ret <4 x i32> %call
114 define dso_local <4 x i32 > @vectorusubw(<4 x i32 > %a, <4 x i32 > %b) {
115 ; CHECK-LABEL: vectorusubw:
116 ; CHECK:       # %bb.0: # %entry
117 ; CHECK-NEXT:    vsubuws v2, v2, v3
118 ; CHECK-NEXT:    blr
119 entry:
120   %call = call <4 x i32> @llvm.usub.sat.v4i32(<4 x i32> %a, <4 x i32> %b)
121   ret <4 x i32> %call
124 declare <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8>, <16 x i8>)
125 declare <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8>, <16 x i8>)
126 declare <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8>, <16 x i8>)
127 declare <16 x i8> @llvm.usub.sat.v16i8(<16 x i8>, <16 x i8>)
128 declare <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16>, <8 x i16>)
129 declare <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16>, <8 x i16>)
130 declare <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16>, <8 x i16>)
131 declare <8 x i16> @llvm.usub.sat.v8i16(<8 x i16>, <8 x i16>)
132 declare <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32>, <4 x i32>)
133 declare <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32>, <4 x i32>)
134 declare <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32>, <4 x i32>)
135 declare <4 x i32> @llvm.usub.sat.v4i32(<4 x i32>, <4 x i32>)