1 ; RUN: llc < %s -march=mipsel -mcpu=mips32 | FileCheck %s -check-prefix=ALL -check-prefix=32-CMOV 2 ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 | FileCheck %s -check-prefix=ALL -check-prefix=32-CMOV 3 ; RUN: llc < %s -march=mipsel -mcpu=mips32r6 | FileCheck %s -check-prefix=ALL -check-prefix=32R6 4 ; RUN: llc < %s -march=mipsel -mcpu=mips4 | FileCheck %s -check-prefix=ALL -check-prefix=64-CMOV 5 ; RUN: llc < %s -march=mipsel -mcpu=mips64 | FileCheck %s -check-prefix=ALL -check-prefix=64-CMOV 6 ; RUN: llc < %s -march=mipsel -mcpu=mips64r2 | FileCheck %s -check-prefix=ALL -check-prefix=64-CMOV 7 ; RUN: llc < %s -march=mipsel -mcpu=mips64r6 | FileCheck %s -check-prefix=ALL -check-prefix=64R6 8 9 @g1 = external global i32 10 11 define i32 @sel_icmp_nez_i32_z0(i32 signext %s) nounwind readonly { 12 entry: 13 ; ALL-LABEL: sel_icmp_nez_i32_z0: 14 15 ; 32-CMOV: lw $2, 0(${{[0-9]+}}) 16 ; 32-CMOV: movn $2, $zero, $4 17 18 ; 32R6: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 19 ; 32R6: seleqz $2, $[[R0]], $4 20 21 ; 64-CMOV: lw $2, 0(${{[0-9]+}}) 22 ; 64-CMOV: movn $2, $zero, $4 23 24 ; 64R6: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 25 ; 64R6: seleqz $2, $[[R0]], $4 26 27 %tobool = icmp ne i32 %s, 0 28 %0 = load i32, i32* @g1, align 4 29 %cond = select i1 %tobool, i32 0, i32 %0 30 ret i32 %cond 31 } 32 33 define i32 @sel_icmp_nez_i32_z1(i32 signext %s) nounwind readonly { 34 entry: 35 ; ALL-LABEL: sel_icmp_nez_i32_z1: 36 37 ; 32-CMOV: lw $2, 0(${{[0-9]+}}) 38 ; 32-CMOV: movz $2, $zero, $4 39 40 ; 32R6: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 41 ; 32R6: selnez $2, $[[R0]], $4 42 43 ; 64-CMOV: lw $2, 0(${{[0-9]+}}) 44 ; 64-CMOV: movz $2, $zero, $4 45 46 ; 64R6: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 47 ; 64R6: selnez $2, $[[R0]], $4 48 49 %tobool = icmp ne i32 %s, 0 50 %0 = load i32, i32* @g1, align 4 51 %cond = select i1 %tobool, i32 %0, i32 0 52 ret i32 %cond 53 } 54 55 @g2 = external global i64 56 57 define i64 @sel_icmp_nez_i64_z0(i64 %s) nounwind readonly { 58 entry: 59 ; ALL-LABEL: sel_icmp_nez_i64_z0: 60 61 ; 32-CMOV-DAG: lw $[[R0:2]], 0(${{[0-9]+}}) 62 ; 32-CMOV-DAG: lw $[[R1:3]], 4(${{[0-9]+}}) 63 ; 32-CMOV-DAG: movn $[[R0]], $zero, $4 64 ; 32-CMOV-DAG: movn $[[R1]], $zero, $4 65 66 ; 32R6-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 67 ; 32R6-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 68 ; 32R6-DAG: or $[[CC:[0-9]+]], $4, $5 69 ; 32R6-DAG: seleqz $2, $[[R0]], $[[CC]] 70 ; 32R6-DAG: seleqz $3, $[[R1]], $[[CC]] 71 72 ; 64-CMOV: ld $2, 0(${{[0-9]+}}) 73 ; 64-CMOV: movn $2, $zero, $4 74 75 ; 64R6: ld $[[R0:[0-9]+]], 0(${{[0-9]+}}) 76 ; 64R6: seleqz $2, $[[R0]], $4 77 78 %tobool = icmp ne i64 %s, 0 79 %0 = load i64, i64* @g2, align 4 80 %cond = select i1 %tobool, i64 0, i64 %0 81 ret i64 %cond 82 } 83 84 define i64 @sel_icmp_nez_i64_z1(i64 %s) nounwind readonly { 85 entry: 86 ; ALL-LABEL: sel_icmp_nez_i64_z1: 87 88 ; 32-CMOV-DAG: lw $[[R0:2]], 0(${{[0-9]+}}) 89 ; 32-CMOV-DAG: lw $[[R1:3]], 4(${{[0-9]+}}) 90 ; 32-CMOV-DAG: movz $[[R0]], $zero, $4 91 ; 32-CMOV-DAG: movz $[[R1]], $zero, $4 92 93 ; 32R6-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 94 ; 32R6-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 95 ; 32R6-DAG: or $[[CC:[0-9]+]], $4, $5 96 ; 32R6-DAG: selnez $2, $[[R0]], $[[CC]] 97 ; 32R6-DAG: selnez $3, $[[R1]], $[[CC]] 98 99 ; 64-CMOV: ld $2, 0(${{[0-9]+}}) 100 ; 64-CMOV: movz $2, $zero, $4 101 102 ; 64R6: ld $[[R0:[0-9]+]], 0(${{[0-9]+}}) 103 ; 64R6: selnez $2, $[[R0]], $4 104 105 %tobool = icmp ne i64 %s, 0 106 %0 = load i64, i64* @g2, align 4 107 %cond = select i1 %tobool, i64 %0, i64 0 108 ret i64 %cond 109 } 110