diff --git a/lib/Differentiator/ReverseModeVisitor.cpp b/lib/Differentiator/ReverseModeVisitor.cpp index 0d88ce8ae..d0ec52a6c 100644 --- a/lib/Differentiator/ReverseModeVisitor.cpp +++ b/lib/Differentiator/ReverseModeVisitor.cpp @@ -2393,8 +2393,10 @@ Expr* getArraySizeExpr(const ArrayType* AT, ASTContext& context, if (!isPointerOp) oldValue = StoreAndRef(AssignedDiff, direction::reverse, "_r_d", /*forceDeclCreation=*/true); - if (opCode == BO_Assign) { + // Add the statement `dl -= oldValue;` + addToCurrentBlock(BuildOp(BO_SubAssign, AssignedDiff, oldValue), + direction::reverse); Rdiff = Visit(R, oldValue); valueForRevPass = Rdiff.getRevSweepAsExpr(); } else if (opCode == BO_AddAssign) { @@ -2423,6 +2425,9 @@ Expr* getArraySizeExpr(const ArrayType* AT, ASTContext& context, // double r = _ref0 *= z; if (isInsideLoop) addToCurrentBlock(LCloned, direction::forward); + // Add the statement `dl -= oldValue;` + addToCurrentBlock(BuildOp(BO_SubAssign, AssignedDiff, oldValue), + direction::reverse); /// Capture all the emitted statements while visiting R /// and insert them after `dl += dl * R` beginBlock(direction::reverse); @@ -2439,6 +2444,9 @@ Expr* getArraySizeExpr(const ArrayType* AT, ASTContext& context, Ldiff.getRevSweepAsExpr()); std::tie(Ldiff, Rdiff) = std::make_pair(LCloned, Rdiff.getExpr()); } else if (opCode == BO_DivAssign) { + // Add the statement `dl -= oldValue;` + addToCurrentBlock(BuildOp(BO_SubAssign, AssignedDiff, oldValue), + direction::reverse); auto RDelayed = DelayedGlobalStoreAndRef(R); StmtDiff RResult = RDelayed.Result; Expr* RStored = @@ -2464,10 +2472,6 @@ Expr* getArraySizeExpr(const ArrayType* AT, ASTContext& context, if (m_ExternalSource) m_ExternalSource->ActBeforeFinalisingAssignOp(LCloned, oldValue); - // Update the derivative. - if (opCode != BO_SubAssign && opCode != BO_AddAssign) - addToCurrentBlock(BuildOp(BO_SubAssign, AssignedDiff, oldValue), - direction::reverse); // Output statements from Visit(L). for (auto it = Lblock_begin; it != Lblock_end; ++it) addToCurrentBlock(*it, direction::reverse); diff --git a/test/Gradient/Assignments.C b/test/Gradient/Assignments.C index 42e316b0f..1ae831911 100644 --- a/test/Gradient/Assignments.C +++ b/test/Gradient/Assignments.C @@ -23,8 +23,8 @@ double f1(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: x = _t0; //CHECK-NEXT: double _r_d0 = * _d_x; -//CHECK-NEXT: * _d_y += _r_d0; //CHECK-NEXT: * _d_x -= _r_d0; +//CHECK-NEXT: * _d_y += _r_d0; //CHECK-NEXT: * _d_x; //CHECK-NEXT: } //CHECK-NEXT: } @@ -50,8 +50,8 @@ double f2(double x, double y) { //CHECK-NEXT: if (_cond0) { //CHECK-NEXT: x = _t0; //CHECK-NEXT: double _r_d0 = * _d_x; -//CHECK-NEXT: * _d_y += _r_d0; //CHECK-NEXT: * _d_x -= _r_d0; +//CHECK-NEXT: * _d_y += _r_d0; //CHECK-NEXT: * _d_x; //CHECK-NEXT: } //CHECK-NEXT: } @@ -84,31 +84,31 @@ double f3(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: x = _t3; //CHECK-NEXT: double _r_d3 = * _d_x; -//CHECK-NEXT: * _d_y += _r_d3; //CHECK-NEXT: * _d_x -= _r_d3; +//CHECK-NEXT: * _d_y += _r_d3; //CHECK-NEXT: * _d_x; //CHECK-NEXT: } //CHECK-NEXT: { //CHECK-NEXT: y = _t2; //CHECK-NEXT: double _r_d2 = * _d_y; +//CHECK-NEXT: * _d_y -= _r_d2; //CHECK-NEXT: * _d_x += _r_d2 * x; //CHECK-NEXT: * _d_x += x * _r_d2; -//CHECK-NEXT: * _d_y -= _r_d2; //CHECK-NEXT: * _d_y; //CHECK-NEXT: } //CHECK-NEXT: { //CHECK-NEXT: x = _t1; //CHECK-NEXT: double _r_d1 = * _d_x; +//CHECK-NEXT: * _d_x -= _r_d1; //CHECK-NEXT: * _d_x += _r_d1 * x; //CHECK-NEXT: * _d_x += x * _r_d1; -//CHECK-NEXT: * _d_x -= _r_d1; //CHECK-NEXT: * _d_x; //CHECK-NEXT: } //CHECK-NEXT: { //CHECK-NEXT: x = _t0; //CHECK-NEXT: double _r_d0 = * _d_x; -//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: * _d_x -= _r_d0; +//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: * _d_x; //CHECK-NEXT: } //CHECK-NEXT: } @@ -139,8 +139,8 @@ double f4(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: y = _t0; //CHECK-NEXT: double _r_d0 = * _d_y; -//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: * _d_y -= _r_d0; +//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: * _d_y; //CHECK-NEXT: } //CHECK-NEXT: } @@ -186,8 +186,8 @@ double f5(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t = _t1; //CHECK-NEXT: double _r_d1 = _d_t; -//CHECK-NEXT: _d_t += -_r_d1; //CHECK-NEXT: _d_t -= _r_d1; +//CHECK-NEXT: _d_t += -_r_d1; //CHECK-NEXT: } //CHECK-NEXT: _d_t += _d_z; //CHECK-NEXT: } @@ -197,8 +197,8 @@ double f5(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t = _t0; //CHECK-NEXT: double _r_d0 = _d_t; -//CHECK-NEXT: _d_t += -_r_d0; //CHECK-NEXT: _d_t -= _r_d0; +//CHECK-NEXT: _d_t += -_r_d0; //CHECK-NEXT: } //CHECK-NEXT: } //CHECK-NEXT: { @@ -248,8 +248,8 @@ double f6(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t = _t1; //CHECK-NEXT: double _r_d1 = _d_t; -//CHECK-NEXT: _d_t += -_r_d1; //CHECK-NEXT: _d_t -= _r_d1; +//CHECK-NEXT: _d_t += -_r_d1; //CHECK-NEXT: } //CHECK-NEXT: _d_t += _d_z; //CHECK-NEXT: } @@ -259,8 +259,8 @@ double f6(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t = _t0; //CHECK-NEXT: double _r_d0 = _d_t; -//CHECK-NEXT: _d_t += -_r_d0; //CHECK-NEXT: _d_t -= _r_d0; +//CHECK-NEXT: _d_t += -_r_d0; //CHECK-NEXT: } //CHECK-NEXT: } //CHECK-NEXT: { @@ -319,9 +319,9 @@ double f7(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: x = _t6; //CHECK-NEXT: double _r_d6 = * _d_x; +//CHECK-NEXT: * _d_x -= _r_d6; //CHECK-NEXT: _d_t[0] += _r_d6; //CHECK-NEXT: --t[0]; -//CHECK-NEXT: * _d_x -= _r_d6; //CHECK-NEXT: * _d_x; //CHECK-NEXT: } //CHECK-NEXT: { @@ -333,18 +333,18 @@ double f7(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t[0] = _t4; //CHECK-NEXT: double _r_d4 = _d_t[0]; +//CHECK-NEXT: _d_t[0] -= _r_d4; //CHECK-NEXT: _d_t[0] += _r_d4 / t[1]; //CHECK-NEXT: double _r0 = _r_d4 * -t[0] / (t[1] * t[1]); //CHECK-NEXT: _d_t[1] += _r0; -//CHECK-NEXT: _d_t[0] -= _r_d4; //CHECK-NEXT: _d_t[0]; //CHECK-NEXT: } //CHECK-NEXT: { //CHECK-NEXT: t[0] = _t3; //CHECK-NEXT: double _r_d3 = _d_t[0]; +//CHECK-NEXT: _d_t[0] -= _r_d3; //CHECK-NEXT: _d_t[0] += _r_d3 * t[1]; //CHECK-NEXT: _d_t[1] += t[0] * _r_d3; -//CHECK-NEXT: _d_t[0] -= _r_d3; //CHECK-NEXT: _d_t[0]; //CHECK-NEXT: } //CHECK-NEXT: { @@ -356,15 +356,15 @@ double f7(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: x = _t1; //CHECK-NEXT: double _r_d1 = * _d_x; -//CHECK-NEXT: * _d_y += _r_d1; //CHECK-NEXT: * _d_x -= _r_d1; +//CHECK-NEXT: * _d_y += _r_d1; //CHECK-NEXT: * _d_x; //CHECK-NEXT: } //CHECK-NEXT: { //CHECK-NEXT: t[0] = _t0; //CHECK-NEXT: double _r_d0 = _d_t[0]; -//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: _d_t[0] -= _r_d0; +//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: _d_t[0]; //CHECK-NEXT: } //CHECK-NEXT: ++t[0]; @@ -408,21 +408,21 @@ double f8(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t[3] = _t0; //CHECK-NEXT: double _r_d0 = _d_t[3]; +//CHECK-NEXT: _d_t[3] -= _r_d0; //CHECK-NEXT: * _d_y += _r_d0; //CHECK-NEXT: y = _t1; //CHECK-NEXT: double _r_d1 = * _d_y; +//CHECK-NEXT: * _d_y -= _r_d1; //CHECK-NEXT: * _d_y += _r_d1 * t[2]; //CHECK-NEXT: _d_t[0] += y * _r_d1; //CHECK-NEXT: t[0] = _t2; //CHECK-NEXT: double _r_d2 = _d_t[0]; +//CHECK-NEXT: _d_t[0] -= _r_d2; //CHECK-NEXT: _d_t[1] += _r_d2; //CHECK-NEXT: t[1] = _t3; //CHECK-NEXT: double _r_d3 = _d_t[1]; -//CHECK-NEXT: _d_t[2] += _r_d3; //CHECK-NEXT: _d_t[1] -= _r_d3; -//CHECK-NEXT: _d_t[0] -= _r_d2; -//CHECK-NEXT: * _d_y -= _r_d1; -//CHECK-NEXT: _d_t[3] -= _r_d0; +//CHECK-NEXT: _d_t[2] += _r_d3; //CHECK-NEXT: _d_t[3]; //CHECK-NEXT: } //CHECK-NEXT: { @@ -452,14 +452,14 @@ double f9(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t = _t2; //CHECK-NEXT: double _r_d1 = _d_t; +//CHECK-NEXT: _d_t -= _r_d1; //CHECK-NEXT: _d_t += _r_d1 * y; //CHECK-NEXT: * _d_y += _t1 * _r_d1; -//CHECK-NEXT: _d_t -= _r_d1; //CHECK-NEXT: t = _t0; //CHECK-NEXT: double _r_d0 = _d_t; +//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: _d_t += _r_d0 * x; //CHECK-NEXT: * _d_x += t * _r_d0; -//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: } //CHECK-NEXT: * _d_x += _d_t; //CHECK-NEXT: } @@ -484,12 +484,12 @@ double f10(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t = _t0; //CHECK-NEXT: double _r_d0 = _d_t; +//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: x = _t1; //CHECK-NEXT: double _r_d1 = * _d_x; -//CHECK-NEXT: * _d_y += _r_d1; //CHECK-NEXT: * _d_x -= _r_d1; -//CHECK-NEXT: _d_t -= _r_d0; +//CHECK-NEXT: * _d_y += _r_d1; //CHECK-NEXT: } //CHECK-NEXT: * _d_x += _d_t; //CHECK-NEXT: } @@ -515,12 +515,12 @@ double f11(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: t = _t2; //CHECK-NEXT: double _r_d1 = _d_t; -//CHECK-NEXT: * _d_y += _r_d1; //CHECK-NEXT: _d_t -= _r_d1; +//CHECK-NEXT: * _d_y += _r_d1; //CHECK-NEXT: t = _t0; //CHECK-NEXT: double _r_d0 = _d_t; -//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: _d_t -= _r_d0; +//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: } //CHECK-NEXT: * _d_x += _d_t; //CHECK-NEXT: } @@ -555,19 +555,19 @@ double f12(double x, double y) { //CHECK-NEXT: t = _t3; //CHECK-NEXT: t = _t4; //CHECK-NEXT: double _r_d2 = (_cond0 ? _d_t : _d_t); +//CHECK-NEXT: (_cond0 ? _d_t : _d_t) -= _r_d2; //CHECK-NEXT: (_cond0 ? _d_t : _d_t) += _r_d2 * y; //CHECK-NEXT: * _d_y += _t2 * _r_d2; -//CHECK-NEXT: (_cond0 ? _d_t : _d_t) -= _r_d2; //CHECK-NEXT: if (_cond0) { //CHECK-NEXT: t = _t0; //CHECK-NEXT: double _r_d0 = _d_t; -//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: _d_t -= _r_d0; +//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: } else { //CHECK-NEXT: t = _t1; //CHECK-NEXT: double _r_d1 = _d_t; -//CHECK-NEXT: * _d_y += _r_d1; //CHECK-NEXT: _d_t -= _r_d1; +//CHECK-NEXT: * _d_y += _r_d1; //CHECK-NEXT: } //CHECK-NEXT: } //CHECK-NEXT: } @@ -595,8 +595,8 @@ double f13(double x, double y) { //CHECK-NEXT: * _d_y += x * _d_t; //CHECK-NEXT: y = _t1; //CHECK-NEXT: double _r_d0 = * _d_y; -//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: * _d_y -= _r_d0; +//CHECK-NEXT: * _d_x += _r_d0; //CHECK-NEXT: } //CHECK-NEXT: } @@ -627,9 +627,9 @@ double f14(double i, double j) { // CHECK-NEXT: { // CHECK-NEXT: a = _t2; // CHECK-NEXT: double _r_d2 = *_d_a; +// CHECK-NEXT: *_d_a -= _r_d2; // CHECK-NEXT: *_d_a += _r_d2 * i; // CHECK-NEXT: * _d_i += a * _r_d2; -// CHECK-NEXT: *_d_a -= _r_d2; // CHECK-NEXT: } // CHECK-NEXT: { // CHECK-NEXT: a = _t1; @@ -639,8 +639,8 @@ double f14(double i, double j) { // CHECK-NEXT: { // CHECK-NEXT: a = _t0; // CHECK-NEXT: double _r_d0 = *_d_a; -// CHECK-NEXT: * _d_i += 2 * _r_d0; // CHECK-NEXT: *_d_a -= _r_d0; +// CHECK-NEXT: * _d_i += 2 * _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } @@ -690,9 +690,9 @@ double f15(double i, double j) { // CHECK-NEXT: { // CHECK-NEXT: d = _t3; // CHECK-NEXT: double _r_d3 = *_d_d; +// CHECK-NEXT: *_d_d -= _r_d3; // CHECK-NEXT: *_d_d += _r_d3 * 3 * j; // CHECK-NEXT: * _d_j += 3 * d * _r_d3; -// CHECK-NEXT: *_d_d -= _r_d3; // CHECK-NEXT: } // CHECK-NEXT: { // CHECK-NEXT: c = _t2; @@ -707,9 +707,9 @@ double f15(double i, double j) { // CHECK-NEXT: { // CHECK-NEXT: a = _t0; // CHECK-NEXT: double _r_d0 = *_d_a; +// CHECK-NEXT: *_d_a -= _r_d0; // CHECK-NEXT: *_d_a += _r_d0 * i; // CHECK-NEXT: * _d_i += a * _r_d0; -// CHECK-NEXT: *_d_a -= _r_d0; // CHECK-NEXT: } // CHECK-NEXT: { // CHECK-NEXT: * _d_i += _d_b * j; @@ -744,9 +744,9 @@ double f16(double i, double j) { // CHECK-NEXT: { // CHECK-NEXT: c = _t0; // CHECK-NEXT: double _r_d0 = *_d_c; +// CHECK-NEXT: *_d_c -= _r_d0; // CHECK-NEXT: *_d_c += _r_d0 * 4 * j; // CHECK-NEXT: * _d_j += 4 * c * _r_d0; -// CHECK-NEXT: *_d_c -= _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } @@ -767,8 +767,8 @@ double f17(double i, double j, double k) { // CHECK-NEXT: { // CHECK-NEXT: j = _t0; // CHECK-NEXT: double _r_d0 = _d_j; -// CHECK-NEXT: * _d_i += 2 * _r_d0; // CHECK-NEXT: _d_j -= _r_d0; +// CHECK-NEXT: * _d_i += 2 * _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } @@ -797,9 +797,9 @@ double f18(double i, double j, double k) { // CHECK-NEXT: { // CHECK-NEXT: k = _t0; // CHECK-NEXT: double _r_d0 = _d_k; +// CHECK-NEXT: _d_k -= _r_d0; // CHECK-NEXT: * _d_i += 2 * _r_d0; // CHECK-NEXT: * _d_j += 2 * _r_d0; -// CHECK-NEXT: _d_k -= _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } @@ -847,9 +847,9 @@ double f20(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: x = _t1; //CHECK-NEXT: double _r_d1 = * _d_x; +//CHECK-NEXT: * _d_x -= _r_d1; //CHECK-NEXT: *_d_r += _r_d1 * y; //CHECK-NEXT: * _d_y += r * _r_d1; -//CHECK-NEXT: * _d_x -= _r_d1; //CHECK-NEXT: * _d_x; //CHECK-NEXT: } //CHECK-NEXT: { @@ -874,14 +874,19 @@ double f21 (double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: y = _t0; //CHECK-NEXT: double _r_d0 = * _d_y; +//CHECK-NEXT: * _d_y -= _r_d0; //CHECK-NEXT: * _d_y += 0; //CHECK-NEXT: y--; //CHECK-NEXT: * _d_x += _r_d0; -//CHECK-NEXT: * _d_y -= _r_d0; //CHECK-NEXT: * _d_y; //CHECK-NEXT: } //CHECK-NEXT: } +double f22(double x, double y) { + double t = (x = y = x = 0); + return t; +} + #define TEST(F, x, y) \ { \ result[0] = 0; \ @@ -945,4 +950,5 @@ int main() { TEST(f19, 1, 2); // CHECK-EXEC: {2.00, 2.00} TEST(f20, 1, 2); // CHECK-EXEC: {0.00, 3.00} TEST(f21, 6, 4); // CHECK-EXEC: {1.00, 0.00} + TEST(f22, 6, 4); // CHECK-EXEC: {0.00, 0.00} } diff --git a/test/Gradient/FunctionCalls.C b/test/Gradient/FunctionCalls.C index 8105e2cba..6fb9fc014 100644 --- a/test/Gradient/FunctionCalls.C +++ b/test/Gradient/FunctionCalls.C @@ -113,22 +113,22 @@ double fn2(double i, double j) { // CHECK-NEXT: { // CHECK-NEXT: temp = _t3; // CHECK-NEXT: double _r_d1 = _d_temp; +// CHECK-NEXT: _d_temp -= _r_d1; // CHECK-NEXT: i = _t4; // CHECK-NEXT: j = _t5; // CHECK-NEXT: modify1_pullback(_t4, _t5, _r_d1, &* _d_i, &* _d_j); // CHECK-NEXT: double _r2 = * _d_i; // CHECK-NEXT: double _r3 = * _d_j; -// CHECK-NEXT: _d_temp -= _r_d1; // CHECK-NEXT: } // CHECK-NEXT: { // CHECK-NEXT: temp = _t0; // CHECK-NEXT: double _r_d0 = _d_temp; +// CHECK-NEXT: _d_temp -= _r_d0; // CHECK-NEXT: i = _t1; // CHECK-NEXT: j = _t2; // CHECK-NEXT: modify1_pullback(_t1, _t2, _r_d0, &* _d_i, &* _d_j); // CHECK-NEXT: double _r0 = * _d_i; // CHECK-NEXT: double _r1 = * _d_j; -// CHECK-NEXT: _d_temp -= _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } @@ -245,8 +245,8 @@ void twice(double& d) { // CHECK-NEXT: { // CHECK-NEXT: d = _t0; // CHECK-NEXT: double _r_d0 = * _d_d; -// CHECK-NEXT: * _d_d += 2 * _r_d0; // CHECK-NEXT: * _d_d -= _r_d0; +// CHECK-NEXT: * _d_d += 2 * _r_d0; // CHECK-NEXT: * _d_d; // CHECK-NEXT: } // CHECK-NEXT: } @@ -325,9 +325,9 @@ double modify2(double* arr) { // CHECK-NEXT: { // CHECK-NEXT: arr[0] = _t0; // CHECK-NEXT: double _r_d0 = _d_arr[0]; +// CHECK-NEXT: _d_arr[0] -= _r_d0; // CHECK-NEXT: _d_arr[0] += 5 * _r_d0; // CHECK-NEXT: _d_arr[1] += _r_d0; -// CHECK-NEXT: _d_arr[0] -= _r_d0; // CHECK-NEXT: _d_arr[0]; // CHECK-NEXT: } // CHECK-NEXT: } @@ -545,6 +545,7 @@ double fn10(double x, double y) { // CHECK-NEXT: { // CHECK-NEXT: out = _t4; // CHECK-NEXT: double _r_d2 = _d_out; +// CHECK-NEXT: _d_out -= _r_d2; // CHECK-NEXT: out = _t5; // CHECK-NEXT: double _grad5 = 0.; // CHECK-NEXT: double _grad6 = 0.; @@ -552,27 +553,26 @@ double fn10(double x, double y) { // CHECK-NEXT: double _r4 = _d_out; // CHECK-NEXT: double _r5 = _grad5; // CHECK-NEXT: double _r6 = _grad6; -// CHECK-NEXT: _d_out -= _r_d2; // CHECK-NEXT: } // CHECK-NEXT: { // CHECK-NEXT: out = _t2; // CHECK-NEXT: double _r_d1 = _d_out; +// CHECK-NEXT: _d_out -= _r_d1; // CHECK-NEXT: out = _t3; // CHECK-NEXT: double _grad3 = 0.; // CHECK-NEXT: clad::custom_derivatives::std::min_pullback(_t3, 10., _r_d1, &_d_out, &_grad3); // CHECK-NEXT: double _r2 = _d_out; // CHECK-NEXT: double _r3 = _grad3; -// CHECK-NEXT: _d_out -= _r_d1; // CHECK-NEXT: } // CHECK-NEXT: { // CHECK-NEXT: out = _t0; // CHECK-NEXT: double _r_d0 = _d_out; +// CHECK-NEXT: _d_out -= _r_d0; // CHECK-NEXT: out = _t1; // CHECK-NEXT: double _grad1 = 0.; // CHECK-NEXT: clad::custom_derivatives::std::max_pullback(_t1, 0., _r_d0, &_d_out, &_grad1); // CHECK-NEXT: double _r0 = _d_out; // CHECK-NEXT: double _r1 = _grad1; -// CHECK-NEXT: _d_out -= _r_d0; // CHECK-NEXT: } // CHECK-NEXT: * _d_x += _d_out; // CHECK-NEXT: } diff --git a/test/Gradient/Gradients.C b/test/Gradient/Gradients.C index e88546989..32d1028b4 100644 --- a/test/Gradient/Gradients.C +++ b/test/Gradient/Gradients.C @@ -167,8 +167,8 @@ double f_div3(double x, double y) { //CHECK-NEXT: * _d_x += 1 / _t0; //CHECK-NEXT: x = _t1; //CHECK-NEXT: double _r_d0 = * _d_x; -//CHECK-NEXT: * _d_y += _r_d0; //CHECK-NEXT: * _d_x -= _r_d0; +//CHECK-NEXT: * _d_y += _r_d0; //CHECK-NEXT: double _r0 = 1 * -_t2 / (_t0 * _t0); //CHECK-NEXT: * _d_y += _r0 * y; //CHECK-NEXT: * _d_y += y * _r0; @@ -309,9 +309,9 @@ double f_cond4(double x, double y) { //CHECK-NEXT: { //CHECK-NEXT: y = _t0; //CHECK-NEXT: double _r_d0 = * _d_y; +//CHECK-NEXT: * _d_y -= _r_d0; //CHECK-NEXT: _d_arr[i] += _r_d0 * x; //CHECK-NEXT: * _d_x += arr[i] * _r_d0; -//CHECK-NEXT: * _d_y -= _r_d0; //CHECK-NEXT: * _d_y; //CHECK-NEXT: } //CHECK-NEXT: } diff --git a/test/Gradient/Loops.C b/test/Gradient/Loops.C index 992945be6..1fdae65ba 100644 --- a/test/Gradient/Loops.C +++ b/test/Gradient/Loops.C @@ -35,9 +35,9 @@ double f1(double x) { //CHECK-NEXT: i--; //CHECK-NEXT: t = clad::pop(_t1); //CHECK-NEXT: double _r_d0 = _d_t; +//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: _d_t += _r_d0 * x; //CHECK-NEXT: * _d_x += t * _r_d0; -//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: } //CHECK-NEXT: } @@ -78,9 +78,9 @@ double f2(double x) { //CHECK-NEXT: j--; //CHECK-NEXT: t = clad::pop(_t3); //CHECK-NEXT: double _r_d0 = _d_t; +//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: _d_t += _r_d0 * x; //CHECK-NEXT: * _d_x += t * _r_d0; -//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: } //CHECK-NEXT: { //CHECK-NEXT: _d_j = 0; @@ -130,9 +130,9 @@ double f3(double x) { //CHECK-NEXT: { //CHECK-NEXT: t = clad::pop(_t1); //CHECK-NEXT: double _r_d0 = _d_t; +//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: _d_t += _r_d0 * x; //CHECK-NEXT: * _d_x += t * _r_d0; -//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: } //CHECK-NEXT: } //CHECK-NEXT: } @@ -162,9 +162,9 @@ double f4(double x) { //CHECK-NEXT: { //CHECK-NEXT: t = clad::pop(_t1); //CHECK-NEXT: double _r_d0 = _d_t; +//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: _d_t += _r_d0 * x; //CHECK-NEXT: * _d_x += t * _r_d0; -//CHECK-NEXT: _d_t -= _r_d0; //CHECK-NEXT: } //CHECK-NEXT: i--; //CHECK-NEXT: } @@ -374,13 +374,13 @@ double f_log_gaus(double* x, double* p /*means*/, double n, double sigma) { //CHECK-NEXT: { //CHECK-NEXT: power = _t2; //CHECK-NEXT: double _r_d1 = _d_power; +//CHECK-NEXT: _d_power -= _r_d1; //CHECK-NEXT: _d_power += -_r_d1 / _t3; //CHECK-NEXT: double _r1 = _r_d1 * --power / (_t3 * _t3); //CHECK-NEXT: double _grad1 = 0.; //CHECK-NEXT: sq_pullback(sigma, 2 * _r1, &_grad1); //CHECK-NEXT: double _r2 = _grad1; //CHECK-NEXT: _d_sigma += _r2; -//CHECK-NEXT: _d_power -= _r_d1; //CHECK-NEXT: } //CHECK-NEXT: for (; _t0; _t0--) { //CHECK-NEXT: i--; @@ -669,11 +669,11 @@ double fn9(double i, double j) { // CHECK-NEXT: { // CHECK-NEXT: counter = _t0; // CHECK-NEXT: int _r_d0 = _d_counter; +// CHECK-NEXT: _d_counter -= _r_d0; // CHECK-NEXT: _d_counter_again += _r_d0; // CHECK-NEXT: counter_again = _t1; // CHECK-NEXT: int _r_d1 = _d_counter_again; // CHECK-NEXT: _d_counter_again -= _r_d1; -// CHECK-NEXT: _d_counter -= _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } diff --git a/test/Gradient/MemberFunctions.C b/test/Gradient/MemberFunctions.C index 68e29694c..c647ae4ff 100644 --- a/test/Gradient/MemberFunctions.C +++ b/test/Gradient/MemberFunctions.C @@ -509,14 +509,14 @@ double fn2(SimpleFunctions& sf, double i) { // CHECK-NEXT: { // CHECK-NEXT: this->x = _t1; // CHECK-NEXT: double _r_d1 = (* _d_this).x; -// CHECK-NEXT: * _d_i += -_r_d1; // CHECK-NEXT: (* _d_this).x -= _r_d1; +// CHECK-NEXT: * _d_i += -_r_d1; // CHECK-NEXT: } // CHECK-NEXT: { // CHECK-NEXT: this->x = _t0; // CHECK-NEXT: double _r_d0 = (* _d_this).x; -// CHECK-NEXT: * _d_i += _r_d0; // CHECK-NEXT: (* _d_this).x -= _r_d0; +// CHECK-NEXT: * _d_i += _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } diff --git a/test/Gradient/Pointers.C b/test/Gradient/Pointers.C index 0ea8da25f..fbc4f34eb 100644 --- a/test/Gradient/Pointers.C +++ b/test/Gradient/Pointers.C @@ -38,9 +38,9 @@ double minimalPointer(double x) { // CHECK-NEXT: { // CHECK-NEXT: *p = _t0; // CHECK-NEXT: double _r_d0 = *_d_p; +// CHECK-NEXT: *_d_p -= _r_d0; // CHECK-NEXT: *_d_p += _r_d0 * (*p); // CHECK-NEXT: *_d_p += *p * _r_d0; -// CHECK-NEXT: *_d_p -= _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } diff --git a/test/Gradient/TestTypeConversion.C b/test/Gradient/TestTypeConversion.C index 895fab186..4576f83d7 100644 --- a/test/Gradient/TestTypeConversion.C +++ b/test/Gradient/TestTypeConversion.C @@ -36,9 +36,9 @@ void fn_type_conversion_grad(float z, int a, clad::array_ref _d_z, clad:: // CHECK-NEXT: { // CHECK-NEXT: z = clad::pop(_t1); // CHECK-NEXT: float _r_d0 = * _d_z; +// CHECK-NEXT: * _d_z -= _r_d0; // CHECK-NEXT: * _d_z += _r_d0 * a; // CHECK-NEXT: * _d_a += z * _r_d0; -// CHECK-NEXT: * _d_z -= _r_d0; // CHECK-NEXT: * _d_z; // CHECK-NEXT: } // CHECK-NEXT: } diff --git a/test/Gradient/UserDefinedTypes.C b/test/Gradient/UserDefinedTypes.C index f9e013fa5..71af7f53a 100644 --- a/test/Gradient/UserDefinedTypes.C +++ b/test/Gradient/UserDefinedTypes.C @@ -170,15 +170,15 @@ double fn3(double i, double j) { // CHECK-NEXT: { // CHECK-NEXT: t.data[1] = _t1; // CHECK-NEXT: double _r_d1 = _d_t.data[1]; +// CHECK-NEXT: _d_t.data[1] -= _r_d1; // CHECK-NEXT: * _d_i += 5 * _r_d1; // CHECK-NEXT: * _d_j += 3 * _r_d1; -// CHECK-NEXT: _d_t.data[1] -= _r_d1; // CHECK-NEXT: } // CHECK-NEXT: { // CHECK-NEXT: t.data[0] = _t0; // CHECK-NEXT: double _r_d0 = _d_t.data[0]; -// CHECK-NEXT: * _d_i += 2 * _r_d0; // CHECK-NEXT: _d_t.data[0] -= _r_d0; +// CHECK-NEXT: * _d_i += 2 * _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } @@ -268,8 +268,8 @@ double fn6(dcomplex c, double i) { // CHECK-NEXT: { // CHECK-NEXT: {{(__real)?}} this->[[_M_value:.*]] = _t0; // CHECK-NEXT: double _r_d0 ={{( __real)?}} (* _d_this).[[_M_value]]; -// CHECK-NEXT: * [[_d___val]] += _r_d0; // CHECK-NEXT: {{(__real)?}} (* _d_this).[[_M_value]] -= _r_d0; +// CHECK-NEXT: * [[_d___val]] += _r_d0; // CHECK-NEXT: } // CHECK-NEXT: } @@ -380,8 +380,8 @@ double fn8(Tangent t, dcomplex c) { // CHECK-NEXT: --i; // CHECK-NEXT: this->data[i] = clad::pop(_t1); // CHECK-NEXT: double _r_d0 = (* _d_this).data[i]; -// CHECK-NEXT: * _d_d += _r_d0; // CHECK-NEXT: (* _d_this).data[i] -= _r_d0; +// CHECK-NEXT: * _d_d += _r_d0; // CHECK-NEXT: } // CHECK-NEXT: }