Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=mipsel -mcpu=mips32 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,32-CMOV |
| 2 | ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,32-CMOV |
| 3 | ; RUN: llc < %s -march=mipsel -mcpu=mips32r6 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,32R6 |
| 4 | ; RUN: llc < %s -march=mipsel -mcpu=mips4 -target-abi n64 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,64-CMOV |
| 5 | ; RUN: llc < %s -march=mipsel -mcpu=mips64 -target-abi n64 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,64-CMOV |
| 6 | ; RUN: llc < %s -march=mipsel -mcpu=mips64r2 -target-abi n64 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,64-CMOV |
| 7 | ; RUN: llc < %s -march=mipsel -mcpu=mips64r6 -target-abi n64 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,64R6 |
Akira Hatanaka | d60cb38 | 2012-03-08 03:32:42 +0000 | [diff] [blame] | 8 | |
| 9 | @g1 = external global i32 |
| 10 | |
Daniel Sanders | c43cda8 | 2014-11-07 16:54:21 +0000 | [diff] [blame] | 11 | define i32 @sel_icmp_nez_i32_z0(i32 signext %s) nounwind readonly { |
Akira Hatanaka | d60cb38 | 2012-03-08 03:32:42 +0000 | [diff] [blame] | 12 | entry: |
Daniel Sanders | 0fa6041 | 2014-06-12 13:39:06 +0000 | [diff] [blame] | 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 | |
Akira Hatanaka | d60cb38 | 2012-03-08 03:32:42 +0000 | [diff] [blame] | 27 | %tobool = icmp ne i32 %s, 0 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 28 | %0 = load i32, i32* @g1, align 4 |
Akira Hatanaka | d60cb38 | 2012-03-08 03:32:42 +0000 | [diff] [blame] | 29 | %cond = select i1 %tobool, i32 0, i32 %0 |
| 30 | ret i32 %cond |
| 31 | } |
| 32 | |
Daniel Sanders | c43cda8 | 2014-11-07 16:54:21 +0000 | [diff] [blame] | 33 | define i32 @sel_icmp_nez_i32_z1(i32 signext %s) nounwind readonly { |
Akira Hatanaka | d60cb38 | 2012-03-08 03:32:42 +0000 | [diff] [blame] | 34 | entry: |
Daniel Sanders | 0fa6041 | 2014-06-12 13:39:06 +0000 | [diff] [blame] | 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 | |
Akira Hatanaka | d60cb38 | 2012-03-08 03:32:42 +0000 | [diff] [blame] | 49 | %tobool = icmp ne i32 %s, 0 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 50 | %0 = load i32, i32* @g1, align 4 |
Akira Hatanaka | d60cb38 | 2012-03-08 03:32:42 +0000 | [diff] [blame] | 51 | %cond = select i1 %tobool, i32 %0, i32 0 |
| 52 | ret i32 %cond |
| 53 | } |
Daniel Sanders | 0fa6041 | 2014-06-12 13:39:06 +0000 | [diff] [blame] | 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 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 79 | %0 = load i64, i64* @g2, align 4 |
Daniel Sanders | 0fa6041 | 2014-06-12 13:39:06 +0000 | [diff] [blame] | 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 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 106 | %0 = load i64, i64* @g2, align 4 |
Daniel Sanders | 0fa6041 | 2014-06-12 13:39:06 +0000 | [diff] [blame] | 107 | %cond = select i1 %tobool, i64 %0, i64 0 |
| 108 | ret i64 %cond |
| 109 | } |