[LLVMdev] idempotence
John Regehr
regehr at cs.utah.edu
Wed Nov 4 11:59:31 PST 2009
The LLVM projects page says this:
"We need some way to reason about errno. Consider a loop like this:
for ()
x += sqrt(loopinvariant);"
and:
"The hard part of this project is figuring out how to describe errno in
the optimizer"
The important property here is the idempotence of sqrt(): it is
potentially side-effecting, but that side effect is independent of the
number of times it is called (with the same argument).
Thus the solution to the errno problem seems to be an idempotence
analysis pass, an idempotent function attribute, and a handful of passes
(LICM, maybe more) that exploit this attribute.
Putting on my volatile testing hat for a second, I feel compelled to
mention that no function that potentially touches a volatile object is
idempotent :).
John Regehr
More information about the llvm-dev
mailing list