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