[llvm-commits] [llvm] r77407 - in /llvm/trunk: include/llvm/IntrinsicsX86.td lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86ISelLowering.h lib/Target/X86/X86InstrSSE.td test/CodeGen/X86/sse41.ll
Chris Lattner
clattner at apple.com
Tue Jul 28 22:29:55 PDT 2009
On Jul 28, 2009, at 10:10 PM, Eli Friedman wrote:
> On Tue, Jul 28, 2009 at 9:44 PM, Chris Lattner<clattner at apple.com>
> wrote:
>> From my understanding, I think that ptest is commutative (but maybe
>> only for "z", but not the others?). If unconditionally true, you can
>> declare this with [SDNPCommutative] as a third argument to SDNode and
>> the instruction should be figured out to be commutative. If only
>> true
>> in some cases, more trickery will be required.
>
> For PTEST, the ZF flag is commutative, but the CF flag is not.
Ok, that's what I feared. This means that we need conditional flag
liveness stuff? Is there a way to know (e.g. in regalloc, when doing
a spill) that only one flag is used? Do we have flag subregs?
Perhaps this should just go in the readme-sse.txt file to worry about
later.
-Chris
>
>
>> It should allow the instruction to fold the load instead of
>> producing:
>>
>> _test:
>> movl 4(%esp), %eax
>> movaps (%eax), %xmm1
>> ptest %xmm0, %xmm1
>> sete %al
>> movzbl %al, %eax
>> ret
>>
>> Does "ptest" need to be added to the load folding table in case it is
>> isel'd as reg/reg but an operand gets spilled (thus the regalloc
>> should fold the load by forming reg/mem)?
>
> I think the issue here is that it doesn't know it's safe to commute
> the ptest...
>
> -Eli
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list