1 /* { dg-do compile } */ 2 /* { dg-options "-O2 -march=skylake-avx512 -fdump-tree-optimized" } */ 3 /* { dg-final { scan-tree-dump ".COND_ADD" "optimized" } } */ 4 /* { dg-final { scan-tree-dump ".COND_SUB" "optimized" } } */ 5 /* { dg-final { scan-tree-dump ".COND_MUL" "optimized" } } */ 6 #ifndef NUM 7 #define NUM 800 8 #endif 9 #ifndef TYPE 10 #define TYPE int 11 #endif 12 13 TYPE a[NUM], b[NUM], c[NUM], d[NUM], e[NUM], j[NUM]; 14 #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) 15 #define MAX(X,Y) ((X) < (Y) ? (Y) : (X)) 16 17 #define BIN(OPNAME, OP) \ 18 void \ 19 __attribute__ ((noipa,optimize ("O3"))) \ 20 foo_##OPNAME () \ 21 { \ 22 for (int i = 0; i != NUM; i++) \ 23 if (b[i] < c[i]) \ 24 a[i] = d[i] OP e[i]; \ 25 else \ 26 a[i] = MAX(d[i], e[i]); \ 27 } 28 29 30 BIN (add, +); 31 BIN (sub, -); 32 BIN (mul, *); 33