1 /* 2 * Copyright 2019 Cerebras Systems 3 * 4 * Use of this software is governed by the MIT license 5 * 6 * Written by Sven Verdoolaege, 7 * Cerebras Systems, 175 S San Antonio Rd, Los Altos, CA, USA 8 */ 9 10 #include <isl_pw_macro.h> 11 12 #undef VAL 13 #define VAL CAT(isl_,VAL_BASE) 14 15 /* Add "v" to the constant term of "pw" over its entire definition domain. 16 */ 17 __isl_give PW *FN(FN(PW,add_constant),VAL_BASE)(__isl_take PW *pw, 18 __isl_take VAL *v) 19 { 20 isl_bool zero; 21 isl_size n; 22 int i; 23 24 zero = FN(VAL,is_zero)(v); 25 n = FN(PW,n_piece)(pw); 26 if (zero < 0 || n < 0) 27 goto error; 28 if (zero || n == 0) { 29 FN(VAL,free)(v); 30 return pw; 31 } 32 33 for (i = 0; i < n; ++i) { 34 EL *el; 35 36 el = FN(PW,take_base_at)(pw, i); 37 el = FN(FN(EL,add_constant),VAL_BASE)(el, FN(VAL,copy)(v)); 38 pw = FN(PW,restore_base_at)(pw, i, el); 39 } 40 41 FN(VAL,free)(v); 42 return pw; 43 error: 44 FN(PW,free)(pw); 45 FN(VAL,free)(v); 46 return NULL; 47 } 48