[llvm-commits] [llvm] r171136 - /llvm/trunk/lib/Target/X86/X86InstrArithmetic.td

Craig Topper craig.topper at gmail.com
Wed Jan 2 22:08:00 PST 2013


Does this apply to other targets too? The ARM divide instructions aren't
marked as having side effects for instance.

On Wed, Jan 2, 2013 at 12:58 PM, Jakob Stoklund Olesen <stoklund at 2pi.dk>wrote:

>
> On Jan 2, 2013, at 11:44 AM, Craig Topper <craig.topper at gmail.com> wrote:
>
> OK. Should we more explicitly set "hasSideEffects = 1" then so that its
> not subtly happening due to lack of a pattern?
>
>
> Yes, I think that is best. Ideally, all targets should work
> with guessInstructionProperties = 0. I would like to make that the default.
>
> You can add the test case to test/CodeGen/X86/early-ifcvt.ll
>
> Thanks,
> /jakob
>
>
>
> On Wed, Jan 2, 2013 at 11:11 AM, Jakob Stoklund Olesen <stoklund at 2pi.dk>wrote:
>
>>
>> On Jan 2, 2013, at 11:04 AM, Jakob Stoklund Olesen <stoklund at 2pi.dk>
>> wrote:
>>
>> >
>> > On Dec 26, 2012, at 7:01 PM, Craig Topper <craig.topper at gmail.com>
>> wrote:
>> >
>> >> Author: ctopper
>> >> Date: Wed Dec 26 21:01:18 2012
>> >> New Revision: 171136
>> >>
>> >> URL: http://llvm.org/viewvc/llvm-project?rev=171136&view=rev
>> >> Log:
>> >> Mark the divide instructions as hasSideEffects=0.
>> >
>> > Hi Craig,
>> >
>> > I don't think this is safe because div instructions can trap when the
>> divisor is 0, and that means it is not safe to move them between basic
>> blocks. See also llvm::isSafeToSpeculativelyExecute().
>>
>> For example:
>>
>> $ cat unsafe-div.c
>> int f(int a, int b) {
>>   return b ? a/b : a;
>> }
>>
>> $ Release+Asserts/bin/clang -O -o- -S unsafe-div.c -mllvm
>> -x86-early-ifcvt -mllvm -stress-early-ifcvt
>>         .section        __TEXT,__text,regular,pure_instructions
>>         .globl  _f
>>         .align  4, 0x90
>> _f:                                     ## @f
>>         .cfi_startproc
>> ## BB#0:                                ## %entry
>>         pushq   %rbp
>> Ltmp2:
>>         .cfi_def_cfa_offset 16
>> Ltmp3:
>>         .cfi_offset %rbp, -16
>>         movq    %rsp, %rbp
>> Ltmp4:
>>         .cfi_def_cfa_register %rbp
>>         movl    %edi, %eax
>>         cltd
>>         idivl   %esi
>>         testl   %esi, %esi
>>         cmovel  %edi, %eax
>>         popq    %rbp
>>         ret
>>         .cfi_endproc
>>
>>
>> .subsections_via_symbols
>>
>>
>
>
> --
> ~Craig
>
>
>


-- 
~Craig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130102/e68284f2/attachment.html>


More information about the llvm-commits mailing list