[llvm-commits] [llvm] r79380 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeDAG.cpp test/CodeGen/X86/shift-parts.ll

Bill Wendling wendling at apple.com
Tue Aug 18 16:45:53 PDT 2009


On Aug 18, 2009, at 4:36 PM, Dan Gohman wrote:

> Author: djg
> Date: Tue Aug 18 18:36:17 2009
> New Revision: 79380
>
> URL: http://llvm.org/viewvc/llvm-project?rev=79380&view=rev
> Log:
> Legalize the shift amount operand of SRL_PARTS, SHL_PARTS, and
> SRA_PARTS, as is done for SRL, SHL, and SRA.
>
> Added:
>    llvm/trunk/test/CodeGen/X86/shift-parts.ll
> Modified:
>    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=79380&r1=79379&r2=79380&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Tue Aug 18  
> 18:36:17 2009
> @@ -898,6 +898,13 @@
>       if (!Ops[1].getValueType().isVector())
>         Ops[1] = LegalizeOp(DAG.getShiftAmountOperand(Ops[1]));
>       break;
> +    case ISD::SRL_PARTS:
> +    case ISD::SRA_PARTS:
> +    case ISD::SHL_PARTS:
> +      // Legalizing shifts/rotates requires adjusting the shift  
> amount
> +      // to the appropriate width.
> +      if (!Ops[2].getValueType().isVector())
> +        Ops[2] = LegalizeOp(DAG.getShiftAmountOperand(Ops[2]));

Should there be a "break;" statement here?

-bw

>     }
>
>     Result = DAG.UpdateNodeOperands(Result.getValue(0), Ops.data(),
>
> Added: llvm/trunk/test/CodeGen/X86/shift-parts.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/shift-parts.ll?rev=79380&view=auto
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/CodeGen/X86/shift-parts.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/shift-parts.ll Tue Aug 18 18:36:17  
> 2009
> @@ -0,0 +1,22 @@
> +; RUN: llvm-as < %s | llc -march=x86-64 | grep shrdq
> +; PR4736
> +
> +%0 = type { i32, i8, [35 x i8] }
> +
> + at g_144 = external global %0, align 8              ; <%0*> [#uses=1]
> +
> +define i32 @int87(i32 %uint64p_8) nounwind {
> +entry:
> +  %srcval4 = load i320* bitcast (%0* @g_144 to i320*), align 8 ;  
> <i320> [#uses=1]
> +  br label %for.cond
> +
> +for.cond:                                         ; preds =  
> %for.cond, %entry
> +  %call3.in.in.in.v = select i1 undef, i320 192, i320 128 ; <i320>  
> [#uses=1]
> +  %call3.in.in.in = lshr i320 %srcval4, %call3.in.in.in.v ; <i320>  
> [#uses=1]
> +  %call3.in = trunc i320 %call3.in.in.in to i32   ; <i32> [#uses=1]
> +  %tobool = icmp eq i32 %call3.in, 0              ; <i1> [#uses=1]
> +  br i1 %tobool, label %for.cond, label %if.then
> +
> +if.then:                                          ; preds = %for.cond
> +  ret i32 1
> +}
>
>
> _______________________________________________
> 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