351 lines · plain
1; RUN: llc -mtriple=mipsel-elf -mattr=mips16 -relocation-model=pic -O3 < %s | FileCheck %s -check-prefix=162 3@t = global i32 10, align 44@f = global i32 199, align 45@a = global i32 1, align 46@b = global i32 10, align 47@c = global i32 1, align 48@z1 = common global i32 0, align 49@z2 = common global i32 0, align 410@z3 = common global i32 0, align 411@z4 = common global i32 0, align 412 13define void @calc_seleq() nounwind {14entry:15 %0 = load i32, ptr @a, align 416 %1 = load i32, ptr @b, align 417 %cmp = icmp eq i32 %0, %118 %2 = load i32, ptr @f, align 419 %3 = load i32, ptr @t, align 420 %cond = select i1 %cmp, i32 %2, i32 %321 store i32 %cond, ptr @z1, align 422; 16: cmp ${{[0-9]+}}, ${{[0-9]+}}23; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}24; 16: move ${{[0-9]+}}, ${{[0-9]+}}25 store i32 %cond, ptr @z2, align 426 %4 = load i32, ptr @c, align 427 %cmp6 = icmp eq i32 %4, %028 %cond10 = select i1 %cmp6, i32 %3, i32 %229 store i32 %cond10, ptr @z3, align 430 store i32 %cond10, ptr @z4, align 431 ret void32}33 34 35define void @calc_seleqk() nounwind {36entry:37 %0 = load i32, ptr @a, align 438 %cmp = icmp eq i32 %0, 139 %1 = load i32, ptr @t, align 440 %2 = load i32, ptr @f, align 441 %cond = select i1 %cmp, i32 %1, i32 %242 store i32 %cond, ptr @z1, align 443; 16: cmpi ${{[0-9]+}}, 144; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}45; 16: move ${{[0-9]+}}, ${{[0-9]+}}46 %cmp1 = icmp eq i32 %0, 1047 %cond5 = select i1 %cmp1, i32 %2, i32 %148 store i32 %cond5, ptr @z2, align 449 %3 = load i32, ptr @b, align 450 %cmp6 = icmp eq i32 %3, 351 %cond10 = select i1 %cmp6, i32 %2, i32 %152 store i32 %cond10, ptr @z3, align 453; 16: cmpi ${{[0-9]+}}, 1054; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}55; 16: move ${{[0-9]+}}, ${{[0-9]+}}56 %cmp11 = icmp eq i32 %3, 1057 %cond15 = select i1 %cmp11, i32 %1, i32 %258 store i32 %cond15, ptr @z4, align 459 ret void60}61 62define void @calc_seleqz() nounwind {63entry:64 %0 = load i32, ptr @a, align 465 %cmp = icmp eq i32 %0, 066 %1 = load i32, ptr @t, align 467 %2 = load i32, ptr @f, align 468 %cond = select i1 %cmp, i32 %1, i32 %269 store i32 %cond, ptr @z1, align 470; 16: beqz ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}71; 16: move ${{[0-9]+}}, ${{[0-9]+}}72 %3 = load i32, ptr @b, align 473 %cmp1 = icmp eq i32 %3, 074 %cond5 = select i1 %cmp1, i32 %2, i32 %175 store i32 %cond5, ptr @z2, align 476 %4 = load i32, ptr @c, align 477 %cmp6 = icmp eq i32 %4, 078 %cond10 = select i1 %cmp6, i32 %1, i32 %279 store i32 %cond10, ptr @z3, align 480 store i32 %cond, ptr @z4, align 481 ret void82}83 84define void @calc_selge() nounwind {85entry:86 %0 = load i32, ptr @a, align 487 %1 = load i32, ptr @b, align 488 %cmp = icmp sge i32 %0, %189 %2 = load i32, ptr @f, align 490 %3 = load i32, ptr @t, align 491 %cond = select i1 %cmp, i32 %2, i32 %392 store i32 %cond, ptr @z1, align 493; 16: slt ${{[0-9]+}}, ${{[0-9]+}}94; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}95; 16: move ${{[0-9]+}}, ${{[0-9]+}}96 %cmp1 = icmp sge i32 %1, %097 %cond5 = select i1 %cmp1, i32 %3, i32 %298 store i32 %cond5, ptr @z2, align 499 %4 = load i32, ptr @c, align 4100 %cmp6 = icmp sge i32 %4, %0101 %cond10 = select i1 %cmp6, i32 %3, i32 %2102 store i32 %cond10, ptr @z3, align 4103 %cmp11 = icmp sge i32 %0, %4104 %cond15 = select i1 %cmp11, i32 %3, i32 %2105 store i32 %cond15, ptr @z4, align 4106 ret void107}108 109define i32 @calc_selgt() nounwind {110entry:111 %0 = load i32, ptr @a, align 4112 %1 = load i32, ptr @b, align 4113 %cmp = icmp sgt i32 %0, %1114; 16: slt ${{[0-9]+}}, ${{[0-9]+}}115; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}116; 16: move ${{[0-9]+}}, ${{[0-9]+}}117 %2 = load i32, ptr @f, align 4118 %3 = load i32, ptr @t, align 4119 %cond = select i1 %cmp, i32 %2, i32 %3120 store i32 %cond, ptr @z1, align 4121 %cmp1 = icmp sgt i32 %1, %0122 %cond5 = select i1 %cmp1, i32 %3, i32 %2123 store i32 %cond5, ptr @z2, align 4124 %4 = load i32, ptr @c, align 4125 %cmp6 = icmp sgt i32 %4, %0126 %cond10 = select i1 %cmp6, i32 %2, i32 %3127 store i32 %cond10, ptr @z3, align 4128 %cmp11 = icmp sgt i32 %0, %4129 %cond15 = select i1 %cmp11, i32 %2, i32 %3130 store i32 %cond15, ptr @z4, align 4131 ret i32 undef132}133 134define void @calc_selle() nounwind {135entry:136 %0 = load i32, ptr @a, align 4137 %1 = load i32, ptr @b, align 4138 %cmp = icmp sle i32 %0, %1139 %2 = load i32, ptr @t, align 4140 %3 = load i32, ptr @f, align 4141 %cond = select i1 %cmp, i32 %2, i32 %3142 store i32 %cond, ptr @z1, align 4143; 16: slt ${{[0-9]+}}, ${{[0-9]+}}144; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}145; 16: move ${{[0-9]+}}, ${{[0-9]+}}146 %cmp1 = icmp sle i32 %1, %0147 %cond5 = select i1 %cmp1, i32 %3, i32 %2148 store i32 %cond5, ptr @z2, align 4149 %4 = load i32, ptr @c, align 4150 %cmp6 = icmp sle i32 %4, %0151 %cond10 = select i1 %cmp6, i32 %2, i32 %3152 store i32 %cond10, ptr @z3, align 4153 %cmp11 = icmp sle i32 %0, %4154 %cond15 = select i1 %cmp11, i32 %2, i32 %3155 store i32 %cond15, ptr @z4, align 4156 ret void157}158 159define void @calc_selltk() nounwind {160entry:161 %0 = load i32, ptr @a, align 4162 %cmp = icmp slt i32 %0, 10163 %1 = load i32, ptr @t, align 4164 %2 = load i32, ptr @f, align 4165 %cond = select i1 %cmp, i32 %1, i32 %2166 store i32 %cond, ptr @z1, align 4167; 16: slti ${{[0-9]+}}, {{[0-9]+}}168; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}169; 16: move ${{[0-9]+}}, ${{[0-9]+}}170 %3 = load i32, ptr @b, align 4171 %cmp1 = icmp slt i32 %3, 2172 %cond5 = select i1 %cmp1, i32 %2, i32 %1173 store i32 %cond5, ptr @z2, align 4174 %4 = load i32, ptr @c, align 4175 %cmp6 = icmp sgt i32 %4, 2176 %cond10 = select i1 %cmp6, i32 %2, i32 %1177 store i32 %cond10, ptr @z3, align 4178 %cmp11 = icmp sgt i32 %0, 2179 %cond15 = select i1 %cmp11, i32 %2, i32 %1180 store i32 %cond15, ptr @z4, align 4181 ret void182}183 184 185define void @calc_selne() nounwind {186entry:187 %0 = load i32, ptr @a, align 4188 %1 = load i32, ptr @b, align 4189 %cmp = icmp ne i32 %0, %1190 %2 = load i32, ptr @t, align 4191 %3 = load i32, ptr @f, align 4192 %cond = select i1 %cmp, i32 %2, i32 %3193 store i32 %cond, ptr @z1, align 4194; 16: cmp ${{[0-9]+}}, ${{[0-9]+}}195; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}196; 16: move ${{[0-9]+}}, ${{[0-9]+}}197 store i32 %cond, ptr @z2, align 4198 %4 = load i32, ptr @c, align 4199 %cmp6 = icmp ne i32 %4, %0200 %cond10 = select i1 %cmp6, i32 %3, i32 %2201 store i32 %cond10, ptr @z3, align 4202 store i32 %cond10, ptr @z4, align 4203 ret void204}205 206define void @calc_selnek() nounwind {207entry:208 %0 = load i32, ptr @a, align 4209 %cmp = icmp ne i32 %0, 1210 %1 = load i32, ptr @f, align 4211 %2 = load i32, ptr @t, align 4212 %cond = select i1 %cmp, i32 %1, i32 %2213 store i32 %cond, ptr @z1, align 4214; 16: cmpi ${{[0-9]+}}, 1215; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}216; 16: move ${{[0-9]+}}, ${{[0-9]+}}217 %cmp1 = icmp ne i32 %0, 10218 %cond5 = select i1 %cmp1, i32 %2, i32 %1219 store i32 %cond5, ptr @z2, align 4220 %3 = load i32, ptr @b, align 4221 %cmp6 = icmp ne i32 %3, 3222 %cond10 = select i1 %cmp6, i32 %2, i32 %1223 store i32 %cond10, ptr @z3, align 4224; 16: cmpi ${{[0-9]+}}, 10225; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}226; 16: move ${{[0-9]+}}, ${{[0-9]+}}227 %cmp11 = icmp ne i32 %3, 10228 %cond15 = select i1 %cmp11, i32 %1, i32 %2229 store i32 %cond15, ptr @z4, align 4230 ret void231}232 233define void @calc_selnez() nounwind {234entry:235 %0 = load i32, ptr @a, align 4236 %cmp = icmp ne i32 %0, 0237 %1 = load i32, ptr @f, align 4238 %2 = load i32, ptr @t, align 4239 %cond = select i1 %cmp, i32 %1, i32 %2240 store i32 %cond, ptr @z1, align 4241; 16: bnez ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}242; 16: move ${{[0-9]+}}, ${{[0-9]+}}243 %3 = load i32, ptr @b, align 4244 %cmp1 = icmp ne i32 %3, 0245 %cond5 = select i1 %cmp1, i32 %2, i32 %1246 store i32 %cond5, ptr @z2, align 4247 %4 = load i32, ptr @c, align 4248 %cmp6 = icmp ne i32 %4, 0249 %cond10 = select i1 %cmp6, i32 %1, i32 %2250 store i32 %cond10, ptr @z3, align 4251 store i32 %cond, ptr @z4, align 4252 ret void253}254 255define void @calc_selnez2() nounwind {256entry:257 %0 = load i32, ptr @a, align 4258 %tobool = icmp ne i32 %0, 0259 %1 = load i32, ptr @f, align 4260 %2 = load i32, ptr @t, align 4261 %cond = select i1 %tobool, i32 %1, i32 %2262 store i32 %cond, ptr @z1, align 4263; 16: bnez ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}264; 16: move ${{[0-9]+}}, ${{[0-9]+}}265 %3 = load i32, ptr @b, align 4266 %tobool1 = icmp ne i32 %3, 0267 %cond5 = select i1 %tobool1, i32 %2, i32 %1268 store i32 %cond5, ptr @z2, align 4269 %4 = load i32, ptr @c, align 4270 %tobool6 = icmp ne i32 %4, 0271 %cond10 = select i1 %tobool6, i32 %1, i32 %2272 store i32 %cond10, ptr @z3, align 4273 store i32 %cond, ptr @z4, align 4274 ret void275}276 277define void @calc_seluge() nounwind {278entry:279 %0 = load i32, ptr @a, align 4280 %1 = load i32, ptr @b, align 4281 %cmp = icmp uge i32 %0, %1282 %2 = load i32, ptr @f, align 4283 %3 = load i32, ptr @t, align 4284 %cond = select i1 %cmp, i32 %2, i32 %3285 store i32 %cond, ptr @z1, align 4286; 16: sltu ${{[0-9]+}}, ${{[0-9]+}}287; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}288; 16: move ${{[0-9]+}}, ${{[0-9]+}}289 %cmp1 = icmp uge i32 %1, %0290 %cond5 = select i1 %cmp1, i32 %3, i32 %2291 store i32 %cond5, ptr @z2, align 4292 %4 = load i32, ptr @c, align 4293 %cmp6 = icmp uge i32 %4, %0294 %cond10 = select i1 %cmp6, i32 %3, i32 %2295 store i32 %cond10, ptr @z3, align 4296 %cmp11 = icmp uge i32 %0, %4297 %cond15 = select i1 %cmp11, i32 %3, i32 %2298 store i32 %cond15, ptr @z4, align 4299 ret void300}301 302define void @calc_selugt() nounwind {303entry:304 %0 = load i32, ptr @a, align 4305 %1 = load i32, ptr @b, align 4306 %cmp = icmp ugt i32 %0, %1307 %2 = load i32, ptr @f, align 4308 %3 = load i32, ptr @t, align 4309 %cond = select i1 %cmp, i32 %2, i32 %3310 store i32 %cond, ptr @z1, align 4311; 16: sltu ${{[0-9]+}}, ${{[0-9]+}}312; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}313; 16: move ${{[0-9]+}}, ${{[0-9]+}}314 %cmp1 = icmp ugt i32 %1, %0315 %cond5 = select i1 %cmp1, i32 %3, i32 %2316 store i32 %cond5, ptr @z2, align 4317 %4 = load i32, ptr @c, align 4318 %cmp6 = icmp ugt i32 %4, %0319 %cond10 = select i1 %cmp6, i32 %2, i32 %3320 store i32 %cond10, ptr @z3, align 4321 %cmp11 = icmp ugt i32 %0, %4322 %cond15 = select i1 %cmp11, i32 %2, i32 %3323 store i32 %cond15, ptr @z4, align 4324 ret void325}326 327define void @calc_selule() nounwind {328entry:329 %0 = load i32, ptr @a, align 4330 %1 = load i32, ptr @b, align 4331 %cmp = icmp ule i32 %0, %1332 %2 = load i32, ptr @t, align 4333 %3 = load i32, ptr @f, align 4334 %cond = select i1 %cmp, i32 %2, i32 %3335 store i32 %cond, ptr @z1, align 4336; 16: sltu ${{[0-9]+}}, ${{[0-9]+}}337; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}338; 16: move ${{[0-9]+}}, ${{[0-9]+}}339 %cmp1 = icmp ule i32 %1, %0340 %cond5 = select i1 %cmp1, i32 %3, i32 %2341 store i32 %cond5, ptr @z2, align 4342 %4 = load i32, ptr @c, align 4343 %cmp6 = icmp ule i32 %4, %0344 %cond10 = select i1 %cmp6, i32 %2, i32 %3345 store i32 %cond10, ptr @z3, align 4346 %cmp11 = icmp ule i32 %0, %4347 %cond15 = select i1 %cmp11, i32 %2, i32 %3348 store i32 %cond15, ptr @z4, align 4349 ret void350}351