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