Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 2 | ; RUN: -check-prefixes=ALL,M2,M2-M3 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 3 | ; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 4 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-32,CMOV-32R1 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 5 | ; RUN: llc < %s -march=mips -mcpu=mips32r2 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 6 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-32,CMOV-32R2-R5 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 7 | ; RUN: llc < %s -march=mips -mcpu=mips32r3 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 8 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-32,CMOV-32R2-R5 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 9 | ; RUN: llc < %s -march=mips -mcpu=mips32r5 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 10 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-32,CMOV-32R2-R5 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 11 | ; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 12 | ; RUN: -check-prefixes=ALL,SEL,SEL-32 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 13 | ; RUN: llc < %s -march=mips64 -mcpu=mips3 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 14 | ; RUN: -check-prefixes=ALL,M3,M2-M3 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 15 | ; RUN: llc < %s -march=mips64 -mcpu=mips4 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 16 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-64 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 17 | ; RUN: llc < %s -march=mips64 -mcpu=mips64 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 18 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-64 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 19 | ; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 20 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-64 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 21 | ; RUN: llc < %s -march=mips64 -mcpu=mips64r3 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 22 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-64 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 23 | ; RUN: llc < %s -march=mips64 -mcpu=mips64r5 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 24 | ; RUN: -check-prefixes=ALL,CMOV,CMOV-64 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 25 | ; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 26 | ; RUN: -check-prefixes=ALL,SEL,SEL-64 |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 27 | ; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 28 | ; RUN: -check-prefixes=ALL,MM32R3 |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 29 | ; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \ |
Daniel Sanders | 0d97270 | 2016-06-24 12:23:17 +0000 | [diff] [blame] | 30 | ; RUN: -check-prefixes=ALL,MMR6,MM32R6 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 31 | |
Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 32 | define signext i1 @tst_select_i1_i1(i1 signext %s, |
| 33 | i1 signext %x, i1 signext %y) { |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 34 | entry: |
| 35 | ; ALL-LABEL: tst_select_i1_i1: |
| 36 | |
| 37 | ; M2-M3: andi $[[T0:[0-9]+]], $4, 1 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 38 | ; M2: bnez $[[T0]], [[BB0:\$BB[0-9_]+]] |
| 39 | ; M3: bnez $[[T0]], [[BB0:\.LBB[0-9_]+]] |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 40 | ; M2-M3: nop |
| 41 | ; M2-M3: move $5, $6 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 42 | ; M2-M3: [[BB0]]: |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 43 | ; M2-M3: jr $ra |
| 44 | ; M2-M3: move $2, $5 |
| 45 | |
| 46 | ; CMOV: andi $[[T0:[0-9]+]], $4, 1 |
| 47 | ; CMOV: movn $6, $5, $[[T0]] |
| 48 | ; CMOV: move $2, $6 |
| 49 | |
| 50 | ; SEL: andi $[[T0:[0-9]+]], $4, 1 |
| 51 | ; SEL: seleqz $[[T1:[0-9]+]], $6, $[[T0]] |
| 52 | ; SEL: selnez $[[T2:[0-9]+]], $5, $[[T0]] |
| 53 | ; SEL: or $2, $[[T2]], $[[T1]] |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 54 | |
| 55 | ; MM32R3: andi16 $[[T0:[0-9]+]], $4, 1 |
| 56 | ; MM32R3: movn $[[T1:[0-9]+]], $5, $[[T0]] |
| 57 | ; MM32R3: move $2, $[[T1]] |
| 58 | |
| 59 | ; MMR6: andi16 $[[T0:[0-9]+]], $4, 1 |
| 60 | ; MMR6: seleqz $[[T1:[0-9]+]], $6, $[[T0]] |
| 61 | ; MMR6: selnez $[[T2:[0-9]+]], $5, $[[T0]] |
| 62 | ; MMR6: or $2, $[[T2]], $[[T1]] |
| 63 | |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 64 | %r = select i1 %s, i1 %x, i1 %y |
| 65 | ret i1 %r |
| 66 | } |
| 67 | |
Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 68 | define signext i8 @tst_select_i1_i8(i1 signext %s, |
| 69 | i8 signext %x, i8 signext %y) { |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 70 | entry: |
| 71 | ; ALL-LABEL: tst_select_i1_i8: |
| 72 | |
| 73 | ; M2-M3: andi $[[T0:[0-9]+]], $4, 1 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 74 | ; M2: bnez $[[T0]], [[BB0:\$BB[0-9_]+]] |
| 75 | ; M3: bnez $[[T0]], [[BB0:\.LBB[0-9_]+]] |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 76 | ; M2-M3: nop |
| 77 | ; M2-M3: move $5, $6 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 78 | ; M2-M3: [[BB0]]: |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 79 | ; M2-M3: jr $ra |
| 80 | ; M2-M3: move $2, $5 |
| 81 | |
| 82 | ; CMOV: andi $[[T0:[0-9]+]], $4, 1 |
| 83 | ; CMOV: movn $6, $5, $[[T0]] |
| 84 | ; CMOV: move $2, $6 |
| 85 | |
| 86 | ; SEL: andi $[[T0:[0-9]+]], $4, 1 |
| 87 | ; SEL: seleqz $[[T1:[0-9]+]], $6, $[[T0]] |
| 88 | ; SEL: selnez $[[T2:[0-9]+]], $5, $[[T0]] |
| 89 | ; SEL: or $2, $[[T2]], $[[T1]] |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 90 | |
| 91 | ; MM32R3: andi16 $[[T0:[0-9]+]], $4, 1 |
| 92 | ; MM32R3: movn $[[T1:[0-9]+]], $5, $[[T0]] |
| 93 | ; MM32R3: move $2, $[[T1]] |
| 94 | |
| 95 | ; MMR6: andi16 $[[T0:[0-9]+]], $4, 1 |
| 96 | ; MMR6: seleqz $[[T1:[0-9]+]], $6, $[[T0]] |
| 97 | ; MMR6: selnez $[[T2:[0-9]+]], $5, $[[T0]] |
| 98 | ; MMR6: or $2, $[[T2]], $[[T1]] |
| 99 | |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 100 | %r = select i1 %s, i8 %x, i8 %y |
| 101 | ret i8 %r |
| 102 | } |
| 103 | |
Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 104 | define signext i32 @tst_select_i1_i32(i1 signext %s, |
| 105 | i32 signext %x, i32 signext %y) { |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 106 | entry: |
| 107 | ; ALL-LABEL: tst_select_i1_i32: |
| 108 | |
| 109 | ; M2-M3: andi $[[T0:[0-9]+]], $4, 1 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 110 | ; M2: bnez $[[T0]], [[BB0:\$BB[0-9_]+]] |
| 111 | ; M3: bnez $[[T0]], [[BB0:\.LBB[0-9_]+]] |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 112 | ; M2-M3: nop |
| 113 | ; M2-M3: move $5, $6 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 114 | ; M2-M3: [[BB0]]: |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 115 | ; M2-M3: jr $ra |
| 116 | ; M2-M3: move $2, $5 |
| 117 | |
| 118 | ; CMOV: andi $[[T0:[0-9]+]], $4, 1 |
| 119 | ; CMOV: movn $6, $5, $[[T0]] |
| 120 | ; CMOV: move $2, $6 |
| 121 | |
| 122 | ; SEL: andi $[[T0:[0-9]+]], $4, 1 |
| 123 | ; SEL: seleqz $[[T1:[0-9]+]], $6, $[[T0]] |
| 124 | ; SEL: selnez $[[T2:[0-9]+]], $5, $[[T0]] |
| 125 | ; SEL: or $2, $[[T2]], $[[T1]] |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 126 | |
| 127 | ; MM32R3: andi16 $[[T0:[0-9]+]], $4, 1 |
| 128 | ; MM32R3: movn $[[T1:[0-9]+]], $5, $[[T0]] |
| 129 | ; MM32R3: move $2, $[[T1]] |
| 130 | |
| 131 | ; MMR6: andi16 $[[T0:[0-9]+]], $4, 1 |
| 132 | ; MMR6: seleqz $[[T1:[0-9]+]], $6, $[[T0]] |
| 133 | ; MMR6: selnez $[[T2:[0-9]+]], $5, $[[T0]] |
| 134 | ; MMR6: or $2, $[[T2]], $[[T1]] |
| 135 | |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 136 | %r = select i1 %s, i32 %x, i32 %y |
| 137 | ret i32 %r |
| 138 | } |
| 139 | |
Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 140 | define signext i64 @tst_select_i1_i64(i1 signext %s, |
| 141 | i64 signext %x, i64 signext %y) { |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 142 | entry: |
| 143 | ; ALL-LABEL: tst_select_i1_i64: |
| 144 | |
| 145 | ; M2: andi $[[T0:[0-9]+]], $4, 1 |
| 146 | ; M2: bnez $[[T0]], $[[BB0:BB[0-9_]+]] |
| 147 | ; M2: nop |
| 148 | ; M2: lw $[[T1:[0-9]+]], 16($sp) |
| 149 | ; M2: $[[BB0]]: |
| 150 | ; FIXME: This branch is redundant |
| 151 | ; M2: bnez $[[T0]], $[[BB1:BB[0-9_]+]] |
| 152 | ; M2: nop |
| 153 | ; M2: lw $[[T2:[0-9]+]], 20($sp) |
| 154 | ; M2: $[[BB1]]: |
| 155 | ; M2: move $2, $[[T1]] |
| 156 | ; M2: jr $ra |
| 157 | ; M2: move $3, $[[T2]] |
| 158 | |
| 159 | ; CMOV-32: andi $[[T0:[0-9]+]], $4, 1 |
| 160 | ; CMOV-32: lw $2, 16($sp) |
| 161 | ; CMOV-32: movn $2, $6, $[[T0]] |
| 162 | ; CMOV-32: lw $3, 20($sp) |
| 163 | ; CMOV-32: movn $3, $7, $[[T0]] |
| 164 | |
| 165 | ; SEL-32: andi $[[T0:[0-9]+]], $4, 1 |
Simon Dardis | bd27154 | 2016-09-01 14:53:53 +0000 | [diff] [blame] | 166 | ; SEL-32: lw $[[T1:[0-9]+]], 16($sp) |
| 167 | ; SEL-32: seleqz $[[T2:[0-9]+]], $[[T1]], $[[T0]] |
| 168 | ; SEL-32: selnez $[[T3:[0-9]+]], $6, $[[T0]] |
| 169 | ; SEL-32: or $2, $[[T3]], $[[T2]] |
| 170 | ; SEL-32: lw $[[T4:[0-9]+]], 20($sp) |
| 171 | ; SEL-32: seleqz $[[T5:[0-9]+]], $[[T4]], $[[T0]] |
| 172 | ; SEL-32: selnez $[[T6:[0-9]+]], $7, $[[T0]] |
| 173 | ; SEL-32: or $3, $[[T6]], $[[T5]] |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 174 | |
| 175 | ; M3: andi $[[T0:[0-9]+]], $4, 1 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 176 | ; M3: bnez $[[T0]], [[BB0:\.LBB[0-9_]+]] |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 177 | ; M3: nop |
| 178 | ; M3: move $5, $6 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 179 | ; M3: [[BB0]]: |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 180 | ; M3: jr $ra |
| 181 | ; M3: move $2, $5 |
| 182 | |
| 183 | ; CMOV-64: andi $[[T0:[0-9]+]], $4, 1 |
| 184 | ; CMOV-64: movn $6, $5, $[[T0]] |
| 185 | ; CMOV-64: move $2, $6 |
| 186 | |
| 187 | ; SEL-64: andi $[[T0:[0-9]+]], $4, 1 |
Vasileios Kalintiris | 36901dd | 2016-03-01 20:25:43 +0000 | [diff] [blame] | 188 | ; FIXME: This shift is redundant |
| 189 | ; SEL-64: sll $[[T0]], $[[T0]], 0 |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 190 | ; SEL-64: seleqz $[[T1:[0-9]+]], $6, $[[T0]] |
| 191 | ; SEL-64: selnez $[[T0]], $5, $[[T0]] |
| 192 | ; SEL-64: or $2, $[[T0]], $[[T1]] |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 193 | |
| 194 | ; MM32R3: andi16 $[[T0:[0-9]+]], $4, 1 |
| 195 | ; MM32R3: lw $2, 16($sp) |
| 196 | ; MM32R3: movn $2, $6, $[[T0]] |
| 197 | ; MM32R3: lw $3, 20($sp) |
| 198 | ; MM32R3: movn $3, $7, $[[T0]] |
| 199 | |
| 200 | ; MM32R6: andi16 $[[T0:[0-9]+]], $4, 1 |
Simon Dardis | f114820 | 2016-08-24 13:00:47 +0000 | [diff] [blame] | 201 | ; MM32R6: lw $[[T2:[0-9]+]], 16($sp) |
| 202 | ; MM32R6: seleqz $[[T3:[0-9]+]], $[[T2]], $[[T0]] |
Simon Dardis | bd27154 | 2016-09-01 14:53:53 +0000 | [diff] [blame] | 203 | ; MM32R6: selnez $[[T1:[0-9]+]], $6, $[[T0]] |
Simon Dardis | f114820 | 2016-08-24 13:00:47 +0000 | [diff] [blame] | 204 | ; MM32R6: or $2, $[[T1]], $[[T3]] |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 205 | ; MM32R6: lw $[[T4:[0-9]+]], 20($sp) |
| 206 | ; MM32R6: seleqz $[[T5:[0-9]+]], $[[T4]], $[[T0]] |
Simon Dardis | bd27154 | 2016-09-01 14:53:53 +0000 | [diff] [blame] | 207 | ; MM32R6: selnez $[[T6:[0-9]+]], $7, $[[T0]] |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 208 | ; MM32R6: or $3, $[[T6]], $[[T5]] |
| 209 | |
Vasileios Kalintiris | a052037 | 2016-02-01 15:19:35 +0000 | [diff] [blame] | 210 | %r = select i1 %s, i64 %x, i64 %y |
| 211 | ret i64 %r |
| 212 | } |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 213 | |
| 214 | define i8* @tst_select_word_cst(i8* %a, i8* %b) { |
| 215 | ; ALL-LABEL: tst_select_word_cst: |
| 216 | |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 217 | ; M2: addiu $[[T0:[0-9]+]], $zero, -1 |
| 218 | ; M2: xor $[[T1:[0-9]+]], $5, $[[T0]] |
| 219 | ; M2: sltu $[[T2:[0-9]+]], $zero, $[[T1]] |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 220 | ; M2: bnez $[[T2]], [[BB0:\$BB[0-9_]+]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 221 | ; M2: addiu $2, $zero, 0 |
| 222 | ; M2: move $2, $4 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 223 | ; M2: [[BB0]]: |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 224 | ; M2: jr $ra |
| 225 | |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 226 | ; M3: daddiu $[[T0:[0-9]+]], $zero, -1 |
| 227 | ; M3: xor $[[T1:[0-9]+]], $5, $[[T0]] |
| 228 | ; M3: sltu $[[T2:[0-9]+]], $zero, $[[T1]] |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 229 | ; M3: bnez $[[T2]], [[BB0:\.LBB[0-9_]+]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 230 | ; M3: daddiu $2, $zero, 0 |
| 231 | ; M3: move $2, $4 |
Daniel Sanders | 6a73883 | 2016-07-19 10:49:03 +0000 | [diff] [blame] | 232 | ; M3: [[BB0]]: |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 233 | ; M3: jr $ra |
| 234 | |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 235 | ; CMOV-32: addiu $[[T0:[0-9]+]], $zero, -1 |
| 236 | ; CMOV-32: xor $[[T1:[0-9]+]], $5, $[[T0]] |
| 237 | ; CMOV-32: movn $[[T2:[0-9]+]], $zero, $[[T1]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 238 | ; CMOV-32: jr $ra |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 239 | ; CMOV-32: move $2, $[[T2]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 240 | |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 241 | ; SEL-32: addiu $[[T0:[0-9]+]], $zero, -1 |
| 242 | ; SEL-32: xor $[[T1:[0-9]+]], $5, $[[T0]] |
| 243 | ; SEL-32: sltu $[[T2:[0-9]+]], $zero, $[[T1]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 244 | ; SEL-32: jr $ra |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 245 | ; SEL-32: seleqz $2, $4, $[[T2]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 246 | |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 247 | ; CMOV-64: daddiu $[[T0:[0-9]+]], $zero, -1 |
| 248 | ; CMOV-64: xor $[[T1:[0-9]+]], $5, $[[T0]] |
| 249 | ; CMOV-64: movn $[[T2:[0-9]+]], $zero, $[[T1]] |
| 250 | ; CMOV-64: move $2, $[[T2]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 251 | |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 252 | ; SEL-64: daddiu $[[T0:[0-9]+]], $zero, -1 |
| 253 | ; SEL-64: xor $[[T1:[0-9]+]], $5, $[[T0]] |
| 254 | ; SEL-64: sltu $[[T2:[0-9]+]], $zero, $[[T1]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 255 | ; FIXME: This shift is redundant. |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 256 | ; SEL-64: sll $[[T2]], $[[T2]], 0 |
| 257 | ; SEL-64: seleqz $2, $4, $[[T2]] |
| 258 | |
| 259 | ; MM32R3: li16 $[[T0:[0-9]+]], -1 |
| 260 | ; MM32R3: xor $[[T1:[0-9]+]], $5, $[[T0]] |
Simon Dardis | 6189752 | 2016-07-25 09:57:28 +0000 | [diff] [blame] | 261 | ; MM32R3: li16 $[[T2:[0-9]+]], 0 |
Zlatko Buljan | cd242c1 | 2016-06-09 11:15:53 +0000 | [diff] [blame] | 262 | ; MM32R3: movn $[[T3:[0-9]+]], $[[T2]], $[[T1]] |
| 263 | ; MM32R3: move $2, $[[T3]] |
| 264 | |
| 265 | ; MM32R6: li16 $[[T0:[0-9]+]], -1 |
| 266 | ; MM32R6: xor $[[T1:[0-9]+]], $5, $[[T0]] |
| 267 | ; MM32R6: sltu $[[T2:[0-9]+]], $zero, $[[T1]] |
| 268 | ; MM32R6: seleqz $2, $4, $[[T2]] |
Simon Dardis | 5676d06 | 2016-04-22 13:19:22 +0000 | [diff] [blame] | 269 | |
| 270 | %cmp = icmp eq i8* %b, inttoptr (i64 -1 to i8*) |
| 271 | %r = select i1 %cmp, i8* %a, i8* null |
| 272 | ret i8* %r |
| 273 | } |