[llvm-commits] [llvm] r85787 - in /llvm/trunk: lib/Target/ARM/ARMBaseInstrInfo.cpp test/CodeGen/Thumb2/2009-11-01-CopyReg2RegBug.ll

Jim Grosbach grosbach at apple.com
Mon Nov 2 08:59:18 PST 2009


Hi Evan,

Looks good. Trivial comment tweak below.

-Jim


On Nov 1, 2009, at 8:44 PM, Evan Cheng wrote:

> Author: evancheng
> Date: Sun Nov  1 22:44:55 2009
> New Revision: 85787
>
> URL: http://llvm.org/viewvc/llvm-project?rev=85787&view=rev
> Log:
> Unbreak ARMBaseRegisterInfo::copyRegToReg.
>
> Added:
>    llvm/trunk/test/CodeGen/Thumb2/2009-11-01-CopyReg2RegBug.ll
> Modified:
>    llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp
>
> Modified: llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp?rev=85787&r1=85786&r2=85787&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp Sun Nov  1  
> 22:44:55 2009
> @@ -660,26 +660,27 @@
>   } else if (DestRC == ARM::DPRRegisterClass) {
>     const ARMBaseRegisterInfo* TRI = &getRegisterInfo();
>
> +    // If we do not found an instruction defining the reg, this  
> means the

s/found/find

> +    // register should be live-in for this BB. It's always to  
> better to use
> +    // NEON reg-reg moves.
> +    unsigned Domain = ARMII::DomainNEON;
> +
>     // Find the Machine Instruction which defines SrcReg.
> -    MachineBasicBlock::iterator J = (I == MBB.begin() ? I : prior 
> (I));
> -    while (J != MBB.begin()) {
> -      if (J->modifiesRegister(SrcReg, TRI))
> -        break;
> -      --J;
> -    }
> +    if (!MBB.empty()) {
> +      MachineBasicBlock::iterator J = (I == MBB.begin() ? I : prior 
> (I));
> +      while (J != MBB.begin()) {
> +        if (J->modifiesRegister(SrcReg, TRI))
> +          break;
> +        --J;
> +      }
>
> -    unsigned Domain;
> -    if (J->modifiesRegister(SrcReg, TRI)) {
> -      Domain = J->getDesc().TSFlags & ARMII::DomainMask;
> -      // Instructions in general domain are subreg accesses.
> -      // Map them to NEON reg-reg moves.
> -      if (Domain == ARMII::DomainGeneral)
> -        Domain = ARMII::DomainNEON;
> -    } else {
> -      // We reached the beginning of the BB and found no  
> instruction defining
> -      // the reg. This means that register should be live-in for  
> this BB.
> -      // It's always to better to use NEON reg-reg moves.
> -      Domain = ARMII::DomainNEON;
> +      if (J->modifiesRegister(SrcReg, TRI)) {
> +        Domain = J->getDesc().TSFlags & ARMII::DomainMask;
> +        // Instructions in general domain are subreg accesses.
> +        // Map them to NEON reg-reg moves.
> +        if (Domain == ARMII::DomainGeneral)
> +          Domain = ARMII::DomainNEON;
> +      }
>     }
>
>     if ((Domain & ARMII::DomainNEON) && getSubtarget().hasNEON()) {
>
> Added: llvm/trunk/test/CodeGen/Thumb2/2009-11-01-CopyReg2RegBug.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb2/2009-11-01-CopyReg2RegBug.ll?rev=85787&view=auto
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/CodeGen/Thumb2/2009-11-01-CopyReg2RegBug.ll  
> (added)
> +++ llvm/trunk/test/CodeGen/Thumb2/2009-11-01-CopyReg2RegBug.ll Sun  
> Nov  1 22:44:55 2009
> @@ -0,0 +1,29 @@
> +; RUN: llc < %s -mtriple=thumbv7-apple-darwin -relocation-model=pic  
> -disable-fp-elim -mcpu=cortex-a8
> +
> +define arm_apcscc void @get_initial_mb16x16_cost() nounwind {
> +entry:
> +  br i1 undef, label %bb4, label %bb1
> +
> +bb1:                                              ; preds = %entry
> +  br label %bb7
> +
> +bb4:                                              ; preds = %entry
> +  br i1 undef, label %bb7.thread, label %bb5
> +
> +bb5:                                              ; preds = %bb4
> +  br label %bb7
> +
> +bb7.thread:                                       ; preds = %bb4
> +  br label %bb8
> +
> +bb7:                                              ; preds = %bb5,  
> %bb1
> +  br i1 undef, label %bb8, label %bb10
> +
> +bb8:                                              ; preds = %bb7,  
> %bb7.thread
> +  %0 = phi double [ 5.120000e+02, %bb7.thread ], [ undef, %bb7 ] ;  
> <double> [#uses=1]
> +  %1 = fdiv double %0, undef                      ; <double>  
> [#uses=0]
> +  unreachable
> +
> +bb10:                                             ; preds = %bb7
> +  ret void
> +}
>
>
> _______________________________________________
> 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