[LLVMdev] Target description flags for instructions which may trap
Richard Osborne
richard at xmos.com
Thu Oct 30 07:08:15 PDT 2008
What are the correct target description side effect flags for
instructions which may trap (e.g. divide / remainder)? The divide
instruction in my backend currently has no flags set. I've enabled the
MachineLICM pass and it's causing a miscompilation by hoisting a divide
by zero instruction out of the loop. Clearly this pass needs to be made
aware that this is not safe. The current test in the MachineLICM is as
follows:
// Ignore stuff that we obviously can't hoist.
if (TID.mayStore() || TID.isCall() || TID.isReturn() || TID.isBranch() ||
TID.hasUnmodeledSideEffects())
return false;
Setting hasSideEffects = 1 seems to work, but I'm not sure if that's the
intended use of this flag. I notice that divide / remainder instructions
for other architectures are not marked in this way. Also it is also
pessimistic: if the divisor is know to be non zero then the instruction
couldn't trap and would be safe to motion.
Richard Osborne | XMOS
http://www.xmos.com
More information about the llvm-dev
mailing list