[llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant)
Török Edwin
edwintorok at gmail.com
Mon Jan 5 13:12:38 PST 2009
On 2009-01-05 23:01, Eli Friedman wrote:
> On Mon, Jan 5, 2009 at 1:25 AM, Török Edwin <edwintorok at gmail.com> wrote:
>
>> I added back the Constant* functions in ConstantFolder/TargetFolder,
>> since llvm-gcc is using them (called with constant* params, expecting
>> constant* return).
>>
>
> + case Instruction::UDiv:
> + case Instruction::SDiv:
> + // udiv/sdiv 0, X -> 0
> + // This also transforms udiv 0, 0 (undefined behaviour) -> 0.
> + if (CLHS && CLHS->isZero())
> + return CLHS;
> + // udiv/sdiv X, 1 -> X
> + if (CRHS && CRHS->isOne())
> + return LHS;
> + // Don't simplify udiv X, 0 at this point, because it could be used
> + // to knowingly generate a SIGFPE.
> + break;
>
> Go ahead and simplify udiv X, 0... we don't make any guarantees about
> what happens when you perform an illegal division, and half-baked
> attempts to preserve that behavior aren't helpful. If someone really
> wants a SIGFPE, they should use inline asm or something like that.
> Actually, you could just remove the comment, though, since it's not
> likely to show up in normal code.
>
I'll remove the comment.
Best regards,
--Edwin
More information about the llvm-commits
mailing list