@@ -1014,10 +1014,20 @@ class AdjointGenerator
1014
1014
diffe (&SI, Builder2), " diffe" + op2->getName ());
1015
1015
1016
1016
setDiffe (&SI, Constant::getNullValue (SI.getType ()), Builder2);
1017
- if (dif1)
1018
- addToDiffe (orig_op1, dif1, Builder2, TR.addingType (size, orig_op1));
1019
- if (dif2)
1020
- addToDiffe (orig_op2, dif2, Builder2, TR.addingType (size, orig_op2));
1017
+ if (dif1) {
1018
+ Type *addingType = TR.addingType (size, orig_op1);
1019
+ if (addingType || !looseTypeAnalysis)
1020
+ addToDiffe (orig_op1, dif1, Builder2, addingType);
1021
+ else
1022
+ llvm::errs () << " warning: assuming integral for " << SI << " \n " ;
1023
+ }
1024
+ if (dif2) {
1025
+ Type *addingType = TR.addingType (size, orig_op2);
1026
+ if (addingType || !looseTypeAnalysis)
1027
+ addToDiffe (orig_op2, dif2, Builder2, addingType);
1028
+ else
1029
+ llvm::errs () << " warning: assuming integral for " << SI << " \n " ;
1030
+ }
1021
1031
}
1022
1032
1023
1033
void createSelectInstDual (llvm::SelectInst &SI) {
@@ -1710,8 +1720,12 @@ class AdjointGenerator
1710
1720
}
1711
1721
goto def;
1712
1722
}
1723
+ case Instruction::Mul:
1724
+ case Instruction::Sub:
1713
1725
case Instruction::Add: {
1714
1726
if (looseTypeAnalysis) {
1727
+ llvm::errs () << " warning: binary operator is integer and constant: "
1728
+ << BO << " \n " ;
1715
1729
// if loose type analysis, assume this integer add is constant
1716
1730
return ;
1717
1731
}
0 commit comments