1; RUN: llc < %s -mtriple=ve | FileCheck %s 2 3;;; Test ‘select’ instruction 4;;; 5;;; Syntax: 6;;; <result> = select [fast-math flags] selty <cond>, <ty> <val1>, <ty> <val2> 7;;; ; yields ty 8;;; 9;;; selty is either i1 or {<N x i1>} 10;;; 11;;; Overview: 12;;; The ‘select’ instruction is used to choose one value based on a condition, 13;;; without IR-level branching. 14;;; 15;;; Arguments: 16;;; The ‘select’ instruction requires an ‘i1’ value or a vector of ‘i1’ values 17;;; indicating the condition, and two values of the same first class type. 18;;; 19;;; The optional fast-math flags marker indicates that the select has one or 20;;; more fast-math flags. These are optimization hints to enable otherwise 21;;; unsafe floating-point optimizations. Fast-math flags are only valid for 22;;; selects that return a floating-point scalar or vector type, or an array 23;;; (nested to any depth) of floating-point scalar or vector types. 24;;; 25;;; Semantics: 26;;; If the condition is an i1 and it evaluates to 1, the instruction returns 27;;; the first value argument; otherwise, it returns the second value argument. 28;;; 29;;; If the condition is a vector of i1, then the value arguments must be 30;;; vectors of the same size, and the selection is done element by element. 31;;; 32;;; If the condition is an i1 and the value arguments are vectors of the same 33;;; size, then an entire vector is selected. 34;;; 35;;; Example: 36;;; %X = select i1 true, i8 17, i8 42 ; yields i8:17 37;;; 38;;; Note: 39;;; We test only i1/i8/u8/i16/u16/i32/u32/i64/u64/i128/u128/float/double/fp128 40 41; Function Attrs: norecurse nounwind readnone 42define zeroext i1 @select_i1_var(i1 zeroext %0, i1 zeroext %1, i1 zeroext %2) { 43; CHECK-LABEL: select_i1_var: 44; CHECK: # %bb.0: 45; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 46; CHECK-NEXT: adds.w.zx %s0, %s2, (0)1 47; CHECK-NEXT: b.l.t (, %s10) 48 %4 = select i1 %0, i1 %1, i1 %2 49 ret i1 %4 50} 51 52; Function Attrs: norecurse nounwind readnone 53define signext i8 @select_i8_var(i1 zeroext %0, i8 signext %1, i8 signext %2) { 54; CHECK-LABEL: select_i8_var: 55; CHECK: # %bb.0: 56; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 57; CHECK-NEXT: adds.w.sx %s0, %s2, (0)1 58; CHECK-NEXT: b.l.t (, %s10) 59 %4 = select i1 %0, i8 %1, i8 %2 60 ret i8 %4 61} 62 63; Function Attrs: norecurse nounwind readnone 64define zeroext i8 @select_u8_var(i1 zeroext %0, i8 zeroext %1, i8 zeroext %2) { 65; CHECK-LABEL: select_u8_var: 66; CHECK: # %bb.0: 67; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 68; CHECK-NEXT: adds.w.zx %s0, %s2, (0)1 69; CHECK-NEXT: b.l.t (, %s10) 70 %4 = select i1 %0, i8 %1, i8 %2 71 ret i8 %4 72} 73 74; Function Attrs: norecurse nounwind readnone 75define signext i16 @select_i16_var(i1 zeroext %0, i16 signext %1, i16 signext %2) { 76; CHECK-LABEL: select_i16_var: 77; CHECK: # %bb.0: 78; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 79; CHECK-NEXT: adds.w.sx %s0, %s2, (0)1 80; CHECK-NEXT: b.l.t (, %s10) 81 %4 = select i1 %0, i16 %1, i16 %2 82 ret i16 %4 83} 84 85; Function Attrs: norecurse nounwind readnone 86define zeroext i16 @select_u16_var(i1 zeroext %0, i16 zeroext %1, i16 zeroext %2) { 87; CHECK-LABEL: select_u16_var: 88; CHECK: # %bb.0: 89; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 90; CHECK-NEXT: adds.w.zx %s0, %s2, (0)1 91; CHECK-NEXT: b.l.t (, %s10) 92 %4 = select i1 %0, i16 %1, i16 %2 93 ret i16 %4 94} 95 96; Function Attrs: norecurse nounwind readnone 97define signext i32 @select_i32_var(i1 zeroext %0, i32 signext %1, i32 signext %2) { 98; CHECK-LABEL: select_i32_var: 99; CHECK: # %bb.0: 100; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 101; CHECK-NEXT: adds.w.sx %s0, %s2, (0)1 102; CHECK-NEXT: b.l.t (, %s10) 103 %4 = select i1 %0, i32 %1, i32 %2 104 ret i32 %4 105} 106 107; Function Attrs: norecurse nounwind readnone 108define zeroext i32 @select_u32_var(i1 zeroext %0, i32 zeroext %1, i32 zeroext %2) { 109; CHECK-LABEL: select_u32_var: 110; CHECK: # %bb.0: 111; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 112; CHECK-NEXT: adds.w.zx %s0, %s2, (0)1 113; CHECK-NEXT: b.l.t (, %s10) 114 %4 = select i1 %0, i32 %1, i32 %2 115 ret i32 %4 116} 117 118; Function Attrs: norecurse nounwind readnone 119define i64 @select_i64_var(i1 zeroext %0, i64 %1, i64 %2) { 120; CHECK-LABEL: select_i64_var: 121; CHECK: # %bb.0: 122; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 123; CHECK-NEXT: or %s0, 0, %s2 124; CHECK-NEXT: b.l.t (, %s10) 125 %4 = select i1 %0, i64 %1, i64 %2 126 ret i64 %4 127} 128 129; Function Attrs: norecurse nounwind readnone 130define i64 @select_u64_var(i1 zeroext %0, i64 %1, i64 %2) { 131; CHECK-LABEL: select_u64_var: 132; CHECK: # %bb.0: 133; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 134; CHECK-NEXT: or %s0, 0, %s2 135; CHECK-NEXT: b.l.t (, %s10) 136 %4 = select i1 %0, i64 %1, i64 %2 137 ret i64 %4 138} 139 140; Function Attrs: norecurse nounwind readnone 141define i128 @select_i128_var(i1 zeroext %0, i128 %1, i128 %2) { 142; CHECK-LABEL: select_i128_var: 143; CHECK: # %bb.0: 144; CHECK-NEXT: cmov.w.ne %s3, %s1, %s0 145; CHECK-NEXT: cmov.w.ne %s4, %s2, %s0 146; CHECK-NEXT: or %s0, 0, %s3 147; CHECK-NEXT: or %s1, 0, %s4 148; CHECK-NEXT: b.l.t (, %s10) 149 %4 = select i1 %0, i128 %1, i128 %2 150 ret i128 %4 151} 152 153; Function Attrs: norecurse nounwind readnone 154define i128 @select_u128_var(i1 zeroext %0, i128 %1, i128 %2) { 155; CHECK-LABEL: select_u128_var: 156; CHECK: # %bb.0: 157; CHECK-NEXT: cmov.w.ne %s3, %s1, %s0 158; CHECK-NEXT: cmov.w.ne %s4, %s2, %s0 159; CHECK-NEXT: or %s0, 0, %s3 160; CHECK-NEXT: or %s1, 0, %s4 161; CHECK-NEXT: b.l.t (, %s10) 162 %4 = select i1 %0, i128 %1, i128 %2 163 ret i128 %4 164} 165 166; Function Attrs: norecurse nounwind readnone 167define float @select_float_var(i1 zeroext %0, float %1, float %2) { 168; CHECK-LABEL: select_float_var: 169; CHECK: # %bb.0: 170; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 171; CHECK-NEXT: or %s0, 0, %s2 172; CHECK-NEXT: b.l.t (, %s10) 173 %4 = select fast i1 %0, float %1, float %2 174 ret float %4 175} 176 177; Function Attrs: norecurse nounwind readnone 178define double @select_double_var(i1 zeroext %0, double %1, double %2) { 179; CHECK-LABEL: select_double_var: 180; CHECK: # %bb.0: 181; CHECK-NEXT: cmov.w.ne %s2, %s1, %s0 182; CHECK-NEXT: or %s0, 0, %s2 183; CHECK-NEXT: b.l.t (, %s10) 184 %4 = select fast i1 %0, double %1, double %2 185 ret double %4 186} 187 188; Function Attrs: norecurse nounwind readnone 189define fp128 @select_quad_var(i1 zeroext %0, fp128 %1, fp128 %2) { 190; CHECK-LABEL: select_quad_var: 191; CHECK: # %bb.0: 192; CHECK-NEXT: cmov.w.ne %s4, %s2, %s0 193; CHECK-NEXT: cmov.w.ne %s5, %s3, %s0 194; CHECK-NEXT: or %s0, 0, %s4 195; CHECK-NEXT: or %s1, 0, %s5 196; CHECK-NEXT: b.l.t (, %s10) 197 %4 = select fast i1 %0, fp128 %1, fp128 %2 198 ret fp128 %4 199} 200 201; Function Attrs: norecurse nounwind readnone 202define zeroext i1 @select_i1_mimm(i1 zeroext %0, i1 zeroext %1) { 203; CHECK-LABEL: select_i1_mimm: 204; CHECK: # %bb.0: 205; CHECK-NEXT: or %s0, %s0, %s1 206; CHECK-NEXT: b.l.t (, %s10) 207 %3 = or i1 %0, %1 208 ret i1 %3 209} 210 211; Function Attrs: norecurse nounwind readnone 212define signext i8 @select_i8_mimm(i1 zeroext %0, i8 signext %1) { 213; CHECK-LABEL: select_i8_mimm: 214; CHECK: # %bb.0: 215; CHECK-NEXT: cmov.w.ne %s1, (57)1, %s0 216; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1 217; CHECK-NEXT: b.l.t (, %s10) 218 %3 = select i1 %0, i8 -128, i8 %1 219 ret i8 %3 220} 221 222; Function Attrs: norecurse nounwind readnone 223define zeroext i8 @select_u8_mimm(i1 zeroext %0, i8 zeroext %1) { 224; CHECK-LABEL: select_u8_mimm: 225; CHECK: # %bb.0: 226; CHECK-NEXT: cmov.w.ne %s1, (57)0, %s0 227; CHECK-NEXT: adds.w.zx %s0, %s1, (0)1 228; CHECK-NEXT: b.l.t (, %s10) 229 %3 = select i1 %0, i8 127, i8 %1 230 ret i8 %3 231} 232 233; Function Attrs: norecurse nounwind readnone 234define signext i16 @select_i16_mimm(i1 zeroext %0, i16 signext %1) { 235; CHECK-LABEL: select_i16_mimm: 236; CHECK: # %bb.0: 237; CHECK-NEXT: cmov.w.ne %s1, (49)1, %s0 238; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1 239; CHECK-NEXT: b.l.t (, %s10) 240 %3 = select i1 %0, i16 -32768, i16 %1 241 ret i16 %3 242} 243 244; Function Attrs: norecurse nounwind readnone 245define zeroext i16 @select_u16_mimm(i1 zeroext %0, i16 zeroext %1) { 246; CHECK-LABEL: select_u16_mimm: 247; CHECK: # %bb.0: 248; CHECK-NEXT: cmov.w.ne %s1, (49)0, %s0 249; CHECK-NEXT: adds.w.zx %s0, %s1, (0)1 250; CHECK-NEXT: b.l.t (, %s10) 251 %3 = select i1 %0, i16 32767, i16 %1 252 ret i16 %3 253} 254 255; Function Attrs: norecurse nounwind readnone 256define signext i32 @select_i32_mimm(i1 zeroext %0, i32 signext %1) { 257; CHECK-LABEL: select_i32_mimm: 258; CHECK: # %bb.0: 259; CHECK-NEXT: cmov.w.ne %s1, (48)0, %s0 260; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1 261; CHECK-NEXT: b.l.t (, %s10) 262 %3 = select i1 %0, i32 65535, i32 %1 263 ret i32 %3 264} 265 266; Function Attrs: norecurse nounwind readnone 267define zeroext i32 @select_u32_mimm(i1 zeroext %0, i32 zeroext %1) { 268; CHECK-LABEL: select_u32_mimm: 269; CHECK: # %bb.0: 270; CHECK-NEXT: cmov.w.ne %s1, (48)0, %s0 271; CHECK-NEXT: adds.w.zx %s0, %s1, (0)1 272; CHECK-NEXT: b.l.t (, %s10) 273 %3 = select i1 %0, i32 65535, i32 %1 274 ret i32 %3 275} 276 277; Function Attrs: norecurse nounwind readnone 278define i64 @select_i64_mimm(i1 zeroext %0, i64 %1) { 279; CHECK-LABEL: select_i64_mimm: 280; CHECK: # %bb.0: 281; CHECK-NEXT: cmov.w.ne %s1, (48)0, %s0 282; CHECK-NEXT: or %s0, 0, %s1 283; CHECK-NEXT: b.l.t (, %s10) 284 %3 = select i1 %0, i64 65535, i64 %1 285 ret i64 %3 286} 287 288; Function Attrs: norecurse nounwind readnone 289define i64 @select_u64_mimm(i1 zeroext %0, i64 %1) { 290; CHECK-LABEL: select_u64_mimm: 291; CHECK: # %bb.0: 292; CHECK-NEXT: cmov.w.ne %s1, (48)0, %s0 293; CHECK-NEXT: or %s0, 0, %s1 294; CHECK-NEXT: b.l.t (, %s10) 295 %3 = select i1 %0, i64 65535, i64 %1 296 ret i64 %3 297} 298 299; Function Attrs: norecurse nounwind readnone 300define i128 @select_i128_mimm(i1 zeroext %0, i128 %1) { 301; CHECK-LABEL: select_i128_mimm: 302; CHECK: # %bb.0: 303; CHECK-NEXT: cmov.w.ne %s1, (48)0, %s0 304; CHECK-NEXT: cmov.w.ne %s2, (0)1, %s0 305; CHECK-NEXT: or %s0, 0, %s1 306; CHECK-NEXT: or %s1, 0, %s2 307; CHECK-NEXT: b.l.t (, %s10) 308 %3 = select i1 %0, i128 65535, i128 %1 309 ret i128 %3 310} 311 312; Function Attrs: norecurse nounwind readnone 313define i128 @select_u128_mimm(i1 zeroext %0, i128 %1) { 314; CHECK-LABEL: select_u128_mimm: 315; CHECK: # %bb.0: 316; CHECK-NEXT: cmov.w.ne %s1, (48)0, %s0 317; CHECK-NEXT: cmov.w.ne %s2, (0)1, %s0 318; CHECK-NEXT: or %s0, 0, %s1 319; CHECK-NEXT: or %s1, 0, %s2 320; CHECK-NEXT: b.l.t (, %s10) 321 %3 = select i1 %0, i128 65535, i128 %1 322 ret i128 %3 323} 324 325; Function Attrs: norecurse nounwind readnone 326define float @select_float_mimm(i1 zeroext %0, float %1) { 327; CHECK-LABEL: select_float_mimm: 328; CHECK: # %bb.0: 329; CHECK-NEXT: cmov.w.ne %s1, (2)1, %s0 330; CHECK-NEXT: or %s0, 0, %s1 331; CHECK-NEXT: b.l.t (, %s10) 332 %3 = select i1 %0, float -2.000000e+00, float %1 333 ret float %3 334} 335 336; Function Attrs: norecurse nounwind readnone 337define double @select_double_mimm(i1 zeroext %0, double %1) { 338; CHECK-LABEL: select_double_mimm: 339; CHECK: # %bb.0: 340; CHECK-NEXT: cmov.w.ne %s1, (2)1, %s0 341; CHECK-NEXT: or %s0, 0, %s1 342; CHECK-NEXT: b.l.t (, %s10) 343 %3 = select fast i1 %0, double -2.000000e+00, double %1 344 ret double %3 345} 346 347; Function Attrs: norecurse nounwind readnone 348define fp128 @select_quad_mimm(i1 zeroext %0, fp128 %1) { 349; CHECK-LABEL: select_quad_mimm: 350; CHECK: # %bb.0: 351; CHECK-NEXT: lea %s1, .LCPI{{[0-9]+}}_0@lo 352; CHECK-NEXT: and %s1, %s1, (32)0 353; CHECK-NEXT: lea.sl %s1, .LCPI{{[0-9]+}}_0@hi(, %s1) 354; CHECK-NEXT: ld %s4, 8(, %s1) 355; CHECK-NEXT: ld %s5, (, %s1) 356; CHECK-NEXT: cmov.w.ne %s2, %s4, %s0 357; CHECK-NEXT: cmov.w.ne %s3, %s5, %s0 358; CHECK-NEXT: or %s0, 0, %s2 359; CHECK-NEXT: or %s1, 0, %s3 360; CHECK-NEXT: b.l.t (, %s10) 361 %3 = select fast i1 %0, fp128 0xL0000000000000000C000000000000000, fp128 %1 362 ret fp128 %3 363} 364 365; Function Attrs: norecurse nounwind readnone 366define zeroext i1 @select_mimm_i1(i1 zeroext %0, i1 zeroext %1) { 367; CHECK-LABEL: select_mimm_i1: 368; CHECK: # %bb.0: 369; CHECK-NEXT: xor %s0, 1, %s0 370; CHECK-NEXT: or %s0, %s0, %s1 371; CHECK-NEXT: b.l.t (, %s10) 372 %3 = xor i1 %0, true 373 %4 = or i1 %3, %1 374 ret i1 %4 375} 376 377; Function Attrs: norecurse nounwind readnone 378define signext i8 @select_mimm_i8(i1 zeroext %0, i8 signext %1) { 379; CHECK-LABEL: select_mimm_i8: 380; CHECK: # %bb.0: 381; CHECK-NEXT: cmov.w.eq %s1, (57)1, %s0 382; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1 383; CHECK-NEXT: b.l.t (, %s10) 384 %3 = select i1 %0, i8 %1, i8 -128 385 ret i8 %3 386} 387 388; Function Attrs: norecurse nounwind readnone 389define zeroext i8 @select_mimm_u8(i1 zeroext %0, i8 zeroext %1) { 390; CHECK-LABEL: select_mimm_u8: 391; CHECK: # %bb.0: 392; CHECK-NEXT: cmov.w.eq %s1, (57)0, %s0 393; CHECK-NEXT: adds.w.zx %s0, %s1, (0)1 394; CHECK-NEXT: b.l.t (, %s10) 395 %3 = select i1 %0, i8 %1, i8 127 396 ret i8 %3 397} 398 399; Function Attrs: norecurse nounwind readnone 400define signext i16 @select_mimm_i16(i1 zeroext %0, i16 signext %1) { 401; CHECK-LABEL: select_mimm_i16: 402; CHECK: # %bb.0: 403; CHECK-NEXT: cmov.w.eq %s1, (49)1, %s0 404; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1 405; CHECK-NEXT: b.l.t (, %s10) 406 %3 = select i1 %0, i16 %1, i16 -32768 407 ret i16 %3 408} 409 410; Function Attrs: norecurse nounwind readnone 411define zeroext i16 @select_mimm_u16(i1 zeroext %0, i16 zeroext %1) { 412; CHECK-LABEL: select_mimm_u16: 413; CHECK: # %bb.0: 414; CHECK-NEXT: cmov.w.eq %s1, (49)0, %s0 415; CHECK-NEXT: adds.w.zx %s0, %s1, (0)1 416; CHECK-NEXT: b.l.t (, %s10) 417 %3 = select i1 %0, i16 %1, i16 32767 418 ret i16 %3 419} 420 421; Function Attrs: norecurse nounwind readnone 422define signext i32 @select_mimm_i32(i1 zeroext %0, i32 signext %1) { 423; CHECK-LABEL: select_mimm_i32: 424; CHECK: # %bb.0: 425; CHECK-NEXT: cmov.w.eq %s1, (48)0, %s0 426; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1 427; CHECK-NEXT: b.l.t (, %s10) 428 %3 = select i1 %0, i32 %1, i32 65535 429 ret i32 %3 430} 431 432; Function Attrs: norecurse nounwind readnone 433define zeroext i32 @select_mimm_u32(i1 zeroext %0, i32 zeroext %1) { 434; CHECK-LABEL: select_mimm_u32: 435; CHECK: # %bb.0: 436; CHECK-NEXT: cmov.w.eq %s1, (48)0, %s0 437; CHECK-NEXT: adds.w.zx %s0, %s1, (0)1 438; CHECK-NEXT: b.l.t (, %s10) 439 %3 = select i1 %0, i32 %1, i32 65535 440 ret i32 %3 441} 442 443; Function Attrs: norecurse nounwind readnone 444define i64 @select_mimm_i64(i1 zeroext %0, i64 %1) { 445; CHECK-LABEL: select_mimm_i64: 446; CHECK: # %bb.0: 447; CHECK-NEXT: cmov.w.eq %s1, (48)0, %s0 448; CHECK-NEXT: or %s0, 0, %s1 449; CHECK-NEXT: b.l.t (, %s10) 450 %3 = select i1 %0, i64 %1, i64 65535 451 ret i64 %3 452} 453 454; Function Attrs: norecurse nounwind readnone 455define i64 @select_mimm_u64(i1 zeroext %0, i64 %1) { 456; CHECK-LABEL: select_mimm_u64: 457; CHECK: # %bb.0: 458; CHECK-NEXT: cmov.w.eq %s1, (48)0, %s0 459; CHECK-NEXT: or %s0, 0, %s1 460; CHECK-NEXT: b.l.t (, %s10) 461 %3 = select i1 %0, i64 %1, i64 65535 462 ret i64 %3 463} 464 465; Function Attrs: norecurse nounwind readnone 466define i128 @select_mimm_i128(i1 zeroext %0, i128 %1) { 467; CHECK-LABEL: select_mimm_i128: 468; CHECK: # %bb.0: 469; CHECK-NEXT: cmov.w.eq %s1, (48)0, %s0 470; CHECK-NEXT: cmov.w.eq %s2, (0)1, %s0 471; CHECK-NEXT: or %s0, 0, %s1 472; CHECK-NEXT: or %s1, 0, %s2 473; CHECK-NEXT: b.l.t (, %s10) 474 %3 = select i1 %0, i128 %1, i128 65535 475 ret i128 %3 476} 477 478; Function Attrs: norecurse nounwind readnone 479define i128 @select_mimm_u128(i1 zeroext %0, i128 %1) { 480; CHECK-LABEL: select_mimm_u128: 481; CHECK: # %bb.0: 482; CHECK-NEXT: cmov.w.eq %s1, (48)0, %s0 483; CHECK-NEXT: cmov.w.eq %s2, (0)1, %s0 484; CHECK-NEXT: or %s0, 0, %s1 485; CHECK-NEXT: or %s1, 0, %s2 486; CHECK-NEXT: b.l.t (, %s10) 487 %3 = select i1 %0, i128 %1, i128 65535 488 ret i128 %3 489} 490 491; Function Attrs: norecurse nounwind readnone 492define float @select_mimm_float(i1 zeroext %0, float %1) { 493; CHECK-LABEL: select_mimm_float: 494; CHECK: # %bb.0: 495; CHECK-NEXT: cmov.w.eq %s1, (2)1, %s0 496; CHECK-NEXT: or %s0, 0, %s1 497; CHECK-NEXT: b.l.t (, %s10) 498 %3 = select i1 %0, float %1, float -2.000000e+00 499 ret float %3 500} 501 502; Function Attrs: norecurse nounwind readnone 503define double @select_mimm_double(i1 zeroext %0, double %1) { 504; CHECK-LABEL: select_mimm_double: 505; CHECK: # %bb.0: 506; CHECK-NEXT: cmov.w.eq %s1, (2)1, %s0 507; CHECK-NEXT: or %s0, 0, %s1 508; CHECK-NEXT: b.l.t (, %s10) 509 %3 = select fast i1 %0, double %1, double -2.000000e+00 510 ret double %3 511} 512 513; Function Attrs: norecurse nounwind readnone 514define fp128 @select_mimm_quad(i1 zeroext %0, fp128 %1) { 515; CHECK-LABEL: select_mimm_quad: 516; CHECK: # %bb.0: 517; CHECK-NEXT: lea %s1, .LCPI{{[0-9]+}}_0@lo 518; CHECK-NEXT: and %s1, %s1, (32)0 519; CHECK-NEXT: lea.sl %s1, .LCPI{{[0-9]+}}_0@hi(, %s1) 520; CHECK-NEXT: ld %s4, 8(, %s1) 521; CHECK-NEXT: ld %s5, (, %s1) 522; CHECK-NEXT: cmov.w.ne %s4, %s2, %s0 523; CHECK-NEXT: cmov.w.ne %s5, %s3, %s0 524; CHECK-NEXT: or %s0, 0, %s4 525; CHECK-NEXT: or %s1, 0, %s5 526; CHECK-NEXT: b.l.t (, %s10) 527 %3 = select fast i1 %0, fp128 %1, fp128 0xL0000000000000000C000000000000000 528 ret fp128 %3 529} 530