Previous:Unary and Binary Expressions, Up:Expressions [Contents][Index]
VEC_DUPLICATE_EXPRThis node has a single operand and represents a vector in which everyelement is equal to that operand.
VEC_SERIES_EXPRThis node represents a vector formed from a scalar base and step,given as the first and second operands respectively. Elementiof the result is equal to ‘base +i*step’.
This node is restricted to integral types, in order to avoidspecifying the rounding behavior for floating-point types.
VEC_LSHIFT_EXPRVEC_RSHIFT_EXPRThese nodes represent whole vector left and right shifts, respectively.The first operand is the vector to shift; it will always be of vector type.The second operand is an expression for the number of bits by which toshift. Note that the result is undefined if the second operand is largerthan or equal to the first operand’s type size.
VEC_WIDEN_MULT_HI_EXPRVEC_WIDEN_MULT_LO_EXPRThese nodes represent widening vector multiplication of the high and lowparts of the two input vectors, respectively. Their operands are vectorsthat contain the same number of elements (N) of the same integral type.The result is a vector that contains half as many elements, of an integral typewhose size is twice as wide. In the case ofVEC_WIDEN_MULT_HI_EXPR thehighN/2 elements of the two vector are multiplied to produce thevector ofN/2 products. In the case ofVEC_WIDEN_MULT_LO_EXPR thelowN/2 elements of the two vector are multiplied to produce thevector ofN/2 products.
IFN_VEC_WIDEN_PLUSThis internal function represents widening vector addition of two inputvectors. Its operands are vectors that contain the same number of elements(N) of the same integral type. The result is a vector that containsthe same amount (N) of elements, of an integral type whose size is twiceas wide, as the input vectors. If the current target does not implement thecorresponding optabs the vectorizer may choose to split it into either a pairofIFN_VEC_WIDEN_PLUS_HI andIFN_VEC_WIDEN_PLUS_LO orIFN_VEC_WIDEN_PLUS_EVEN andIFN_VEC_WIDEN_PLUS_ODD, dependingon what optabs the target implements.
IFN_VEC_WIDEN_PLUS_HIIFN_VEC_WIDEN_PLUS_LOThese internal functions represent widening vector addition of the high and lowparts of the two input vectors, respectively. Their operands are vectors thatcontain the same number of elements (N) of the same integral type. Theresult is a vector that contains half as many elements, of an integral typewhose size is twice as wide. In the case ofIFN_VEC_WIDEN_PLUS_HI thehighN/2 elements of the two vectors are added to produce the vector ofN/2 additions. In the case ofIFN_VEC_WIDEN_PLUS_LO the lowN/2 elements of the two vectors are added to produce the vector ofN/2 additions.
IFN_VEC_WIDEN_PLUS_EVENIFN_VEC_WIDEN_PLUS_ODDThese internal functions represent widening vector addition of the even and oddelements of the two input vectors, respectively. Their operands are vectorsthat contain the same number of elements (N) of the same integral type.The result is a vector that contains half as many elements, of an integral typewhose size is twice as wide. In the case ofIFN_VEC_WIDEN_PLUS_EVEN theevenN/2 elements of the two vectors are added to produce the vector ofN/2 additions. In the case ofIFN_VEC_WIDEN_PLUS_ODD the oddN/2 elements of the two vectors are added to produce the vector ofN/2 additions.
IFN_VEC_WIDEN_MINUSThis internal function represents widening vector subtraction of two inputvectors. Its operands are vectors that contain the same number of elements(N) of the same integral type. The result is a vector that containsthe same amount (N) of elements, of an integral type whose size is twiceas wide, as the input vectors. If the current target does not implement thecorresponding optabs the vectorizer may choose to split it into either a pairofIFN_VEC_WIDEN_MINUS_HI andIFN_VEC_WIDEN_MINUS_LO orIFN_VEC_WIDEN_MINUS_EVEN andIFN_VEC_WIDEN_MINUS_ODD, dependingon what optabs the target implements.
IFN_VEC_WIDEN_MINUS_HIIFN_VEC_WIDEN_MINUS_LOThese internal functions represent widening vector subtraction of the high andlow parts of the two input vectors, respectively. Their operands are vectorsthat contain the same number of elements (N) of the same integral type.The high/low elements of the second vector are subtracted from the high/lowelements of the first. The result is a vector that contains half as manyelements, of an integral type whose size is twice as wide. In the case ofIFN_VEC_WIDEN_MINUS_HI the highN/2 elements of the secondvector are subtracted from the highN/2 of the first to produce thevector ofN/2 subtractions. In the case ofIFN_VEC_WIDEN_MINUS_LO the lowN/2 elements of the secondvector are subtracted from the lowN/2 of the first to produce thevector ofN/2 subtractions.
IFN_VEC_WIDEN_MINUS_EVENIFN_VEC_WIDEN_MINUS_ODDThese internal functions represent widening vector subtraction of the even andodd parts of the two input vectors, respectively. Their operands are vectorsthat contain the same number of elements (N) of the same integral type.The even/odd elements of the second vector are subtracted from the even/oddelements of the first. The result is a vector that contains half as manyelements, of an integral type whose size is twice as wide. In the case ofIFN_VEC_WIDEN_MINUS_EVEN the evenN/2 elements of the secondvector are subtracted from the evenN/2 of the first to produce thevector ofN/2 subtractions. In the case ofIFN_VEC_WIDEN_MINUS_ODD the oddN/2 elements of the secondvector are subtracted from the oddN/2 of the first to produce thevector ofN/2 subtractions.
IFN_VEC_TRUNC_ADD_HIGHThis internal function performs an addition of two input vectors,then extracts the most significant half of each result element andnarrows it to elements of half the original width.
Concretely, it computes:(bits(a)/2)((a + b) >> bits(a)/2)
wherebits(a) is the width in bits of each input element.
Its operands are vectors containing the same number of elements (N)of the same integral type. The result is a vector of lengthN, withelements of an integral type whose size is half that of the input elementtype.
This operation currently only used for early break result compression when theresult of a vector boolean can be represented as 0 or -1.
VEC_UNPACK_HI_EXPRVEC_UNPACK_LO_EXPRThese nodes represent unpacking of the high and low parts of the input vector,respectively. The single operand is a vector that containsN elementsof the same integral or floating point type. The result is a vectorthat contains half as many elements, of an integral or floating point typewhose size is twice as wide. In the case ofVEC_UNPACK_HI_EXPR thehighN/2 elements of the vector are extracted and widened (promoted).In the case ofVEC_UNPACK_LO_EXPR the lowN/2 elements of thevector are extracted and widened (promoted).
VEC_UNPACK_FLOAT_HI_EXPRVEC_UNPACK_FLOAT_LO_EXPRThese nodes represent unpacking of the high and low parts of the input vector,where the values are converted from fixed point to floating point. Thesingle operand is a vector that containsN elements of the sameintegral type. The result is a vector that contains half as many elementsof a floating point type whose size is twice as wide. In the case ofVEC_UNPACK_FLOAT_HI_EXPR the highN/2 elements of the vector areextracted, converted and widened. In the case ofVEC_UNPACK_FLOAT_LO_EXPRthe lowN/2 elements of the vector are extracted, converted and widened.
VEC_UNPACK_FIX_TRUNC_HI_EXPRVEC_UNPACK_FIX_TRUNC_LO_EXPRThese nodes represent unpacking of the high and low parts of the input vector,where the values are truncated from floating point to fixed point. Thesingle operand is a vector that containsN elements of the samefloating point type. The result is a vector that contains half as manyelements of an integral type whose size is twice as wide. In the case ofVEC_UNPACK_FIX_TRUNC_HI_EXPR the highN/2 elements of thevector are extracted and converted with truncation. In the case ofVEC_UNPACK_FIX_TRUNC_LO_EXPR the lowN/2 elements of thevector are extracted and converted with truncation.
VEC_PACK_TRUNC_EXPRThis node represents packing of truncated elements of the two input vectorsinto the output vector. Input operands are vectors that contain the samenumber of elements of the same integral or floating point type. The resultis a vector that contains twice as many elements of an integral or floatingpoint type whose size is half as wide. The elements of the two vectors aredemoted and merged (concatenated) to form the output vector.
VEC_PACK_SAT_EXPRThis node represents packing of elements of the two input vectors into theoutput vector using saturation. Input operands are vectors that containthe same number of elements of the same integral type. The result is avector that contains twice as many elements of an integral type whose sizeis half as wide. The elements of the two vectors are demoted and merged(concatenated) to form the output vector.
VEC_PACK_FIX_TRUNC_EXPRThis node represents packing of elements of the two input vectors into theoutput vector, where the values are converted from floating pointto fixed point. Input operands are vectors that contain the same numberof elements of a floating point type. The result is a vector that containstwice as many elements of an integral type whose size is half as wide. Theelements of the two vectors are merged (concatenated) to form the outputvector.
VEC_PACK_FLOAT_EXPRThis node represents packing of elements of the two input vectors into theoutput vector, where the values are converted from fixed point to floatingpoint. Input operands are vectors that contain the same number of elementsof an integral type. The result is a vector that contains twice as manyelements of floating point type whose size is half as wide. The elements ofthe two vectors are merged (concatenated) to form the output vector.
VEC_COND_EXPRThese nodes represent?: expressions. The three operands must bevectors of the same size and number of elements. The second and thirdoperands must have the same type as the entire expression. The firstoperand is of signed integral vector type. If an element of the firstoperand evaluates to a zero value, the corresponding element of theresult is taken from the third operand. If it evaluates to a minus onevalue, it is taken from the second operand. It should never evaluate toany other value currently, but optimizations should not rely on thatproperty. In contrast with aCOND_EXPR, all operands are alwaysevaluated.
SAD_EXPRThis node represents the Sum of Absolute Differences operation. The threeoperands must be vectors of integral types. The first and second operandmust have the same type. The size of the vector element of the thirdoperand must be at lease twice of the size of the vector element of thefirst and second one. The SAD is calculated between the first and secondoperands, added to the third operand, and returned.
Previous:Unary and Binary Expressions, Up:Expressions [Contents][Index]