@@ -4049,18 +4049,18 @@ Function* CreatePrimalAndGradient(Function* todiff, const std::set<unsigned>& co
40494049 case Intrinsic::fabs: {
40504050 if (!gutils->isConstantInstruction (op) && !gutils->isConstantValue (op->getOperand (0 ))) {
40514051 auto cmp = Builder2.CreateFCmpOLT (lookup (op->getOperand (0 )), ConstantFP::get (op->getOperand (0 )->getType (), 0 ));
4052- dif0 = Builder2.CreateSelect (cmp, ConstantFP::get (op->getOperand (0 )->getType (), -1 ), ConstantFP::get (op->getOperand (0 )->getType (), 1 ));
4052+ dif0 = Builder2.CreateFMul (Builder2. CreateSelect (cmp, ConstantFP::get (op->getOperand (0 )->getType (), -1 ), ConstantFP::get (op->getOperand (0 )->getType (), 1 )), diffe (inst ));
40534053 }
40544054 break ;
40554055 }
40564056 case Intrinsic::maxnum: {
40574057 if (!gutils->isConstantInstruction (op) && !gutils->isConstantValue (op->getOperand (0 ))) {
40584058 auto cmp = Builder2.CreateFCmpOLT (lookup (op->getOperand (0 )), lookup (op->getOperand (1 )));
4059- dif0 = Builder2.CreateSelect (cmp, ConstantFP::get (op->getOperand (0 )->getType (), 0 ), ConstantFP::get (op-> getOperand ( 0 )-> getType (), 1 ));
4059+ dif0 = Builder2.CreateSelect (cmp, ConstantFP::get (op->getOperand (0 )->getType (), 0 ), diffe (inst ));
40604060 }
40614061 if (!gutils->isConstantInstruction (op) && !gutils->isConstantValue (op->getOperand (1 ))) {
40624062 auto cmp = Builder2.CreateFCmpOLT (lookup (op->getOperand (0 )), lookup (op->getOperand (1 )));
4063- dif1 = Builder2.CreateSelect (cmp, ConstantFP::get (op-> getOperand ( 0 )-> getType (), 1 ), ConstantFP::get (op->getOperand (0 )->getType (), 0 ));
4063+ dif1 = Builder2.CreateSelect (cmp, diffe (inst ), ConstantFP::get (op->getOperand (0 )->getType (), 0 ));
40644064 }
40654065 break ;
40664066 }
0 commit comments