[flang] Fix F18 scalar integer power algorithm

Original-commit: flang-compiler/f18@f0609e7ace
This commit is contained in:
Jean Perier 2019-03-28 08:18:42 -07:00
parent 68cfc92b1a
commit 9f98662b5f
2 changed files with 7 additions and 3 deletions

View file

@ -953,9 +953,9 @@ public:
result.overflow |= product.SignedMultiplicationOverflowed();
}
if (j + 1 < nbits) {
ValueWithOverflow doubled{shifted.AddSigned(shifted)};
result.overflow |= doubled.overflow;
shifted = doubled.value;
Product squared{shifted.MultiplySigned(shifted)};
result.overflow |= squared.SignedMultiplicationOverflowed();
shifted = squared.lower;
}
}
}

View file

@ -95,5 +95,9 @@ module m
logical, parameter :: test_divide_i3 = ((-7)/2).EQ.(-3)
logical, parameter :: test_divide_i4 = (0/127).EQ.(0)
logical, parameter :: test_pow1 = (2**0).EQ.(1)
logical, parameter :: test_pow2 = (1**100).EQ.(1)
logical, parameter :: test_pow3 = (2**4).EQ.(16)
logical, parameter :: test_pow4 = (7**5).EQ.(16807)
end module