On 11/17, Oleg Nesterov wrote:
>
> However, if ffarity() == 0
>
> a = fconstant(float a, "");
> b = fconstant(float b, "");
>
> c = a / b;
>
> f0 = ffunction(float f0(), "","");
> process = f0 : *(c);
>
> then "a / b" is calculated at run time:
>
> virtual void instanceConstants(int sample_rate) {
> fSampleRate = sample_rate;
> }
> virtual void compute(int count, FAUSTFLOAT** RESTRICT inputs,
> FAUSTFLOAT** RESTRICT outputs) {
> FAUSTFLOAT* output0 = outputs[0];
> for (int i0 = 0; i0 < count; i0 = i0 + 1) {
> output0[i0] = FAUSTFLOAT(f0() * a / b);
> }
> }
>
> and this looks like performance bug to me.
OK, I am not sure but it seems that mterm::normalizedTree() is confused by
getSigOrder(f0). The patch below seems to fix the problem.
What do you think?
Oleg.
diff --git a/compiler/signals/sigorderrules.cpp
b/compiler/signals/sigorderrules.cpp
index d30248ccc..4866122e4 100644
--- a/compiler/signals/sigorderrules.cpp
+++ b/compiler/signals/sigorderrules.cpp
@@ -128,7 +128,7 @@ static int infereSigOrder(Tree sig)
return O(s1);
else if (isSigFFun(sig, ff, ls) && isNil(ls))
- return 1;
+ return 3;
else if (isSigFFun(sig, ff, ls))
return max(1, O(ls));
_______________________________________________
Faudiostream-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/faudiostream-devel