xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/Fast-ISel/logopm.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -relocation-model=pic -O0 -fast-isel-abort=1 -mcpu=mips32r2 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -relocation-model=pic -O0 -fast-isel-abort=1 -mcpu=mips32 < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker@ub1 = common global i8 0, align 1
5*9880d681SAndroid Build Coastguard Worker@ub2 = common global i8 0, align 1
6*9880d681SAndroid Build Coastguard Worker@ub3 = common global i8 0, align 1
7*9880d681SAndroid Build Coastguard Worker@uc1 = common global i8 0, align 1
8*9880d681SAndroid Build Coastguard Worker@uc2 = common global i8 0, align 1
9*9880d681SAndroid Build Coastguard Worker@uc3 = common global i8 0, align 1
10*9880d681SAndroid Build Coastguard Worker@us1 = common global i16 0, align 2
11*9880d681SAndroid Build Coastguard Worker@us2 = common global i16 0, align 2
12*9880d681SAndroid Build Coastguard Worker@us3 = common global i16 0, align 2
13*9880d681SAndroid Build Coastguard Worker@ub = common global i8 0, align 1
14*9880d681SAndroid Build Coastguard Worker@uc = common global i8 0, align 1
15*9880d681SAndroid Build Coastguard Worker@us = common global i16 0, align 2
16*9880d681SAndroid Build Coastguard Worker@.str = private unnamed_addr constant [4 x i8] c"%i\0A\00", align 1
17*9880d681SAndroid Build Coastguard Worker@ui = common global i32 0, align 4
18*9880d681SAndroid Build Coastguard Worker@ui1 = common global i32 0, align 4
19*9880d681SAndroid Build Coastguard Worker@ui2 = common global i32 0, align 4
20*9880d681SAndroid Build Coastguard Worker@ui3 = common global i32 0, align 4
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
23*9880d681SAndroid Build Coastguard Workerdefine void @andUb() #0 {
24*9880d681SAndroid Build Coastguard Workerentry:
25*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @ub1, align 1
26*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @ub2, align 1
27*9880d681SAndroid Build Coastguard Worker  %conv0 = trunc i8 %0 to i1
28*9880d681SAndroid Build Coastguard Worker  %conv1 = trunc i8 %1 to i1
29*9880d681SAndroid Build Coastguard Worker  %and0 = and i1 %conv1, %conv0
30*9880d681SAndroid Build Coastguard Worker  %conv3 = zext i1 %and0 to i8
31*9880d681SAndroid Build Coastguard Worker  store i8 %conv3, i8* @ub, align 1, !tbaa !2
32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    andUb
33*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
34*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
35*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
36*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
37*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB2_ADDR:[0-9]+]], %got(ub2)($[[REG_GP]])
38*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
39*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
40*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB2:[0-9]+]], 0($[[UB2_ADDR]])
41*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES1:[0-9]+]], $[[UB2]], $[[UB1]]
42*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[RES1]], 1
43*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
44*9880d681SAndroid Build Coastguard Worker  ret void
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
48*9880d681SAndroid Build Coastguard Workerdefine void @andUb0() #0 {
49*9880d681SAndroid Build Coastguard Workerentry:
50*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @ub1, align 1, !tbaa !2
51*9880d681SAndroid Build Coastguard Worker  %conv = trunc i8 %0 to i1
52*9880d681SAndroid Build Coastguard Worker  %and = and i1 %conv, 0
53*9880d681SAndroid Build Coastguard Worker  %conv1 = zext i1 %and to i8
54*9880d681SAndroid Build Coastguard Worker  store i8 %conv1, i8* @ub, align 1, !tbaa !2
55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    andUb0
56*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
57*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
58*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
59*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
60*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
61*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
62*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES1:[0-9]+]], $[[UB1]], $zero
63*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[RES1]], 1
64*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
65*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    andUb0
66*9880d681SAndroid Build Coastguard Worker  ret void
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
70*9880d681SAndroid Build Coastguard Workerdefine void @andUb1() #0 {
71*9880d681SAndroid Build Coastguard Worker; clang uses i8 constants for booleans, so we test with an i8 1.
72*9880d681SAndroid Build Coastguard Workerentry:
73*9880d681SAndroid Build Coastguard Worker  %x = load i8, i8* @ub1, align 1, !tbaa !2
74*9880d681SAndroid Build Coastguard Worker  %and = and i8 %x, 1
75*9880d681SAndroid Build Coastguard Worker  %conv = trunc i8 %and to i1
76*9880d681SAndroid Build Coastguard Worker  %conv1 = zext i1 %conv to i8
77*9880d681SAndroid Build Coastguard Worker  store i8 %conv1, i8* @ub, align 1, !tbaa !2
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    andUb1
79*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
80*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
81*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
82*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
83*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST:[0-9]+]], $zero, 1
84*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
85*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
86*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES1:[0-9]+]], $[[UB1]], $[[CONST]]
87*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[RES1]], 1
88*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
89*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    andUb1
90*9880d681SAndroid Build Coastguard Worker  ret void
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
94*9880d681SAndroid Build Coastguard Workerdefine void @orUb() #0 {
95*9880d681SAndroid Build Coastguard Workerentry:
96*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @ub1, align 1
97*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @ub2, align 1
98*9880d681SAndroid Build Coastguard Worker  %conv0 = trunc i8 %0 to i1
99*9880d681SAndroid Build Coastguard Worker  %conv1 = trunc i8 %1 to i1
100*9880d681SAndroid Build Coastguard Worker  %or0 = or i1 %conv1, %conv0
101*9880d681SAndroid Build Coastguard Worker  %conv3 = zext i1 %or0 to i8
102*9880d681SAndroid Build Coastguard Worker  store i8 %conv3, i8* @ub, align 1, !tbaa !2
103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    orUb
104*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
105*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
106*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
107*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
108*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB2_ADDR:[0-9]+]], %got(ub2)($[[REG_GP]])
109*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
110*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
111*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB2:[0-9]+]], 0($[[UB2_ADDR]])
112*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    or      $[[RES1:[0-9]+]], $[[UB2]], $[[UB1]]
113*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[RES1]], 1
114*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
115*9880d681SAndroid Build Coastguard Worker  ret void
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
119*9880d681SAndroid Build Coastguard Workerdefine void @orUb0() #0 {
120*9880d681SAndroid Build Coastguard Workerentry:
121*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @ub1, align 1, !tbaa !2
122*9880d681SAndroid Build Coastguard Worker  %conv = trunc i8 %0 to i1
123*9880d681SAndroid Build Coastguard Worker  %or = or i1 %conv, 0
124*9880d681SAndroid Build Coastguard Worker  %conv1 = zext i1 %or to i8
125*9880d681SAndroid Build Coastguard Worker  store i8 %conv1, i8* @ub, align 1, !tbaa !2
126*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    orUb0
127*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
128*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
129*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
130*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
131*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
132*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
133*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[UB1]], 1
134*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
135*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    orUb0
136*9880d681SAndroid Build Coastguard Worker  ret void
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
140*9880d681SAndroid Build Coastguard Workerdefine void @orUb1() #0 {
141*9880d681SAndroid Build Coastguard Workerentry:
142*9880d681SAndroid Build Coastguard Worker  %x = load i8, i8* @ub1, align 1, !tbaa !2
143*9880d681SAndroid Build Coastguard Worker  %or = or i8 %x, 1
144*9880d681SAndroid Build Coastguard Worker  %conv = trunc i8 %or to i1
145*9880d681SAndroid Build Coastguard Worker  %conv1 = zext i1 %conv to i8
146*9880d681SAndroid Build Coastguard Worker  store i8 %conv1, i8* @ub, align 1, !tbaa !2
147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    orUb1
148*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
149*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
150*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
151*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
152*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST:[0-9]+]], $zero, 1
153*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
154*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
155*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    or      $[[RES1:[0-9]+]], $[[UB1]], $[[CONST]]
156*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[RES1]], 1
157*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
158*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    orUb1
159*9880d681SAndroid Build Coastguard Worker  ret void
160*9880d681SAndroid Build Coastguard Worker}
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
163*9880d681SAndroid Build Coastguard Workerdefine void @xorUb() #0 {
164*9880d681SAndroid Build Coastguard Workerentry:
165*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @ub1, align 1
166*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @ub2, align 1
167*9880d681SAndroid Build Coastguard Worker  %conv0 = trunc i8 %0 to i1
168*9880d681SAndroid Build Coastguard Worker  %conv1 = trunc i8 %1 to i1
169*9880d681SAndroid Build Coastguard Worker  %xor0 = xor i1 %conv1, %conv0
170*9880d681SAndroid Build Coastguard Worker  %conv3 = zext i1 %xor0 to i8
171*9880d681SAndroid Build Coastguard Worker  store i8 %conv3, i8* @ub, align 1, !tbaa !2
172*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .ent    xorUb
173*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
174*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
175*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
176*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
177*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB2_ADDR:[0-9]+]], %got(ub2)($[[REG_GP]])
178*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
179*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
180*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB2:[0-9]+]], 0($[[UB2_ADDR]])
181*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES1:[0-9]+]], $[[UB2]], $[[UB1]]
182*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[RES1]], 1
183*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
184*9880d681SAndroid Build Coastguard Worker  ret void
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
188*9880d681SAndroid Build Coastguard Workerdefine void @xorUb0() #0 {
189*9880d681SAndroid Build Coastguard Workerentry:
190*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @ub1, align 1, !tbaa !2
191*9880d681SAndroid Build Coastguard Worker  %conv = trunc i8 %0 to i1
192*9880d681SAndroid Build Coastguard Worker  %xor = xor i1 %conv, 0
193*9880d681SAndroid Build Coastguard Worker  %conv1 = zext i1 %xor to i8
194*9880d681SAndroid Build Coastguard Worker  store i8 %conv1, i8* @ub, align 1, !tbaa !2
195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    xorUb0
196*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
197*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
198*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
199*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
200*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
201*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
202*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES1:[0-9]+]], $[[UB1]], $zero
203*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[RES1]], 1
204*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
205*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    xorUb0
206*9880d681SAndroid Build Coastguard Worker  ret void
207*9880d681SAndroid Build Coastguard Worker}
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
210*9880d681SAndroid Build Coastguard Workerdefine void @xorUb1() #0 {
211*9880d681SAndroid Build Coastguard Workerentry:
212*9880d681SAndroid Build Coastguard Worker  %x = load i8, i8* @ub1, align 1, !tbaa !2
213*9880d681SAndroid Build Coastguard Worker  %xor = xor i8 1, %x
214*9880d681SAndroid Build Coastguard Worker  %conv = trunc i8 %xor to i1
215*9880d681SAndroid Build Coastguard Worker  %conv1 = zext i1 %conv to i8
216*9880d681SAndroid Build Coastguard Worker  store i8 %conv1, i8* @ub, align 1, !tbaa !2
217*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    xorUb1
218*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
219*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
220*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
221*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB_ADDR:[0-9]+]], %got(ub)($[[REG_GP]])
222*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST:[0-9]+]], $zero, 1
223*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UB1_ADDR:[0-9]+]], %got(ub1)($[[REG_GP]])
224*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UB1:[0-9]+]], 0($[[UB1_ADDR]])
225*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES1:[0-9]+]], $[[UB1]], $[[CONST]]
226*9880d681SAndroid Build Coastguard Worker; CHECK:        andi    $[[RES:[0-9]+]], $[[RES1]], 1
227*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UB_ADDR]])
228*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    xorUb1
229*9880d681SAndroid Build Coastguard Worker  ret void
230*9880d681SAndroid Build Coastguard Worker}
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
233*9880d681SAndroid Build Coastguard Workerdefine void @andUc() #0 {
234*9880d681SAndroid Build Coastguard Workerentry:
235*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
236*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @uc2, align 1, !tbaa !2
237*9880d681SAndroid Build Coastguard Worker  %and3 = and i8 %1, %0
238*9880d681SAndroid Build Coastguard Worker  store i8 %and3, i8* @uc, align 1, !tbaa !2
239*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    andUc
240*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
241*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
242*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
243*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
244*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC2_ADDR:[0-9]+]], %got(uc2)($[[REG_GP]])
245*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
246*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
247*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC2:[0-9]+]], 0($[[UC2_ADDR]])
248*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES:[0-9]+]], $[[UC2]], $[[UB1]]
249*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
250*9880d681SAndroid Build Coastguard Worker  ret void
251*9880d681SAndroid Build Coastguard Worker}
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
254*9880d681SAndroid Build Coastguard Workerdefine void @andUc0() #0 {
255*9880d681SAndroid Build Coastguard Workerentry:
256*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
257*9880d681SAndroid Build Coastguard Worker  %and = and i8 %0, 67
258*9880d681SAndroid Build Coastguard Worker  store i8 %and, i8* @uc, align 1, !tbaa !2
259*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    andUc0
260*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
261*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
262*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
263*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
264*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
265*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
266*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST_67:[0-9]+]], $zero, 67
267*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES:[0-9]+]], $[[UC1]], $[[CONST_67]]
268*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
269*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    andUc0
270*9880d681SAndroid Build Coastguard Worker  ret void
271*9880d681SAndroid Build Coastguard Worker}
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
274*9880d681SAndroid Build Coastguard Workerdefine void @andUc1() #0 {
275*9880d681SAndroid Build Coastguard Workerentry:
276*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
277*9880d681SAndroid Build Coastguard Worker  %and = and i8 %0, 167
278*9880d681SAndroid Build Coastguard Worker  store i8 %and, i8* @uc, align 1, !tbaa !2
279*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    andUc1
280*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
281*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
282*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
283*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
284*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
285*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
286*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST_167:[0-9]+]], $zero, 167
287*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES:[0-9]+]], $[[UC1]], $[[CONST_167]]
288*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
289*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    andUc1
290*9880d681SAndroid Build Coastguard Worker  ret void
291*9880d681SAndroid Build Coastguard Worker}
292*9880d681SAndroid Build Coastguard Worker
293*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
294*9880d681SAndroid Build Coastguard Workerdefine void @orUc() #0 {
295*9880d681SAndroid Build Coastguard Workerentry:
296*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
297*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @uc2, align 1, !tbaa !2
298*9880d681SAndroid Build Coastguard Worker  %or3 = or i8 %1, %0
299*9880d681SAndroid Build Coastguard Worker  store i8 %or3, i8* @uc, align 1, !tbaa !2
300*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    orUc
301*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
302*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
303*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
304*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
305*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC2_ADDR:[0-9]+]], %got(uc2)($[[REG_GP]])
306*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
307*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
308*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC2:[0-9]+]], 0($[[UC2_ADDR]])
309*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    or      $[[RES:[0-9]+]], $[[UC2]], $[[UC1]]
310*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
311*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    orUc
312*9880d681SAndroid Build Coastguard Worker  ret void
313*9880d681SAndroid Build Coastguard Worker}
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
316*9880d681SAndroid Build Coastguard Workerdefine void @orUc0() #0 {
317*9880d681SAndroid Build Coastguard Workerentry:
318*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
319*9880d681SAndroid Build Coastguard Worker   %or = or i8 %0, 69
320*9880d681SAndroid Build Coastguard Worker  store i8 %or, i8* @uc, align 1, !tbaa !2
321*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    orUc0
322*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
323*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
324*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
325*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
326*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
327*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
328*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST_69:[0-9]+]], $zero, 69
329*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    or      $[[RES:[0-9]+]], $[[UC1]], $[[CONST_69]]
330*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
331*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    orUc0
332*9880d681SAndroid Build Coastguard Worker  ret void
333*9880d681SAndroid Build Coastguard Worker}
334*9880d681SAndroid Build Coastguard Worker
335*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
336*9880d681SAndroid Build Coastguard Workerdefine void @orUc1() #0 {
337*9880d681SAndroid Build Coastguard Workerentry:
338*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
339*9880d681SAndroid Build Coastguard Worker  %or = or i8 %0, 238
340*9880d681SAndroid Build Coastguard Worker  store i8 %or, i8* @uc, align 1, !tbaa !2
341*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    orUc1
342*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
343*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
344*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
345*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
346*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
347*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
348*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST_238:[0-9]+]], $zero, 238
349*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    or      $[[RES:[0-9]+]], $[[UC1]], $[[CONST_238]]
350*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
351*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    orUc1
352*9880d681SAndroid Build Coastguard Worker  ret void
353*9880d681SAndroid Build Coastguard Worker}
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
356*9880d681SAndroid Build Coastguard Workerdefine void @xorUc() #0 {
357*9880d681SAndroid Build Coastguard Workerentry:
358*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
359*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @uc2, align 1, !tbaa !2
360*9880d681SAndroid Build Coastguard Worker  %xor3 = xor i8 %1, %0
361*9880d681SAndroid Build Coastguard Worker  store i8 %xor3, i8* @uc, align 1, !tbaa !2
362*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .ent    xorUc
363*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
364*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
365*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
366*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
367*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC2_ADDR:[0-9]+]], %got(uc2)($[[REG_GP]])
368*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
369*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
370*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC2:[0-9]+]], 0($[[UC2_ADDR]])
371*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES:[0-9]+]], $[[UC2]], $[[UC1]]
372*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
373*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    xorUc
374*9880d681SAndroid Build Coastguard Worker  ret void
375*9880d681SAndroid Build Coastguard Worker}
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
378*9880d681SAndroid Build Coastguard Workerdefine void @xorUc0() #0 {
379*9880d681SAndroid Build Coastguard Workerentry:
380*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
381*9880d681SAndroid Build Coastguard Worker  %xor = xor i8 %0, 23
382*9880d681SAndroid Build Coastguard Worker  store i8 %xor, i8* @uc, align 1, !tbaa !2
383*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    xorUc0
384*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
385*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
386*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
387*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
388*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
389*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
390*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST_23:[0-9]+]], $zero, 23
391*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES:[0-9]+]], $[[UC1]], $[[CONST_23]]
392*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
393*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    xorUc0
394*9880d681SAndroid Build Coastguard Worker  ret void
395*9880d681SAndroid Build Coastguard Worker}
396*9880d681SAndroid Build Coastguard Worker
397*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
398*9880d681SAndroid Build Coastguard Workerdefine void @xorUc1() #0 {
399*9880d681SAndroid Build Coastguard Workerentry:
400*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* @uc1, align 1, !tbaa !2
401*9880d681SAndroid Build Coastguard Worker  %xor = xor i8 %0, 120
402*9880d681SAndroid Build Coastguard Worker  store i8 %xor, i8* @uc, align 1, !tbaa !2
403*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    xorUc1
404*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
405*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
406*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
407*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC_ADDR:[0-9]+]], %got(uc)($[[REG_GP]])
408*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[UC1_ADDR:[0-9]+]], %got(uc1)($[[REG_GP]])
409*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lbu     $[[UC1:[0-9]+]], 0($[[UC1_ADDR]])
410*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST_120:[0-9]+]], $zero, 120
411*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES:[0-9]+]], $[[UC1]], $[[CONST_120]]
412*9880d681SAndroid Build Coastguard Worker; CHECK:        sb      $[[RES]], 0($[[UC_ADDR]])
413*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    xorUc1
414*9880d681SAndroid Build Coastguard Worker  ret void
415*9880d681SAndroid Build Coastguard Worker}
416*9880d681SAndroid Build Coastguard Worker
417*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
418*9880d681SAndroid Build Coastguard Workerdefine void @andUs() #0 {
419*9880d681SAndroid Build Coastguard Workerentry:
420*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
421*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* @us2, align 2, !tbaa !5
422*9880d681SAndroid Build Coastguard Worker  %and3 = and i16 %1, %0
423*9880d681SAndroid Build Coastguard Worker  store i16 %and3, i16* @us, align 2, !tbaa !5
424*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    andUs
425*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
426*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
427*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
428*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US_ADDR:[0-9]+]], %got(us)($[[REG_GP]])
429*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US2_ADDR:[0-9]+]], %got(us2)($[[REG_GP]])
430*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US1_ADDR:[0-9]+]], %got(us1)($[[REG_GP]])
431*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US1:[0-9]+]], 0($[[US1_ADDR]])
432*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US2:[0-9]+]], 0($[[US2_ADDR]])
433*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES:[0-9]+]], $[[US2]], $[[UB1]]
434*9880d681SAndroid Build Coastguard Worker; CHECK:        sh      $[[RES]], 0($[[US_ADDR]])
435*9880d681SAndroid Build Coastguard Worker; CHECK:        .end andUs
436*9880d681SAndroid Build Coastguard Worker  ret void
437*9880d681SAndroid Build Coastguard Worker}
438*9880d681SAndroid Build Coastguard Worker
439*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
440*9880d681SAndroid Build Coastguard Workerdefine void @andUs0() #0 {
441*9880d681SAndroid Build Coastguard Workerentry:
442*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
443*9880d681SAndroid Build Coastguard Worker  %and = and i16 %0, 4660
444*9880d681SAndroid Build Coastguard Worker  store i16 %and, i16* @us, align 2, !tbaa !5
445*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .ent    andUs0
446*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
447*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
448*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
449*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US_ADDR:[0-9]+]], %got(us)($[[REG_GP]])
450*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US1_ADDR:[0-9]+]], %got(us1)($[[REG_GP]])
451*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US1:[0-9]+]], 0($[[US1_ADDR]])
452*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST_4660:[0-9]+]], $zero, 4660
453*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES:[0-9]+]], $[[US1]], $[[CONST_4660]]
454*9880d681SAndroid Build Coastguard Worker; CHECK:        sh      $[[RES]], 0($[[US_ADDR]])
455*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    andUs0
456*9880d681SAndroid Build Coastguard Worker  ret void
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Worker
459*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
460*9880d681SAndroid Build Coastguard Workerdefine void @andUs1() #0 {
461*9880d681SAndroid Build Coastguard Workerentry:
462*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
463*9880d681SAndroid Build Coastguard Worker  %and = and i16 %0, 61351
464*9880d681SAndroid Build Coastguard Worker  store i16 %and, i16* @us, align 2, !tbaa !5
465*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    andUs1
466*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
467*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
468*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
469*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US_ADDR:[0-9]+]], %got(us)($[[REG_GP]])
470*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US1_ADDR:[0-9]+]], %got(us1)($[[REG_GP]])
471*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US1:[0-9]+]], 0($[[US1_ADDR]])
472*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    ori     $[[CONST_61351:[0-9]+]], $zero, 61351
473*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    and     $[[RES:[0-9]+]], $[[US1]], $[[CONST_61351]]
474*9880d681SAndroid Build Coastguard Worker; CHECK:        sh      $[[RES]], 0($[[US_ADDR]])
475*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    andUs1
476*9880d681SAndroid Build Coastguard Worker  ret void
477*9880d681SAndroid Build Coastguard Worker}
478*9880d681SAndroid Build Coastguard Worker
479*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
480*9880d681SAndroid Build Coastguard Workerdefine void @orUs() #0 {
481*9880d681SAndroid Build Coastguard Workerentry:
482*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
483*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* @us2, align 2, !tbaa !5
484*9880d681SAndroid Build Coastguard Worker  %or3 = or i16 %1, %0
485*9880d681SAndroid Build Coastguard Worker  store i16 %or3, i16* @us, align 2, !tbaa !5
486*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    orUs
487*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
488*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
489*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
490*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US_ADDR:[0-9]+]], %got(us)($[[REG_GP]])
491*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US2_ADDR:[0-9]+]], %got(us2)($[[REG_GP]])
492*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US1_ADDR:[0-9]+]], %got(us1)($[[REG_GP]])
493*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US1:[0-9]+]], 0($[[US1_ADDR]])
494*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US2:[0-9]+]], 0($[[US2_ADDR]])
495*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    or      $[[RES:[0-9]+]], $[[US2]], $[[US1]]
496*9880d681SAndroid Build Coastguard Worker; CHECK:        sh      $[[RES]], 0($[[US_ADDR]])
497*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    orUs
498*9880d681SAndroid Build Coastguard Worker  ret void
499*9880d681SAndroid Build Coastguard Worker}
500*9880d681SAndroid Build Coastguard Worker
501*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
502*9880d681SAndroid Build Coastguard Workerdefine void @orUs0() #0 {
503*9880d681SAndroid Build Coastguard Workerentry:
504*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
505*9880d681SAndroid Build Coastguard Worker  %or = or i16 %0, 17666
506*9880d681SAndroid Build Coastguard Worker  store i16 %or, i16* @us, align 2, !tbaa !5
507*9880d681SAndroid Build Coastguard Worker  ret void
508*9880d681SAndroid Build Coastguard Worker}
509*9880d681SAndroid Build Coastguard Worker
510*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
511*9880d681SAndroid Build Coastguard Workerdefine void @orUs1() #0 {
512*9880d681SAndroid Build Coastguard Workerentry:
513*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
514*9880d681SAndroid Build Coastguard Worker  %or = or i16 %0, 60945
515*9880d681SAndroid Build Coastguard Worker  store i16 %or, i16* @us, align 2, !tbaa !5
516*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    orUs1
517*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
518*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
519*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
520*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US_ADDR:[0-9]+]], %got(us)($[[REG_GP]])
521*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US1_ADDR:[0-9]+]], %got(us1)($[[REG_GP]])
522*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US1:[0-9]+]], 0($[[US1_ADDR]])
523*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    ori     $[[CONST_60945:[0-9]+]], $zero, 60945
524*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    or      $[[RES:[0-9]+]], $[[US1]], $[[CONST_60945]]
525*9880d681SAndroid Build Coastguard Worker; CHECK:        sh      $[[RES]], 0($[[US_ADDR]])
526*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    orUs1
527*9880d681SAndroid Build Coastguard Worker  ret void
528*9880d681SAndroid Build Coastguard Worker}
529*9880d681SAndroid Build Coastguard Worker
530*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
531*9880d681SAndroid Build Coastguard Workerdefine void @xorUs() #0 {
532*9880d681SAndroid Build Coastguard Workerentry:
533*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
534*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* @us2, align 2, !tbaa !5
535*9880d681SAndroid Build Coastguard Worker  %xor3 = xor i16 %1, %0
536*9880d681SAndroid Build Coastguard Worker  store i16 %xor3, i16* @us, align 2, !tbaa !5
537*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    xorUs
538*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
539*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
540*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
541*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US_ADDR:[0-9]+]], %got(us)($[[REG_GP]])
542*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US2_ADDR:[0-9]+]], %got(us2)($[[REG_GP]])
543*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US1_ADDR:[0-9]+]], %got(us1)($[[REG_GP]])
544*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US1:[0-9]+]], 0($[[US1_ADDR]])
545*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US2:[0-9]+]], 0($[[US2_ADDR]])
546*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES:[0-9]+]], $[[US2]], $[[US1]]
547*9880d681SAndroid Build Coastguard Worker; CHECK:        sh      $[[RES]], 0($[[US_ADDR]])
548*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    xorUs
549*9880d681SAndroid Build Coastguard Worker  ret void
550*9880d681SAndroid Build Coastguard Worker}
551*9880d681SAndroid Build Coastguard Worker
552*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
553*9880d681SAndroid Build Coastguard Workerdefine void @xorUs0() #0 {
554*9880d681SAndroid Build Coastguard Workerentry:
555*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
556*9880d681SAndroid Build Coastguard Worker  %xor = xor i16 %0, 6062
557*9880d681SAndroid Build Coastguard Worker  store i16 %xor, i16* @us, align 2, !tbaa !5
558*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    xorUs0
559*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
560*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
561*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
562*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US_ADDR:[0-9]+]], %got(us)($[[REG_GP]])
563*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US1_ADDR:[0-9]+]], %got(us1)($[[REG_GP]])
564*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US1:[0-9]+]], 0($[[US1_ADDR]])
565*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    addiu   $[[CONST_6062:[0-9]+]], $zero, 6062
566*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES:[0-9]+]], $[[US1]], $[[CONST_6062]]
567*9880d681SAndroid Build Coastguard Worker; CHECK:        sh      $[[RES]], 0($[[US_ADDR]])
568*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    xorUs0
569*9880d681SAndroid Build Coastguard Worker
570*9880d681SAndroid Build Coastguard Worker  ret void
571*9880d681SAndroid Build Coastguard Worker}
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind
574*9880d681SAndroid Build Coastguard Workerdefine void @xorUs1() #0 {
575*9880d681SAndroid Build Coastguard Workerentry:
576*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* @us1, align 2, !tbaa !5
577*9880d681SAndroid Build Coastguard Worker  %xor = xor i16 %0, 60024
578*9880d681SAndroid Build Coastguard Worker  store i16 %xor, i16* @us, align 2, !tbaa !5
579*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .ent    xorUs1
580*9880d681SAndroid Build Coastguard Worker; CHECK:        lui     $[[REG_GPa:[0-9]+]], %hi(_gp_disp)
581*9880d681SAndroid Build Coastguard Worker; CHECK:        addiu   $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp)
582*9880d681SAndroid Build Coastguard Worker; CHECK:        addu    $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25
583*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US_ADDR:[0-9]+]], %got(us)($[[REG_GP]])
584*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lw      $[[US1_ADDR:[0-9]+]], %got(us1)($[[REG_GP]])
585*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    lhu     $[[US1:[0-9]+]], 0($[[US1_ADDR]])
586*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    ori     $[[CONST_60024:[0-9]+]], $zero, 60024
587*9880d681SAndroid Build Coastguard Worker; CHECK-DAG:    xor     $[[RES:[0-9]+]], $[[US1]], $[[CONST_60024]]
588*9880d681SAndroid Build Coastguard Worker; CHECK:        sh      $[[RES]], 0($[[US_ADDR]])
589*9880d681SAndroid Build Coastguard Worker; CHECK:        .end    xorUs1
590*9880d681SAndroid Build Coastguard Worker  ret void
591*9880d681SAndroid Build Coastguard Worker}
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Workerattributes #0 = { noinline nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
594*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
595*9880d681SAndroid Build Coastguard Workerattributes #2 = { nounwind }
596*9880d681SAndroid Build Coastguard Worker
597*9880d681SAndroid Build Coastguard Worker!llvm.module.flags = !{!0}
598*9880d681SAndroid Build Coastguard Worker!llvm.ident = !{!1}
599*9880d681SAndroid Build Coastguard Worker
600*9880d681SAndroid Build Coastguard Worker!0 = !{i32 1, !"PIC Level", i32 2}
601*9880d681SAndroid Build Coastguard Worker!1 = !{!"clang version 3.7.0 (trunk)"}
602*9880d681SAndroid Build Coastguard Worker!2 = !{!3, !3, i64 0}
603*9880d681SAndroid Build Coastguard Worker!3 = !{!"omnipotent char", !4, i64 0}
604*9880d681SAndroid Build Coastguard Worker!4 = !{!"Simple C/C++ TBAA"}
605*9880d681SAndroid Build Coastguard Worker!5 = !{!6, !6, i64 0}
606*9880d681SAndroid Build Coastguard Worker!6 = !{!"short", !3, i64 0}
607