Skip to content
Snippets Groups Projects
Commit 39483609 authored by Richard Angersbach's avatar Richard Angersbach
Browse files

Merge remote-tracking branch 'origin/rangersbach/reductions' into rangersbach/reductions

parents 1580a2b0 c0df001f
No related branches found
No related tags found
1 merge request!438Reduction Support
......@@ -41,10 +41,9 @@ class PsVecBroadcast(PsUnOp, PsVectorOp):
class PsVecHorizontal(PsBinOp, PsVectorOp):
"""Represents a binary operation between a scalar and a vector operand.
With the binary operation not being vectorized, a horizontal reduction
along the lanes of the vector operand is required to extract a scalar value.
The result type will be equal to the scalar operand.
"""Perform a horizontal reduction across a vector onto a scalar base value.
**Example:** vec_horizontal_add(s, v)` will compute `s + v[0] + v[1] + ... + v[n-1]`.
Args:
scalar_operand: Scalar operand
......
......@@ -12,27 +12,20 @@ _available_operator_interface: set[ReductionOp] = {
def reduction_op_to_expr(op: ReductionOp, op1, op2) -> PsExpression:
if op in _available_operator_interface:
match op:
case ReductionOp.Add:
return PsAdd(op1, op2)
case ReductionOp.Sub:
return PsSub(op1, op2)
case ReductionOp.Mul:
return PsMul(op1, op2)
case ReductionOp.Div:
return PsDiv(op1, op2)
case _:
raise FreezeError(
f"Found unsupported operation type for reduction assignments: {op}."
)
else:
match op:
case ReductionOp.Min:
return PsCall(PsMathFunction(MathFunctions.Min), [op1, op2])
case ReductionOp.Max:
return PsCall(PsMathFunction(MathFunctions.Max), [op1, op2])
case _:
raise FreezeError(
f"Found unsupported operation type for reduction assignments: {op}."
)
match op:
case ReductionOp.Add:
return PsAdd(op1, op2)
case ReductionOp.Sub:
return PsSub(op1, op2)
case ReductionOp.Mul:
return PsMul(op1, op2)
case ReductionOp.Div:
return PsDiv(op1, op2)
case ReductionOp.Min:
return PsCall(PsMathFunction(MathFunctions.Min), [op1, op2])
case ReductionOp.Max:
return PsCall(PsMathFunction(MathFunctions.Max), [op1, op2])
case _:
raise FreezeError(
f"Found unsupported operation type for reduction assignments: {op}."
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment