From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from server.nextmovesoftware.com (server.nextmovesoftware.com [162.254.253.69]) by sourceware.org (Postfix) with ESMTPS id 2E1AC385B502 for ; Sat, 4 Feb 2023 20:33:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2E1AC385B502 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=nextmovesoftware.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=nextmovesoftware.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=nextmovesoftware.com; s=default; h=Content-Type:MIME-Version:Message-ID: Date:Subject:To:From:Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Cd4HQlKR+2zGFdO1ROs5zBANWLA38gNpITVGdOD7rVs=; b=Zygkg0fhqqZ3OdugVAgMOXFVkH X/i+mAto6b2nxYkEYjKrEuaNw7BASIwDvk9pMowNggvArXhiLS2qlg3idan9IeH1w6PIi09DgrvEj GRnKPnIMPyWGYNPEI7TBlG/SIasBMAzDc789Z8xCXNlwO8xKBbf47eQCNaKzBpN90G2NIteMySVq1 2WyaVcLUtv9xwZQmlb6d6UriolY33qd9ll9mE3bBps3++AsR7CxO0UWUL3ES4TaYw0ns04J1tCMNU BGmUg7K9Hi/zbrU9DwkQoB9yzakA68TfYo9sL0MEHs2xifSMZQEemYy2cPvQ/JbPMj76kpbR7Q2hq 2SS0I9Mg==; Received: from host86-163-35-31.range86-163.btcentralplus.com ([86.163.35.31]:49663 helo=Dell) by server.nextmovesoftware.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pOPES-0007DJ-GO for gcc-patches@gcc.gnu.org; Sat, 04 Feb 2023 15:33:56 -0500 From: "Roger Sayle" To: "'GCC Patches'" Subject: [DOC PATCH] Document the VEC_PERM_EXPR tree code (and minor clean-ups). Date: Sat, 4 Feb 2023 20:33:54 -0000 Message-ID: <000f01d938d8$00cdf7d0$0269e770$@nextmovesoftware.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0010_01D938D8.00CDF7D0" X-Mailer: Microsoft Outlook 16.0 Content-Language: en-gb Thread-Index: Adk410HweqVyBgGWSBKhqP1RqYUuyw== X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server.nextmovesoftware.com X-AntiAbuse: Original Domain - gcc.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - nextmovesoftware.com X-Get-Message-Sender-Via: server.nextmovesoftware.com: authenticated_id: roger@nextmovesoftware.com X-Authenticated-Sender: server.nextmovesoftware.com: roger@nextmovesoftware.com X-Source: X-Source-Args: X-Source-Dir: X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_ASCII_DIVIDERS,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multipart message in MIME format. ------=_NextPart_000_0010_01D938D8.00CDF7D0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit This patch (primarily) documents the VEC_PERM_EXPR tree code in generic.texi. For ease of review, it is provided below as a pair of diffs. The first contains just the new text added to describe VEC_PERM_EXPR, the second tidies up this part of the documentation by sorting the tree codes into alphabetical order, and providing consistent section naming/capitalization, so changing this section from "Vectors" to "Vector Expressions" (matching the nearby "Unary and Binary Expressions"). Tested with make pdf and make html on x86_64-pc-linux-gnu. The reviewer(s) can decide whether to approve just the new content, or the content+clean-up. Ok for mainline? 2023-02-04 Roger Sayle gcc/ChangeLog * doc/generic.texi : Standardize capitalization of section titles from "Expression trees". : Likewise standardize capitalization from "Language-dependent trees". : Capitalized from "Constant Expressions". : Standardized section name from "Vectors". Document VEC_PERM_EXPR tree code. Sort tree codes alphabetically. Thanks in advance, Roger -- ------=_NextPart_000_0010_01D938D8.00CDF7D0 Content-Type: text/plain; name="patch.txt" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="patch.txt" diff --git a/gcc/doc/generic.texi b/gcc/doc/generic.texi=0A= index 3f52d30..4e8f131 100644=0A= --- a/gcc/doc/generic.texi=0A= +++ b/gcc/doc/generic.texi=0A= @@ -1826,6 +1826,7 @@ a value from @code{enum annot_expr_kind}, the = third is an @code{INTEGER_CST}.=0A= @tindex VEC_PACK_FIX_TRUNC_EXPR=0A= @tindex VEC_PACK_FLOAT_EXPR=0A= @tindex VEC_COND_EXPR=0A= +@tindex VEC_PERM_EXPR=0A= @tindex SAD_EXPR=0A= =0A= @table @code=0A= @@ -1967,6 +1968,27 @@ any other value currently, but optimizations = should not rely on that=0A= property. In contrast with a @code{COND_EXPR}, all operands are always=0A= evaluated.=0A= =0A= +@item VEC_PERM_EXPR=0A= +This node represents a vector permute/blend operation. The three = operands=0A= +must be vectors of the same number of elements. The first and second=0A= +operands must be vectors of the same type as the entire expression, and=0A= +the third operand, @dfn{selector}, must be an integral vector type.=0A= +=0A= +The input elements are numbered from 0 in operand 1 through=0A= +@math{2*@var{N}-1} in operand 2. The elements of the selector are=0A= +interpreted modulo @math{2*@var{N}}.=0A= +=0A= +The expression=0A= +@code{@var{out} =3D VEC_PERM_EXPR<@var{v0}, @var{v1}, @var{selector}>}, =0A= +where @var{v0}, @var{v1} and @var{selector} have @var{N} elements, means=0A= +@smallexample=0A= + for (int i =3D 0; i < N; i++)=0A= + @{=0A= + int j =3D selector[i] % (2*N);=0A= + out[i] =3D j < N ? v0[j] : v1[j-N];=0A= + @}=0A= +@end smallexample=0A= +=0A= @item SAD_EXPR=0A= This node represents the Sum of Absolute Differences operation. The = three=0A= operands must be vectors of integral types. The first and second = operand=0A= ------=_NextPart_000_0010_01D938D8.00CDF7D0 Content-Type: text/plain; name="patch2.txt" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="patch2.txt" diff --git a/gcc/doc/generic.texi b/gcc/doc/generic.texi=0A= index 3f52d30..93b2e00 100644=0A= --- a/gcc/doc/generic.texi=0A= +++ b/gcc/doc/generic.texi=0A= @@ -38,10 +38,10 @@ seems inelegant.=0A= * Types:: Fundamental and aggregate types.=0A= * Declarations:: Type declarations and variables.=0A= * Attributes:: Declaration and type attributes.=0A= -* Expressions: Expression trees. Operating on data.=0A= +* Expressions: Expression Trees. Operating on data.=0A= * Statements:: Control flow and related trees.=0A= * Functions:: Function bodies, linkage, and other aspects.=0A= -* Language-dependent trees:: Topics and trees specific to language = front ends.=0A= +* Language-dependent Trees:: Topics and trees specific to language = front ends.=0A= * C and C++ Trees:: Trees specific to C and C++.=0A= @end menu=0A= =0A= @@ -976,7 +976,7 @@ This macro returns the attributes on the type = @var{type}.=0A= @c Expressions=0A= @c ---------------------------------------------------------------------=0A= =0A= -@node Expression trees=0A= +@node Expression Trees=0A= @section Expressions=0A= @cindex expression=0A= @findex TREE_TYPE=0A= @@ -1021,14 +1021,14 @@ As this example indicates, the operands are = zero-indexed.=0A= =0A= =0A= @menu=0A= -* Constants: Constant expressions.=0A= +* Constants: Constant Expressions.=0A= * Storage References::=0A= * Unary and Binary Expressions::=0A= -* Vectors::=0A= +* Vector Expressions::=0A= @end menu=0A= =0A= -@node Constant expressions=0A= -@subsection Constant expressions=0A= +@node Constant Expressions=0A= +@subsection Constant Expressions=0A= @tindex INTEGER_CST=0A= @findex tree_int_cst_lt=0A= @findex tree_int_cst_equal=0A= @@ -1803,36 +1803,119 @@ a value from @code{enum annot_expr_kind}, the = third is an @code{INTEGER_CST}.=0A= @end table=0A= =0A= =0A= -@node Vectors=0A= -@subsection Vectors=0A= +@node Vector Expressions=0A= +@subsection Vector Expressions=0A= +@tindex SAD_EXPR=0A= +@tindex VEC_COND_EXPR=0A= @tindex VEC_DUPLICATE_EXPR=0A= -@tindex VEC_SERIES_EXPR=0A= @tindex VEC_LSHIFT_EXPR=0A= @tindex VEC_RSHIFT_EXPR=0A= +@tindex VEC_PACK_FIX_TRUNC_EXPR=0A= +@tindex VEC_PACK_FLOAT_EXPR=0A= +@tindex VEC_PACK_SAT_EXPR=0A= +@tindex VEC_PACK_TRUNC_EXPR=0A= +@tindex VEC_PERM_EXPR=0A= +@tindex VEC_SERIES_EXPR=0A= +@tindex VEC_UNPACK_FIX_TRUNC_HI_EXPR=0A= +@tindex VEC_UNPACK_FIX_TRUNC_LO_EXPR=0A= +@tindex VEC_UNPACK_FLOAT_HI_EXPR=0A= +@tindex VEC_UNPACK_FLOAT_LO_EXPR=0A= +@tindex VEC_UNPACK_HI_EXPR=0A= +@tindex VEC_UNPACK_LO_EXPR=0A= +@tindex VEC_WIDEN_MINUS_HI_EXPR=0A= +@tindex VEC_WIDEN_MINUS_LO_EXPR=0A= @tindex VEC_WIDEN_MULT_HI_EXPR=0A= @tindex VEC_WIDEN_MULT_LO_EXPR=0A= @tindex VEC_WIDEN_PLUS_HI_EXPR=0A= @tindex VEC_WIDEN_PLUS_LO_EXPR=0A= -@tindex VEC_WIDEN_MINUS_HI_EXPR=0A= -@tindex VEC_WIDEN_MINUS_LO_EXPR=0A= -@tindex VEC_UNPACK_HI_EXPR=0A= -@tindex VEC_UNPACK_LO_EXPR=0A= -@tindex VEC_UNPACK_FLOAT_HI_EXPR=0A= -@tindex VEC_UNPACK_FLOAT_LO_EXPR=0A= -@tindex VEC_UNPACK_FIX_TRUNC_HI_EXPR=0A= -@tindex VEC_UNPACK_FIX_TRUNC_LO_EXPR=0A= -@tindex VEC_PACK_TRUNC_EXPR=0A= -@tindex VEC_PACK_SAT_EXPR=0A= -@tindex VEC_PACK_FIX_TRUNC_EXPR=0A= -@tindex VEC_PACK_FLOAT_EXPR=0A= -@tindex VEC_COND_EXPR=0A= -@tindex SAD_EXPR=0A= =0A= @table @code=0A= +@item SAD_EXPR=0A= +This node represents the Sum of Absolute Differences operation. The = three=0A= +operands must be vectors of integral types. The first and second = operand=0A= +must have the same type. The size of the vector element of the third=0A= +operand must be at lease twice of the size of the vector element of the=0A= +first and second one. The SAD is calculated between the first and = second=0A= +operands, added to the third operand, and returned.=0A= +=0A= +@item VEC_COND_EXPR=0A= +These nodes represent @code{?:} expressions. The three operands must be=0A= +vectors of the same size and number of elements. The second and third=0A= +operands must have the same type as the entire expression. The first=0A= +operand is of signed integral vector type. If an element of the first=0A= +operand evaluates to a zero value, the corresponding element of the=0A= +result is taken from the third operand. If it evaluates to a minus one=0A= +value, it is taken from the second operand. It should never evaluate to=0A= +any other value currently, but optimizations should not rely on that=0A= +property. In contrast with a @code{COND_EXPR}, all operands are always=0A= +evaluated.=0A= +=0A= @item VEC_DUPLICATE_EXPR=0A= This node has a single operand and represents a vector in which every=0A= element is equal to that operand.=0A= =0A= +@item VEC_LSHIFT_EXPR=0A= +@itemx VEC_RSHIFT_EXPR=0A= +These nodes represent whole vector left and right shifts, respectively.=0A= +The first operand is the vector to shift; it will always be of vector = type.=0A= +The second operand is an expression for the number of bits by which to=0A= +shift. Note that the result is undefined if the second operand is = larger=0A= +than or equal to the first operand's type size.=0A= +=0A= +@item VEC_PACK_FIX_TRUNC_EXPR=0A= +This node represents packing of elements of the two input vectors into = the=0A= +output vector, where the values are converted from floating point=0A= +to fixed point. Input operands are vectors that contain the same number=0A= +of elements of a floating point type. The result is a vector that = contains=0A= +twice as many elements of an integral type whose size is half as wide. = The=0A= +elements of the two vectors are merged (concatenated) to form the output=0A= +vector.=0A= +=0A= +@item VEC_PACK_FLOAT_EXPR=0A= +This node represents packing of elements of the two input vectors into = the=0A= +output vector, where the values are converted from fixed point to = floating=0A= +point. Input operands are vectors that contain the same number of = elements=0A= +of an integral type. The result is a vector that contains twice as many=0A= +elements of floating point type whose size is half as wide. The = elements of=0A= +the two vectors are merged (concatenated) to form the output vector.=0A= +=0A= +@item VEC_PACK_SAT_EXPR=0A= +This node represents packing of elements of the two input vectors into = the=0A= +output vector using saturation. Input operands are vectors that contain=0A= +the same number of elements of the same integral type. The result is a=0A= +vector that contains twice as many elements of an integral type whose = size=0A= +is half as wide. The elements of the two vectors are demoted and merged=0A= +(concatenated) to form the output vector.=0A= +=0A= +@item VEC_PACK_TRUNC_EXPR=0A= +This node represents packing of truncated elements of the two input = vectors=0A= +into the output vector. Input operands are vectors that contain the = same=0A= +number of elements of the same integral or floating point type. The = result=0A= +is a vector that contains twice as many elements of an integral or = floating=0A= +point type whose size is half as wide. The elements of the two vectors = are=0A= +demoted and merged (concatenated) to form the output vector.=0A= +=0A= +@item VEC_PERM_EXPR=0A= +This node represents a vector permute/blend operation. The three = operands=0A= +must be vectors of the same number of elements. The first and second=0A= +operands must be vectors of the same type as the entire expression, and=0A= +the third operand, @dfn{selector}, must be an integral vector type.=0A= +=0A= +The input elements are numbered from 0 in operand 1 through=0A= +@math{2*@var{N}-1} in operand 2. The elements of the selector are=0A= +interpreted modulo @math{2*@var{N}}.=0A= +=0A= +The expression=0A= +@code{@var{out} =3D VEC_PERM_EXPR<@var{v0}, @var{v1}, @var{selector}>}, =0A= +where @var{v0}, @var{v1} and @var{selector} have @var{N} elements, means=0A= +@smallexample=0A= + for (int i =3D 0; i < N; i++)=0A= + @{=0A= + int j =3D selector[i] % (2*N);=0A= + out[i] =3D j < N ? v0[j] : v1[j-N];=0A= + @}=0A= +@end smallexample=0A= +=0A= @item VEC_SERIES_EXPR=0A= This node represents a vector formed from a scalar base and step,=0A= given as the first and second operands respectively. Element @var{i}=0A= @@ -1841,13 +1924,54 @@ of the result is equal to @samp{@var{base} + = @var{i}*@var{step}}.=0A= This node is restricted to integral types, in order to avoid=0A= specifying the rounding behavior for floating-point types.=0A= =0A= -@item VEC_LSHIFT_EXPR=0A= -@itemx VEC_RSHIFT_EXPR=0A= -These nodes represent whole vector left and right shifts, respectively.=0A= -The first operand is the vector to shift; it will always be of vector = type.=0A= -The second operand is an expression for the number of bits by which to=0A= -shift. Note that the result is undefined if the second operand is = larger=0A= -than or equal to the first operand's type size.=0A= +@item VEC_UNPACK_FIX_TRUNC_HI_EXPR=0A= +@itemx VEC_UNPACK_FIX_TRUNC_LO_EXPR=0A= +These nodes represent unpacking of the high and low parts of the input = vector,=0A= +where the values are truncated from floating point to fixed point. The=0A= +single operand is a vector that contains @code{N} elements of the same=0A= +floating point type. The result is a vector that contains half as many=0A= +elements of an integral type whose size is twice as wide. In the case = of=0A= +@code{VEC_UNPACK_FIX_TRUNC_HI_EXPR} the high @code{N/2} elements of the=0A= +vector are extracted and converted with truncation. In the case of=0A= +@code{VEC_UNPACK_FIX_TRUNC_LO_EXPR} the low @code{N/2} elements of the=0A= +vector are extracted and converted with truncation.=0A= +=0A= +@item VEC_UNPACK_FLOAT_HI_EXPR=0A= +@itemx VEC_UNPACK_FLOAT_LO_EXPR=0A= +These nodes represent unpacking of the high and low parts of the input = vector,=0A= +where the values are converted from fixed point to floating point. The=0A= +single operand is a vector that contains @code{N} elements of the same=0A= +integral type. The result is a vector that contains half as many = elements=0A= +of a floating point type whose size is twice as wide. In the case of=0A= +@code{VEC_UNPACK_FLOAT_HI_EXPR} the high @code{N/2} elements of the = vector are=0A= +extracted, converted and widened. In the case of = @code{VEC_UNPACK_FLOAT_LO_EXPR}=0A= +the low @code{N/2} elements of the vector are extracted, converted and = widened.=0A= +=0A= +@item VEC_UNPACK_HI_EXPR=0A= +@itemx VEC_UNPACK_LO_EXPR=0A= +These nodes represent unpacking of the high and low parts of the input = vector,=0A= +respectively. The single operand is a vector that contains @code{N} = elements=0A= +of the same integral or floating point type. The result is a vector=0A= +that contains half as many elements, of an integral or floating point = type=0A= +whose size is twice as wide. In the case of @code{VEC_UNPACK_HI_EXPR} = the=0A= +high @code{N/2} elements of the vector are extracted and widened = (promoted).=0A= +In the case of @code{VEC_UNPACK_LO_EXPR} the low @code{N/2} elements of = the=0A= +vector are extracted and widened (promoted).=0A= +=0A= +@item VEC_WIDEN_MINUS_HI_EXPR=0A= +@itemx VEC_WIDEN_MINUS_LO_EXPR=0A= +These nodes represent widening vector subtraction of the high and low = parts of=0A= +the two input vectors, respectively. Their operands are vectors that = contain=0A= +the same number of elements (@code{N}) of the same integral type. The = high/low=0A= +elements of the second vector are subtracted from the high/low elements = of the=0A= +first. The result is a vector that contains half as many elements, of an=0A= +integral type whose size is twice as wide. In the case of=0A= +@code{VEC_WIDEN_MINUS_HI_EXPR} the high @code{N/2} elements of the = second=0A= +vector are subtracted from the high @code{N/2} of the first to produce = the=0A= +vector of @code{N/2} products. In the case of=0A= +@code{VEC_WIDEN_MINUS_LO_EXPR} the low @code{N/2} elements of the second=0A= +vector are subtracted from the low @code{N/2} of the first to produce = the=0A= +vector of @code{N/2} products.=0A= =0A= @item VEC_WIDEN_MULT_HI_EXPR=0A= @itemx VEC_WIDEN_MULT_LO_EXPR=0A= @@ -1873,108 +1997,6 @@ is twice as wide. In the case of = @code{VEC_WIDEN_PLUS_HI_EXPR} the high=0A= @code{N/2} elements of the two vectors are added to produce the vector = of=0A= @code{N/2} products.=0A= =0A= -@item VEC_WIDEN_MINUS_HI_EXPR=0A= -@itemx VEC_WIDEN_MINUS_LO_EXPR=0A= -These nodes represent widening vector subtraction of the high and low = parts of=0A= -the two input vectors, respectively. Their operands are vectors that = contain=0A= -the same number of elements (@code{N}) of the same integral type. The = high/low=0A= -elements of the second vector are subtracted from the high/low elements = of the=0A= -first. The result is a vector that contains half as many elements, of an=0A= -integral type whose size is twice as wide. In the case of=0A= -@code{VEC_WIDEN_MINUS_HI_EXPR} the high @code{N/2} elements of the = second=0A= -vector are subtracted from the high @code{N/2} of the first to produce = the=0A= -vector of @code{N/2} products. In the case of=0A= -@code{VEC_WIDEN_MINUS_LO_EXPR} the low @code{N/2} elements of the second=0A= -vector are subtracted from the low @code{N/2} of the first to produce = the=0A= -vector of @code{N/2} products.=0A= -=0A= -@item VEC_UNPACK_HI_EXPR=0A= -@itemx VEC_UNPACK_LO_EXPR=0A= -These nodes represent unpacking of the high and low parts of the input = vector,=0A= -respectively. The single operand is a vector that contains @code{N} = elements=0A= -of the same integral or floating point type. The result is a vector=0A= -that contains half as many elements, of an integral or floating point = type=0A= -whose size is twice as wide. In the case of @code{VEC_UNPACK_HI_EXPR} = the=0A= -high @code{N/2} elements of the vector are extracted and widened = (promoted).=0A= -In the case of @code{VEC_UNPACK_LO_EXPR} the low @code{N/2} elements of = the=0A= -vector are extracted and widened (promoted).=0A= -=0A= -@item VEC_UNPACK_FLOAT_HI_EXPR=0A= -@itemx VEC_UNPACK_FLOAT_LO_EXPR=0A= -These nodes represent unpacking of the high and low parts of the input = vector,=0A= -where the values are converted from fixed point to floating point. The=0A= -single operand is a vector that contains @code{N} elements of the same=0A= -integral type. The result is a vector that contains half as many = elements=0A= -of a floating point type whose size is twice as wide. In the case of=0A= -@code{VEC_UNPACK_FLOAT_HI_EXPR} the high @code{N/2} elements of the = vector are=0A= -extracted, converted and widened. In the case of = @code{VEC_UNPACK_FLOAT_LO_EXPR}=0A= -the low @code{N/2} elements of the vector are extracted, converted and = widened.=0A= -=0A= -@item VEC_UNPACK_FIX_TRUNC_HI_EXPR=0A= -@itemx VEC_UNPACK_FIX_TRUNC_LO_EXPR=0A= -These nodes represent unpacking of the high and low parts of the input = vector,=0A= -where the values are truncated from floating point to fixed point. The=0A= -single operand is a vector that contains @code{N} elements of the same=0A= -floating point type. The result is a vector that contains half as many=0A= -elements of an integral type whose size is twice as wide. In the case = of=0A= -@code{VEC_UNPACK_FIX_TRUNC_HI_EXPR} the high @code{N/2} elements of the=0A= -vector are extracted and converted with truncation. In the case of=0A= -@code{VEC_UNPACK_FIX_TRUNC_LO_EXPR} the low @code{N/2} elements of the=0A= -vector are extracted and converted with truncation.=0A= -=0A= -@item VEC_PACK_TRUNC_EXPR=0A= -This node represents packing of truncated elements of the two input = vectors=0A= -into the output vector. Input operands are vectors that contain the = same=0A= -number of elements of the same integral or floating point type. The = result=0A= -is a vector that contains twice as many elements of an integral or = floating=0A= -point type whose size is half as wide. The elements of the two vectors = are=0A= -demoted and merged (concatenated) to form the output vector.=0A= -=0A= -@item VEC_PACK_SAT_EXPR=0A= -This node represents packing of elements of the two input vectors into = the=0A= -output vector using saturation. Input operands are vectors that contain=0A= -the same number of elements of the same integral type. The result is a=0A= -vector that contains twice as many elements of an integral type whose = size=0A= -is half as wide. The elements of the two vectors are demoted and merged=0A= -(concatenated) to form the output vector.=0A= -=0A= -@item VEC_PACK_FIX_TRUNC_EXPR=0A= -This node represents packing of elements of the two input vectors into = the=0A= -output vector, where the values are converted from floating point=0A= -to fixed point. Input operands are vectors that contain the same number=0A= -of elements of a floating point type. The result is a vector that = contains=0A= -twice as many elements of an integral type whose size is half as wide. = The=0A= -elements of the two vectors are merged (concatenated) to form the output=0A= -vector.=0A= -=0A= -@item VEC_PACK_FLOAT_EXPR=0A= -This node represents packing of elements of the two input vectors into = the=0A= -output vector, where the values are converted from fixed point to = floating=0A= -point. Input operands are vectors that contain the same number of = elements=0A= -of an integral type. The result is a vector that contains twice as many=0A= -elements of floating point type whose size is half as wide. The = elements of=0A= -the two vectors are merged (concatenated) to form the output vector.=0A= -=0A= -@item VEC_COND_EXPR=0A= -These nodes represent @code{?:} expressions. The three operands must be=0A= -vectors of the same size and number of elements. The second and third=0A= -operands must have the same type as the entire expression. The first=0A= -operand is of signed integral vector type. If an element of the first=0A= -operand evaluates to a zero value, the corresponding element of the=0A= -result is taken from the third operand. If it evaluates to a minus one=0A= -value, it is taken from the second operand. It should never evaluate to=0A= -any other value currently, but optimizations should not rely on that=0A= -property. In contrast with a @code{COND_EXPR}, all operands are always=0A= -evaluated.=0A= -=0A= -@item SAD_EXPR=0A= -This node represents the Sum of Absolute Differences operation. The = three=0A= -operands must be vectors of integral types. The first and second = operand=0A= -must have the same type. The size of the vector element of the third=0A= -operand must be at lease twice of the size of the vector element of the=0A= -first and second one. The SAD is calculated between the first and = second=0A= -operands, added to the third operand, and returned.=0A= -=0A= @end table=0A= =0A= =0A= @@ -2698,12 +2720,12 @@ optimization options specified on the command = line.=0A= @end ftable=0A= =0A= @c ---------------------------------------------------------------------=0A= -@c Language-dependent trees=0A= +@c Language-dependent Trees=0A= @c ---------------------------------------------------------------------=0A= =0A= -@node Language-dependent trees=0A= -@section Language-dependent trees=0A= -@cindex language-dependent trees=0A= +@node Language-dependent Trees=0A= +@section Language-dependent Trees=0A= +@cindex language-dependent Trees=0A= =0A= Front ends may wish to keep some state associated with various GENERIC=0A= trees while parsing. To support this, trees provide a set of flags=0A= ------=_NextPart_000_0010_01D938D8.00CDF7D0--