[Mips]  Return true in enableMultipleCopyHints().

Enable multiple COPY hints to eliminate more COPYs during register allocation.

Note that this is something all targets should do, see
https://reviews.llvm.org/D38128.

Review: Simon Dardis
llvm-svn: 325870
diff --git a/llvm/test/CodeGen/Mips/llvm-ir/select-flt.ll b/llvm/test/CodeGen/Mips/llvm-ir/select-flt.ll
index c0ac43f..c04601c 100644
--- a/llvm/test/CodeGen/Mips/llvm-ir/select-flt.ll
+++ b/llvm/test/CodeGen/Mips/llvm-ir/select-flt.ll
@@ -71,19 +71,19 @@
 ; M3:       # %bb.0: # %entry
 ; M3-NEXT:    andi $1, $4, 1
 ; M3-NEXT:    bnez $1, .LBB0_2
-; M3-NEXT:    nop
+; M3-NEXT:    mov.s $f0, $f13
 ; M3-NEXT:  # %bb.1: # %entry
-; M3-NEXT:    mov.s $f13, $f14
+; M3-NEXT:    mov.s $f0, $f14
 ; M3-NEXT:  .LBB0_2: # %entry
 ; M3-NEXT:    jr $ra
-; M3-NEXT:    mov.s $f0, $f13
+; M3-NEXT:    nop
 ;
 ; CMOV64-LABEL: tst_select_i1_float:
 ; CMOV64:       # %bb.0: # %entry
-; CMOV64-NEXT:    andi $1, $4, 1
-; CMOV64-NEXT:    movn.s $f14, $f13, $1
-; CMOV64-NEXT:    jr $ra
 ; CMOV64-NEXT:    mov.s $f0, $f14
+; CMOV64-NEXT:    andi $1, $4, 1
+; CMOV64-NEXT:    jr $ra
+; CMOV64-NEXT:    movn.s $f0, $f13, $1
 ;
 ; 64R6-LABEL: tst_select_i1_float:
 ; 64R6:       # %bb.0: # %entry
@@ -116,26 +116,26 @@
 ; M2:       # %bb.0: # %entry
 ; M2-NEXT:    andi $1, $6, 1
 ; M2-NEXT:    bnez $1, $BB1_2
-; M2-NEXT:    nop
+; M2-NEXT:    mov.s $f0, $f12
 ; M2-NEXT:  # %bb.1: # %entry
-; M2-NEXT:    mov.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f14
 ; M2-NEXT:  $BB1_2: # %entry
 ; M2-NEXT:    jr $ra
-; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    nop
 ;
 ; CMOV32R1-LABEL: tst_select_i1_float_reordered:
 ; CMOV32R1:       # %bb.0: # %entry
-; CMOV32R1-NEXT:    andi $1, $6, 1
-; CMOV32R1-NEXT:    movn.s $f14, $f12, $1
-; CMOV32R1-NEXT:    jr $ra
 ; CMOV32R1-NEXT:    mov.s $f0, $f14
+; CMOV32R1-NEXT:    andi $1, $6, 1
+; CMOV32R1-NEXT:    jr $ra
+; CMOV32R1-NEXT:    movn.s $f0, $f12, $1
 ;
 ; CMOV32R2-LABEL: tst_select_i1_float_reordered:
 ; CMOV32R2:       # %bb.0: # %entry
-; CMOV32R2-NEXT:    andi $1, $6, 1
-; CMOV32R2-NEXT:    movn.s $f14, $f12, $1
-; CMOV32R2-NEXT:    jr $ra
 ; CMOV32R2-NEXT:    mov.s $f0, $f14
+; CMOV32R2-NEXT:    andi $1, $6, 1
+; CMOV32R2-NEXT:    jr $ra
+; CMOV32R2-NEXT:    movn.s $f0, $f12, $1
 ;
 ; 32R6-LABEL: tst_select_i1_float_reordered:
 ; 32R6:       # %bb.0: # %entry
@@ -147,19 +147,19 @@
 ; M3:       # %bb.0: # %entry
 ; M3-NEXT:    andi $1, $6, 1
 ; M3-NEXT:    bnez $1, .LBB1_2
-; M3-NEXT:    nop
+; M3-NEXT:    mov.s $f0, $f12
 ; M3-NEXT:  # %bb.1: # %entry
-; M3-NEXT:    mov.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f13
 ; M3-NEXT:  .LBB1_2: # %entry
 ; M3-NEXT:    jr $ra
-; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    nop
 ;
 ; CMOV64-LABEL: tst_select_i1_float_reordered:
 ; CMOV64:       # %bb.0: # %entry
-; CMOV64-NEXT:    andi $1, $6, 1
-; CMOV64-NEXT:    movn.s $f13, $f12, $1
-; CMOV64-NEXT:    jr $ra
 ; CMOV64-NEXT:    mov.s $f0, $f13
+; CMOV64-NEXT:    andi $1, $6, 1
+; CMOV64-NEXT:    jr $ra
+; CMOV64-NEXT:    movn.s $f0, $f12, $1
 ;
 ; 64R6-LABEL: tst_select_i1_float_reordered:
 ; 64R6:       # %bb.0: # %entry
@@ -169,10 +169,10 @@
 ;
 ; MM32R3-LABEL: tst_select_i1_float_reordered:
 ; MM32R3:       # %bb.0: # %entry
-; MM32R3-NEXT:    andi16 $2, $6, 1
-; MM32R3-NEXT:    movn.s $f14, $f12, $2
-; MM32R3-NEXT:    jr $ra
 ; MM32R3-NEXT:    mov.s $f0, $f14
+; MM32R3-NEXT:    andi16 $2, $6, 1
+; MM32R3-NEXT:    jr $ra
+; MM32R3-NEXT:    movn.s $f0, $f12, $2
 ;
 ; MM32R6-LABEL: tst_select_i1_float_reordered:
 ; MM32R6:       # %bb.0: # %entry
@@ -188,28 +188,29 @@
 define float @tst_select_fcmp_olt_float(float %x, float %y) {
 ; M2-LABEL: tst_select_fcmp_olt_float:
 ; M2:       # %bb.0: # %entry
-; M2-NEXT:    c.olt.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    c.olt.s $f0, $f14
 ; M2-NEXT:    bc1t $BB2_2
 ; M2-NEXT:    nop
 ; M2-NEXT:  # %bb.1: # %entry
-; M2-NEXT:    mov.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f14
 ; M2-NEXT:  $BB2_2: # %entry
 ; M2-NEXT:    jr $ra
-; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    nop
 ;
 ; CMOV32R1-LABEL: tst_select_fcmp_olt_float:
 ; CMOV32R1:       # %bb.0: # %entry
-; CMOV32R1-NEXT:    c.olt.s $f12, $f14
-; CMOV32R1-NEXT:    movt.s $f14, $f12, $fcc0
-; CMOV32R1-NEXT:    jr $ra
 ; CMOV32R1-NEXT:    mov.s $f0, $f14
+; CMOV32R1-NEXT:    c.olt.s $f12, $f0
+; CMOV32R1-NEXT:    jr $ra
+; CMOV32R1-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; CMOV32R2-LABEL: tst_select_fcmp_olt_float:
 ; CMOV32R2:       # %bb.0: # %entry
-; CMOV32R2-NEXT:    c.olt.s $f12, $f14
-; CMOV32R2-NEXT:    movt.s $f14, $f12, $fcc0
-; CMOV32R2-NEXT:    jr $ra
 ; CMOV32R2-NEXT:    mov.s $f0, $f14
+; CMOV32R2-NEXT:    c.olt.s $f12, $f0
+; CMOV32R2-NEXT:    jr $ra
+; CMOV32R2-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; 32R6-LABEL: tst_select_fcmp_olt_float:
 ; 32R6:       # %bb.0: # %entry
@@ -219,21 +220,22 @@
 ;
 ; M3-LABEL: tst_select_fcmp_olt_float:
 ; M3:       # %bb.0: # %entry
-; M3-NEXT:    c.olt.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    c.olt.s $f0, $f13
 ; M3-NEXT:    bc1t .LBB2_2
 ; M3-NEXT:    nop
 ; M3-NEXT:  # %bb.1: # %entry
-; M3-NEXT:    mov.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f13
 ; M3-NEXT:  .LBB2_2: # %entry
 ; M3-NEXT:    jr $ra
-; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    nop
 ;
 ; CMOV64-LABEL: tst_select_fcmp_olt_float:
 ; CMOV64:       # %bb.0: # %entry
-; CMOV64-NEXT:    c.olt.s $f12, $f13
-; CMOV64-NEXT:    movt.s $f13, $f12, $fcc0
-; CMOV64-NEXT:    jr $ra
 ; CMOV64-NEXT:    mov.s $f0, $f13
+; CMOV64-NEXT:    c.olt.s $f12, $f0
+; CMOV64-NEXT:    jr $ra
+; CMOV64-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; 64R6-LABEL: tst_select_fcmp_olt_float:
 ; 64R6:       # %bb.0: # %entry
@@ -243,10 +245,10 @@
 ;
 ; MM32R3-LABEL: tst_select_fcmp_olt_float:
 ; MM32R3:       # %bb.0: # %entry
-; MM32R3-NEXT:    c.olt.s $f12, $f14
-; MM32R3-NEXT:    movt.s $f14, $f12, $fcc0
-; MM32R3-NEXT:    jr $ra
 ; MM32R3-NEXT:    mov.s $f0, $f14
+; MM32R3-NEXT:    c.olt.s $f12, $f0
+; MM32R3-NEXT:    jr $ra
+; MM32R3-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; MM32R6-LABEL: tst_select_fcmp_olt_float:
 ; MM32R6:       # %bb.0: # %entry
@@ -262,28 +264,29 @@
 define float @tst_select_fcmp_ole_float(float %x, float %y) {
 ; M2-LABEL: tst_select_fcmp_ole_float:
 ; M2:       # %bb.0: # %entry
-; M2-NEXT:    c.ole.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    c.ole.s $f0, $f14
 ; M2-NEXT:    bc1t $BB3_2
 ; M2-NEXT:    nop
 ; M2-NEXT:  # %bb.1: # %entry
-; M2-NEXT:    mov.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f14
 ; M2-NEXT:  $BB3_2: # %entry
 ; M2-NEXT:    jr $ra
-; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    nop
 ;
 ; CMOV32R1-LABEL: tst_select_fcmp_ole_float:
 ; CMOV32R1:       # %bb.0: # %entry
-; CMOV32R1-NEXT:    c.ole.s $f12, $f14
-; CMOV32R1-NEXT:    movt.s $f14, $f12, $fcc0
-; CMOV32R1-NEXT:    jr $ra
 ; CMOV32R1-NEXT:    mov.s $f0, $f14
+; CMOV32R1-NEXT:    c.ole.s $f12, $f0
+; CMOV32R1-NEXT:    jr $ra
+; CMOV32R1-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; CMOV32R2-LABEL: tst_select_fcmp_ole_float:
 ; CMOV32R2:       # %bb.0: # %entry
-; CMOV32R2-NEXT:    c.ole.s $f12, $f14
-; CMOV32R2-NEXT:    movt.s $f14, $f12, $fcc0
-; CMOV32R2-NEXT:    jr $ra
 ; CMOV32R2-NEXT:    mov.s $f0, $f14
+; CMOV32R2-NEXT:    c.ole.s $f12, $f0
+; CMOV32R2-NEXT:    jr $ra
+; CMOV32R2-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; 32R6-LABEL: tst_select_fcmp_ole_float:
 ; 32R6:       # %bb.0: # %entry
@@ -293,21 +296,22 @@
 ;
 ; M3-LABEL: tst_select_fcmp_ole_float:
 ; M3:       # %bb.0: # %entry
-; M3-NEXT:    c.ole.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    c.ole.s $f0, $f13
 ; M3-NEXT:    bc1t .LBB3_2
 ; M3-NEXT:    nop
 ; M3-NEXT:  # %bb.1: # %entry
-; M3-NEXT:    mov.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f13
 ; M3-NEXT:  .LBB3_2: # %entry
 ; M3-NEXT:    jr $ra
-; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    nop
 ;
 ; CMOV64-LABEL: tst_select_fcmp_ole_float:
 ; CMOV64:       # %bb.0: # %entry
-; CMOV64-NEXT:    c.ole.s $f12, $f13
-; CMOV64-NEXT:    movt.s $f13, $f12, $fcc0
-; CMOV64-NEXT:    jr $ra
 ; CMOV64-NEXT:    mov.s $f0, $f13
+; CMOV64-NEXT:    c.ole.s $f12, $f0
+; CMOV64-NEXT:    jr $ra
+; CMOV64-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; 64R6-LABEL: tst_select_fcmp_ole_float:
 ; 64R6:       # %bb.0: # %entry
@@ -317,10 +321,10 @@
 ;
 ; MM32R3-LABEL: tst_select_fcmp_ole_float:
 ; MM32R3:       # %bb.0: # %entry
-; MM32R3-NEXT:    c.ole.s $f12, $f14
-; MM32R3-NEXT:    movt.s $f14, $f12, $fcc0
-; MM32R3-NEXT:    jr $ra
 ; MM32R3-NEXT:    mov.s $f0, $f14
+; MM32R3-NEXT:    c.ole.s $f12, $f0
+; MM32R3-NEXT:    jr $ra
+; MM32R3-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; MM32R6-LABEL: tst_select_fcmp_ole_float:
 ; MM32R6:       # %bb.0: # %entry
@@ -336,28 +340,29 @@
 define float @tst_select_fcmp_ogt_float(float %x, float %y) {
 ; M2-LABEL: tst_select_fcmp_ogt_float:
 ; M2:       # %bb.0: # %entry
-; M2-NEXT:    c.ule.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    c.ule.s $f0, $f14
 ; M2-NEXT:    bc1f $BB4_2
 ; M2-NEXT:    nop
 ; M2-NEXT:  # %bb.1: # %entry
-; M2-NEXT:    mov.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f14
 ; M2-NEXT:  $BB4_2: # %entry
 ; M2-NEXT:    jr $ra
-; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    nop
 ;
 ; CMOV32R1-LABEL: tst_select_fcmp_ogt_float:
 ; CMOV32R1:       # %bb.0: # %entry
-; CMOV32R1-NEXT:    c.ule.s $f12, $f14
-; CMOV32R1-NEXT:    movf.s $f14, $f12, $fcc0
-; CMOV32R1-NEXT:    jr $ra
 ; CMOV32R1-NEXT:    mov.s $f0, $f14
+; CMOV32R1-NEXT:    c.ule.s $f12, $f0
+; CMOV32R1-NEXT:    jr $ra
+; CMOV32R1-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; CMOV32R2-LABEL: tst_select_fcmp_ogt_float:
 ; CMOV32R2:       # %bb.0: # %entry
-; CMOV32R2-NEXT:    c.ule.s $f12, $f14
-; CMOV32R2-NEXT:    movf.s $f14, $f12, $fcc0
-; CMOV32R2-NEXT:    jr $ra
 ; CMOV32R2-NEXT:    mov.s $f0, $f14
+; CMOV32R2-NEXT:    c.ule.s $f12, $f0
+; CMOV32R2-NEXT:    jr $ra
+; CMOV32R2-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; 32R6-LABEL: tst_select_fcmp_ogt_float:
 ; 32R6:       # %bb.0: # %entry
@@ -367,21 +372,22 @@
 ;
 ; M3-LABEL: tst_select_fcmp_ogt_float:
 ; M3:       # %bb.0: # %entry
-; M3-NEXT:    c.ule.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    c.ule.s $f0, $f13
 ; M3-NEXT:    bc1f .LBB4_2
 ; M3-NEXT:    nop
 ; M3-NEXT:  # %bb.1: # %entry
-; M3-NEXT:    mov.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f13
 ; M3-NEXT:  .LBB4_2: # %entry
 ; M3-NEXT:    jr $ra
-; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    nop
 ;
 ; CMOV64-LABEL: tst_select_fcmp_ogt_float:
 ; CMOV64:       # %bb.0: # %entry
-; CMOV64-NEXT:    c.ule.s $f12, $f13
-; CMOV64-NEXT:    movf.s $f13, $f12, $fcc0
-; CMOV64-NEXT:    jr $ra
 ; CMOV64-NEXT:    mov.s $f0, $f13
+; CMOV64-NEXT:    c.ule.s $f12, $f0
+; CMOV64-NEXT:    jr $ra
+; CMOV64-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; 64R6-LABEL: tst_select_fcmp_ogt_float:
 ; 64R6:       # %bb.0: # %entry
@@ -391,10 +397,10 @@
 ;
 ; MM32R3-LABEL: tst_select_fcmp_ogt_float:
 ; MM32R3:       # %bb.0: # %entry
-; MM32R3-NEXT:    c.ule.s $f12, $f14
-; MM32R3-NEXT:    movf.s $f14, $f12, $fcc0
-; MM32R3-NEXT:    jr $ra
 ; MM32R3-NEXT:    mov.s $f0, $f14
+; MM32R3-NEXT:    c.ule.s $f12, $f0
+; MM32R3-NEXT:    jr $ra
+; MM32R3-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; MM32R6-LABEL: tst_select_fcmp_ogt_float:
 ; MM32R6:       # %bb.0: # %entry
@@ -410,28 +416,29 @@
 define float @tst_select_fcmp_oge_float(float %x, float %y) {
 ; M2-LABEL: tst_select_fcmp_oge_float:
 ; M2:       # %bb.0: # %entry
-; M2-NEXT:    c.ult.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    c.ult.s $f0, $f14
 ; M2-NEXT:    bc1f $BB5_2
 ; M2-NEXT:    nop
 ; M2-NEXT:  # %bb.1: # %entry
-; M2-NEXT:    mov.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f14
 ; M2-NEXT:  $BB5_2: # %entry
 ; M2-NEXT:    jr $ra
-; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    nop
 ;
 ; CMOV32R1-LABEL: tst_select_fcmp_oge_float:
 ; CMOV32R1:       # %bb.0: # %entry
-; CMOV32R1-NEXT:    c.ult.s $f12, $f14
-; CMOV32R1-NEXT:    movf.s $f14, $f12, $fcc0
-; CMOV32R1-NEXT:    jr $ra
 ; CMOV32R1-NEXT:    mov.s $f0, $f14
+; CMOV32R1-NEXT:    c.ult.s $f12, $f0
+; CMOV32R1-NEXT:    jr $ra
+; CMOV32R1-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; CMOV32R2-LABEL: tst_select_fcmp_oge_float:
 ; CMOV32R2:       # %bb.0: # %entry
-; CMOV32R2-NEXT:    c.ult.s $f12, $f14
-; CMOV32R2-NEXT:    movf.s $f14, $f12, $fcc0
-; CMOV32R2-NEXT:    jr $ra
 ; CMOV32R2-NEXT:    mov.s $f0, $f14
+; CMOV32R2-NEXT:    c.ult.s $f12, $f0
+; CMOV32R2-NEXT:    jr $ra
+; CMOV32R2-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; 32R6-LABEL: tst_select_fcmp_oge_float:
 ; 32R6:       # %bb.0: # %entry
@@ -441,21 +448,22 @@
 ;
 ; M3-LABEL: tst_select_fcmp_oge_float:
 ; M3:       # %bb.0: # %entry
-; M3-NEXT:    c.ult.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    c.ult.s $f0, $f13
 ; M3-NEXT:    bc1f .LBB5_2
 ; M3-NEXT:    nop
 ; M3-NEXT:  # %bb.1: # %entry
-; M3-NEXT:    mov.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f13
 ; M3-NEXT:  .LBB5_2: # %entry
 ; M3-NEXT:    jr $ra
-; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    nop
 ;
 ; CMOV64-LABEL: tst_select_fcmp_oge_float:
 ; CMOV64:       # %bb.0: # %entry
-; CMOV64-NEXT:    c.ult.s $f12, $f13
-; CMOV64-NEXT:    movf.s $f13, $f12, $fcc0
-; CMOV64-NEXT:    jr $ra
 ; CMOV64-NEXT:    mov.s $f0, $f13
+; CMOV64-NEXT:    c.ult.s $f12, $f0
+; CMOV64-NEXT:    jr $ra
+; CMOV64-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; 64R6-LABEL: tst_select_fcmp_oge_float:
 ; 64R6:       # %bb.0: # %entry
@@ -465,10 +473,10 @@
 ;
 ; MM32R3-LABEL: tst_select_fcmp_oge_float:
 ; MM32R3:       # %bb.0: # %entry
-; MM32R3-NEXT:    c.ult.s $f12, $f14
-; MM32R3-NEXT:    movf.s $f14, $f12, $fcc0
-; MM32R3-NEXT:    jr $ra
 ; MM32R3-NEXT:    mov.s $f0, $f14
+; MM32R3-NEXT:    c.ult.s $f12, $f0
+; MM32R3-NEXT:    jr $ra
+; MM32R3-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; MM32R6-LABEL: tst_select_fcmp_oge_float:
 ; MM32R6:       # %bb.0: # %entry
@@ -484,28 +492,29 @@
 define float @tst_select_fcmp_oeq_float(float %x, float %y) {
 ; M2-LABEL: tst_select_fcmp_oeq_float:
 ; M2:       # %bb.0: # %entry
-; M2-NEXT:    c.eq.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    c.eq.s $f0, $f14
 ; M2-NEXT:    bc1t $BB6_2
 ; M2-NEXT:    nop
 ; M2-NEXT:  # %bb.1: # %entry
-; M2-NEXT:    mov.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f14
 ; M2-NEXT:  $BB6_2: # %entry
 ; M2-NEXT:    jr $ra
-; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    nop
 ;
 ; CMOV32R1-LABEL: tst_select_fcmp_oeq_float:
 ; CMOV32R1:       # %bb.0: # %entry
-; CMOV32R1-NEXT:    c.eq.s $f12, $f14
-; CMOV32R1-NEXT:    movt.s $f14, $f12, $fcc0
-; CMOV32R1-NEXT:    jr $ra
 ; CMOV32R1-NEXT:    mov.s $f0, $f14
+; CMOV32R1-NEXT:    c.eq.s $f12, $f0
+; CMOV32R1-NEXT:    jr $ra
+; CMOV32R1-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; CMOV32R2-LABEL: tst_select_fcmp_oeq_float:
 ; CMOV32R2:       # %bb.0: # %entry
-; CMOV32R2-NEXT:    c.eq.s $f12, $f14
-; CMOV32R2-NEXT:    movt.s $f14, $f12, $fcc0
-; CMOV32R2-NEXT:    jr $ra
 ; CMOV32R2-NEXT:    mov.s $f0, $f14
+; CMOV32R2-NEXT:    c.eq.s $f12, $f0
+; CMOV32R2-NEXT:    jr $ra
+; CMOV32R2-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; 32R6-LABEL: tst_select_fcmp_oeq_float:
 ; 32R6:       # %bb.0: # %entry
@@ -515,21 +524,22 @@
 ;
 ; M3-LABEL: tst_select_fcmp_oeq_float:
 ; M3:       # %bb.0: # %entry
-; M3-NEXT:    c.eq.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    c.eq.s $f0, $f13
 ; M3-NEXT:    bc1t .LBB6_2
 ; M3-NEXT:    nop
 ; M3-NEXT:  # %bb.1: # %entry
-; M3-NEXT:    mov.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f13
 ; M3-NEXT:  .LBB6_2: # %entry
 ; M3-NEXT:    jr $ra
-; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    nop
 ;
 ; CMOV64-LABEL: tst_select_fcmp_oeq_float:
 ; CMOV64:       # %bb.0: # %entry
-; CMOV64-NEXT:    c.eq.s $f12, $f13
-; CMOV64-NEXT:    movt.s $f13, $f12, $fcc0
-; CMOV64-NEXT:    jr $ra
 ; CMOV64-NEXT:    mov.s $f0, $f13
+; CMOV64-NEXT:    c.eq.s $f12, $f0
+; CMOV64-NEXT:    jr $ra
+; CMOV64-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; 64R6-LABEL: tst_select_fcmp_oeq_float:
 ; 64R6:       # %bb.0: # %entry
@@ -539,10 +549,10 @@
 ;
 ; MM32R3-LABEL: tst_select_fcmp_oeq_float:
 ; MM32R3:       # %bb.0: # %entry
-; MM32R3-NEXT:    c.eq.s $f12, $f14
-; MM32R3-NEXT:    movt.s $f14, $f12, $fcc0
-; MM32R3-NEXT:    jr $ra
 ; MM32R3-NEXT:    mov.s $f0, $f14
+; MM32R3-NEXT:    c.eq.s $f12, $f0
+; MM32R3-NEXT:    jr $ra
+; MM32R3-NEXT:    movt.s $f0, $f12, $fcc0
 ;
 ; MM32R6-LABEL: tst_select_fcmp_oeq_float:
 ; MM32R6:       # %bb.0: # %entry
@@ -558,28 +568,29 @@
 define float @tst_select_fcmp_one_float(float %x, float %y) {
 ; M2-LABEL: tst_select_fcmp_one_float:
 ; M2:       # %bb.0: # %entry
-; M2-NEXT:    c.ueq.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    c.ueq.s $f0, $f14
 ; M2-NEXT:    bc1f $BB7_2
 ; M2-NEXT:    nop
 ; M2-NEXT:  # %bb.1: # %entry
-; M2-NEXT:    mov.s $f12, $f14
+; M2-NEXT:    mov.s $f0, $f14
 ; M2-NEXT:  $BB7_2: # %entry
 ; M2-NEXT:    jr $ra
-; M2-NEXT:    mov.s $f0, $f12
+; M2-NEXT:    nop
 ;
 ; CMOV32R1-LABEL: tst_select_fcmp_one_float:
 ; CMOV32R1:       # %bb.0: # %entry
-; CMOV32R1-NEXT:    c.ueq.s $f12, $f14
-; CMOV32R1-NEXT:    movf.s $f14, $f12, $fcc0
-; CMOV32R1-NEXT:    jr $ra
 ; CMOV32R1-NEXT:    mov.s $f0, $f14
+; CMOV32R1-NEXT:    c.ueq.s $f12, $f0
+; CMOV32R1-NEXT:    jr $ra
+; CMOV32R1-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; CMOV32R2-LABEL: tst_select_fcmp_one_float:
 ; CMOV32R2:       # %bb.0: # %entry
-; CMOV32R2-NEXT:    c.ueq.s $f12, $f14
-; CMOV32R2-NEXT:    movf.s $f14, $f12, $fcc0
-; CMOV32R2-NEXT:    jr $ra
 ; CMOV32R2-NEXT:    mov.s $f0, $f14
+; CMOV32R2-NEXT:    c.ueq.s $f12, $f0
+; CMOV32R2-NEXT:    jr $ra
+; CMOV32R2-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; 32R6-LABEL: tst_select_fcmp_one_float:
 ; 32R6:       # %bb.0: # %entry
@@ -592,21 +603,22 @@
 ;
 ; M3-LABEL: tst_select_fcmp_one_float:
 ; M3:       # %bb.0: # %entry
-; M3-NEXT:    c.ueq.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    c.ueq.s $f0, $f13
 ; M3-NEXT:    bc1f .LBB7_2
 ; M3-NEXT:    nop
 ; M3-NEXT:  # %bb.1: # %entry
-; M3-NEXT:    mov.s $f12, $f13
+; M3-NEXT:    mov.s $f0, $f13
 ; M3-NEXT:  .LBB7_2: # %entry
 ; M3-NEXT:    jr $ra
-; M3-NEXT:    mov.s $f0, $f12
+; M3-NEXT:    nop
 ;
 ; CMOV64-LABEL: tst_select_fcmp_one_float:
 ; CMOV64:       # %bb.0: # %entry
-; CMOV64-NEXT:    c.ueq.s $f12, $f13
-; CMOV64-NEXT:    movf.s $f13, $f12, $fcc0
-; CMOV64-NEXT:    jr $ra
 ; CMOV64-NEXT:    mov.s $f0, $f13
+; CMOV64-NEXT:    c.ueq.s $f12, $f0
+; CMOV64-NEXT:    jr $ra
+; CMOV64-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; 64R6-LABEL: tst_select_fcmp_one_float:
 ; 64R6:       # %bb.0: # %entry
@@ -619,10 +631,10 @@
 ;
 ; MM32R3-LABEL: tst_select_fcmp_one_float:
 ; MM32R3:       # %bb.0: # %entry
-; MM32R3-NEXT:    c.ueq.s $f12, $f14
-; MM32R3-NEXT:    movf.s $f14, $f12, $fcc0
-; MM32R3-NEXT:    jr $ra
 ; MM32R3-NEXT:    mov.s $f0, $f14
+; MM32R3-NEXT:    c.ueq.s $f12, $f0
+; MM32R3-NEXT:    jr $ra
+; MM32R3-NEXT:    movf.s $f0, $f12, $fcc0
 ;
 ; MM32R6-LABEL: tst_select_fcmp_one_float:
 ; MM32R6:       # %bb.0: # %entry