Q:

How to optimise a[i] = -b[i] * (c[i] + d);

Just wondering, given the code below, is there a better way of writing this to improve performance?
int i, N;
double a[], b[], c[], d;
for (i = 0; i < N; i++) {
    a[i] = -b[i] * (c[i] + d);
}

A:

As written, your code doesn't show the correct declarations of a, b, and c. If they're actually pointers (including function arguments declared like arrays) or arrays in pointed-to structs, be sure you make the pointers restrict qualified if possible. This will make it so a decent compiler can vectorize your loop.
You can see the effects of restrict (and what happens if you remove it) in the example code linked from P__J__'s answer. Without it, the compiler cannot assume a doesn't point to memory overlapping with what b or c points to, so it can't load b[i+1] or c[i+1] until a[i] is stored. This completely precludes loading them in parallel, i.e. essentially precludes vectorization.
Otherwise, no, your loop is optimal.

A:

Compiler are quite good in the optimizing such a stuff
https://godbolt.org/z/Q8sWqp

