[llvm-commits] [llvm] r92885 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/and-su.ll

Chris Lattner clattner at apple.com
Wed Jan 6 17:22:36 PST 2010


Does this fix PR 5963 bychance?

-Chris

On Jan 6, 2010, at 4:54 PM, Evan Cheng wrote:

> Author: evancheng
> Date: Wed Jan  6 18:54:06 2010
> New Revision: 92885
>
> URL: http://llvm.org/viewvc/llvm-project?rev=92885&view=rev
> Log:
> Fix a minor regression from my dag combiner changes. One more place  
> which needs to look pass truncates.
>
> Modified:
>    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>    llvm/trunk/test/CodeGen/X86/and-su.ll
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=92885&r1=92884&r2=92885&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Jan  6  
> 18:54:06 2010
> @@ -5611,13 +5611,21 @@
>       // because a TEST instruction will be better.
>       bool NonFlagUse = false;
>       for (SDNode::use_iterator UI = Op.getNode()->use_begin(),
> -           UE = Op.getNode()->use_end(); UI != UE; ++UI)
> -        if (UI->getOpcode() != ISD::BRCOND &&
> -            (UI->getOpcode() != ISD::SELECT || UI.getOperandNo() !=  
> 0) &&
> -            UI->getOpcode() != ISD::SETCC) {
> +             UE = Op.getNode()->use_end(); UI != UE; ++UI) {
> +        SDNode *User = *UI;
> +        unsigned UOpNo = UI.getOperandNo();
> +        if (User->getOpcode() == ISD::TRUNCATE && User- 
> >hasOneUse()) {
> +          // Look pass truncate.
> +          UOpNo = User->use_begin().getOperandNo();
> +          User = *User->use_begin();
> +        }
> +        if (User->getOpcode() != ISD::BRCOND &&
> +            User->getOpcode() != ISD::SETCC &&
> +            (User->getOpcode() != ISD::SELECT || UOpNo != 0)) {
>           NonFlagUse = true;
>           break;
>         }
> +      }
>       if (!NonFlagUse)
>         break;
>     }
>
> Modified: llvm/trunk/test/CodeGen/X86/and-su.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/and-su.ll?rev=92885&r1=92884&r2=92885&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/CodeGen/X86/and-su.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/and-su.ll Wed Jan  6 18:54:06 2010
> @@ -1,16 +1,53 @@
> -; RUN: llc < %s -march=x86 | grep {(%} | count 1
> +; RUN: llc < %s -march=x86 | FileCheck %s
>
> ; Don't duplicate the load.
>
> define fastcc i32 @foo(i32* %p) nounwind {
> +; CHECK: foo:
> +; CHECK: andl $10, %eax
> +; CHECK: je
> 	%t0 = load i32* %p
> 	%t2 = and i32 %t0, 10
> 	%t3 = icmp ne i32 %t2, 0
> 	br i1 %t3, label %bb63, label %bb76
> -
> bb63:
> 	ret i32 %t2
> -
> bb76:
> 	ret i32 0
> }
> +
> +define fastcc double @bar(i32 %hash, double %x, double %y) nounwind {
> +entry:
> +; CHECK: bar:
> +  %0 = and i32 %hash, 15
> +  %1 = icmp ult i32 %0, 8
> +  br i1 %1, label %bb11, label %bb10
> +
> +bb10:
> +; CHECK: bb10
> +; CHECK: testb $1
> +  %2 = and i32 %hash, 1
> +  %3 = icmp eq i32 %2, 0
> +  br i1 %3, label %bb13, label %bb11
> +
> +bb11:
> +  %4 = fsub double -0.000000e+00, %x
> +  br label %bb13
> +
> +bb13:
> +; CHECK: bb13
> +; CHECK: testb $2
> +  %iftmp.9.0 = phi double [ %4, %bb11 ], [ %x, %bb10 ]
> +  %5 = and i32 %hash, 2
> +  %6 = icmp eq i32 %5, 0
> +  br i1 %6, label %bb16, label %bb14
> +
> +bb14:
> +  %7 = fsub double -0.000000e+00, %y
> +  br label %bb16
> +
> +bb16:
> +  %iftmp.10.0 = phi double [ %7, %bb14 ], [ %y, %bb13 ]
> +  %8 = fadd double %iftmp.9.0, %iftmp.10.0
> +  ret double %8
> +}
>
>
> _______________________________________________
> 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