1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s 2 3define signext i32 @i() { 4; CHECK-LABEL: i: 5; CHECK: # %bb.0: 6; CHECK-NEXT: lea %s0, -2147483648 7; CHECK-NEXT: b.l.t (, %s10) 8 ret i32 -2147483648 9} 10 11define zeroext i32 @ui() { 12; CHECK-LABEL: ui: 13; CHECK: # %bb.0: 14; CHECK-NEXT: lea %s0, -2147483648 15; CHECK-NEXT: and %s0, %s0, (32)0 16; CHECK-NEXT: b.l.t (, %s10) 17 ret i32 -2147483648 18} 19 20define i64 @ll() { 21; CHECK-LABEL: ll: 22; CHECK: # %bb.0: 23; CHECK-NEXT: lea %s0, -2147483648 24; CHECK-NEXT: b.l.t (, %s10) 25 ret i64 -2147483648 26} 27 28define i64 @ull() { 29; CHECK-LABEL: ull: 30; CHECK: # %bb.0: 31; CHECK-NEXT: lea %s0, -2147483648 32; CHECK-NEXT: and %s0, %s0, (32)0 33; CHECK-NEXT: b.l.t (, %s10) 34 ret i64 2147483648 35} 36 37define signext i8 @d2c(double %x) { 38; CHECK-LABEL: d2c: 39; CHECK: # %bb.0: 40; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 41; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 42; CHECK-NEXT: b.l.t (, %s10) 43 %r = fptosi double %x to i8 44 ret i8 %r 45} 46 47define zeroext i8 @d2uc(double %x) { 48; CHECK-LABEL: d2uc: 49; CHECK: # %bb.0: 50; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 51; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1 52; CHECK-NEXT: b.l.t (, %s10) 53 %r = fptoui double %x to i8 54 ret i8 %r 55} 56 57define signext i16 @d2s(double %x) { 58; CHECK-LABEL: d2s: 59; CHECK: # %bb.0: 60; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 61; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 62; CHECK-NEXT: b.l.t (, %s10) 63 %r = fptosi double %x to i16 64 ret i16 %r 65} 66 67define zeroext i16 @d2us(double %x) { 68; CHECK-LABEL: d2us: 69; CHECK: # %bb.0: 70; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 71; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1 72; CHECK-NEXT: b.l.t (, %s10) 73 %r = fptoui double %x to i16 74 ret i16 %r 75} 76 77define signext i32 @d2i(double %x) { 78; CHECK-LABEL: d2i: 79; CHECK: # %bb.0: 80; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 81; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 82; CHECK-NEXT: b.l.t (, %s10) 83 %r = fptosi double %x to i32 84 ret i32 %r 85} 86 87define zeroext i32 @d2ui(double %x) { 88; CHECK-LABEL: d2ui: 89; CHECK: # %bb.0: 90; CHECK-NEXT: cvt.l.d.rz %s0, %s0 91; CHECK-NEXT: and %s0, %s0, (32)0 92; CHECK-NEXT: b.l.t (, %s10) 93 %r = fptoui double %x to i32 94 ret i32 %r 95} 96 97define i64 @d2ll(double %x) { 98; CHECK-LABEL: d2ll: 99; CHECK: # %bb.0: 100; CHECK-NEXT: cvt.l.d.rz %s0, %s0 101; CHECK-NEXT: b.l.t (, %s10) 102 %r = fptosi double %x to i64 103 ret i64 %r 104} 105 106define i64 @d2ull(double %x) { 107; CHECK-LABEL: d2ull: 108; CHECK: # %bb.0: 109; CHECK-NEXT: lea.sl %s1, 1138753536 110; CHECK-NEXT: fcmp.d %s2, %s0, %s1 111; CHECK-NEXT: fsub.d %s1, %s0, %s1 112; CHECK-NEXT: cvt.l.d.rz %s1, %s1 113; CHECK-NEXT: xor %s1, %s1, (1)1 114; CHECK-NEXT: cvt.l.d.rz %s0, %s0 115; CHECK-NEXT: cmov.d.lt %s1, %s0, %s2 116; CHECK-NEXT: or %s0, 0, %s1 117; CHECK-NEXT: b.l.t (, %s10) 118 %r = fptoui double %x to i64 119 ret i64 %r 120} 121 122define float @d2f(double %x) { 123; CHECK-LABEL: d2f: 124; CHECK: # %bb.0: 125; CHECK-NEXT: cvt.s.d %s0, %s0 126; CHECK-NEXT: b.l.t (, %s10) 127 %r = fptrunc double %x to float 128 ret float %r 129} 130 131define double @d2d(double returned %0) { 132; CHECK-LABEL: d2d: 133; CHECK: # %bb.0: 134; CHECK-NEXT: b.l.t (, %s10) 135 ret double %0 136} 137 138define fp128 @d2q(double) { 139; CHECK-LABEL: d2q: 140; CHECK: # %bb.0: 141; CHECK-NEXT: cvt.q.d %s0, %s0 142; CHECK-NEXT: b.l.t (, %s10) 143 %2 = fpext double %0 to fp128 144 ret fp128 %2 145} 146 147define signext i8 @q2c(fp128) { 148; CHECK-LABEL: q2c: 149; CHECK: # %bb.0: 150; CHECK-NEXT: cvt.d.q %s0, %s0 151; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 152; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 153; CHECK-NEXT: b.l.t (, %s10) 154 %2 = fptosi fp128 %0 to i8 155 ret i8 %2 156} 157 158define zeroext i8 @q2uc(fp128) { 159; CHECK-LABEL: q2uc: 160; CHECK: # %bb.0: 161; CHECK-NEXT: cvt.d.q %s0, %s0 162; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 163; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1 164; CHECK-NEXT: b.l.t (, %s10) 165 %2 = fptoui fp128 %0 to i8 166 ret i8 %2 167} 168 169define signext i16 @q2s(fp128) { 170; CHECK-LABEL: q2s: 171; CHECK: # %bb.0: 172; CHECK-NEXT: cvt.d.q %s0, %s0 173; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 174; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 175; CHECK-NEXT: b.l.t (, %s10) 176 %2 = fptosi fp128 %0 to i16 177 ret i16 %2 178} 179 180define zeroext i16 @q2us(fp128) { 181; CHECK-LABEL: q2us: 182; CHECK: # %bb.0: 183; CHECK-NEXT: cvt.d.q %s0, %s0 184; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 185; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1 186; CHECK-NEXT: b.l.t (, %s10) 187 %2 = fptoui fp128 %0 to i16 188 ret i16 %2 189} 190 191define signext i32 @q2i(fp128) { 192; CHECK-LABEL: q2i: 193; CHECK: # %bb.0: 194; CHECK-NEXT: cvt.d.q %s0, %s0 195; CHECK-NEXT: cvt.w.d.sx.rz %s0, %s0 196; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 197; CHECK-NEXT: b.l.t (, %s10) 198 %2 = fptosi fp128 %0 to i32 199 ret i32 %2 200} 201 202define zeroext i32 @q2ui(fp128) { 203; CHECK-LABEL: q2ui: 204; CHECK: # %bb.0: 205; CHECK-NEXT: cvt.d.q %s0, %s0 206; CHECK-NEXT: cvt.l.d.rz %s0, %s0 207; CHECK-NEXT: and %s0, %s0, (32)0 208; CHECK-NEXT: b.l.t (, %s10) 209 %2 = fptoui fp128 %0 to i32 210 ret i32 %2 211} 212 213define i64 @q2ll(fp128) { 214; CHECK-LABEL: q2ll: 215; CHECK: # %bb.0: 216; CHECK-NEXT: cvt.d.q %s0, %s0 217; CHECK-NEXT: cvt.l.d.rz %s0, %s0 218; CHECK-NEXT: b.l.t (, %s10) 219 %2 = fptosi fp128 %0 to i64 220 ret i64 %2 221} 222 223define i64 @q2ull(fp128) { 224; CHECK-LABEL: q2ull: 225; CHECK: # %bb.0: 226; CHECK-NEXT: lea %s2, .LCPI{{[0-9]+}}_0@lo 227; CHECK-NEXT: and %s2, %s2, (32)0 228; CHECK-NEXT: lea.sl %s2, .LCPI{{[0-9]+}}_0@hi(, %s2) 229; CHECK-NEXT: ld %s4, 8(, %s2) 230; CHECK-NEXT: ld %s5, (, %s2) 231; CHECK-NEXT: fcmp.q %s3, %s0, %s4 232; CHECK-NEXT: fsub.q %s4, %s0, %s4 233; CHECK-NEXT: cvt.d.q %s2, %s4 234; CHECK-NEXT: cvt.l.d.rz %s2, %s2 235; CHECK-NEXT: xor %s2, %s2, (1)1 236; CHECK-NEXT: cvt.d.q %s0, %s0 237; CHECK-NEXT: cvt.l.d.rz %s0, %s0 238; CHECK-NEXT: cmov.d.lt %s2, %s0, %s3 239; CHECK-NEXT: or %s0, 0, %s2 240; CHECK-NEXT: b.l.t (, %s10) 241 %2 = fptoui fp128 %0 to i64 242 ret i64 %2 243} 244 245define float @q2f(fp128) { 246; CHECK-LABEL: q2f: 247; CHECK: # %bb.0: 248; CHECK-NEXT: cvt.s.q %s0, %s0 249; CHECK-NEXT: b.l.t (, %s10) 250 %2 = fptrunc fp128 %0 to float 251 ret float %2 252} 253 254define double @q2d(fp128) { 255; CHECK-LABEL: q2d: 256; CHECK: # %bb.0: 257; CHECK-NEXT: cvt.d.q %s0, %s0 258; CHECK-NEXT: b.l.t (, %s10) 259 %2 = fptrunc fp128 %0 to double 260 ret double %2 261} 262 263define fp128 @q2q(fp128 returned) { 264; CHECK-LABEL: q2q: 265; CHECK: # %bb.0: 266; CHECK-NEXT: b.l.t (, %s10) 267 ret fp128 %0 268} 269 270define signext i8 @f2c(float %x) { 271; CHECK-LABEL: f2c: 272; CHECK: # %bb.0: 273; CHECK-NEXT: cvt.w.s.sx.rz %s0, %s0 274; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 275; CHECK-NEXT: b.l.t (, %s10) 276 %r = fptosi float %x to i8 277 ret i8 %r 278} 279 280define zeroext i8 @f2uc(float %x) { 281; CHECK-LABEL: f2uc: 282; CHECK: # %bb.0: 283; CHECK-NEXT: cvt.w.s.sx.rz %s0, %s0 284; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1 285; CHECK-NEXT: b.l.t (, %s10) 286 %r = fptoui float %x to i8 287 ret i8 %r 288} 289 290define signext i16 @f2s(float %x) { 291; CHECK-LABEL: f2s: 292; CHECK: # %bb.0: 293; CHECK-NEXT: cvt.w.s.sx.rz %s0, %s0 294; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 295; CHECK-NEXT: b.l.t (, %s10) 296 %r = fptosi float %x to i16 297 ret i16 %r 298} 299 300define zeroext i16 @f2us(float %x) { 301; CHECK-LABEL: f2us: 302; CHECK: # %bb.0: 303; CHECK-NEXT: cvt.w.s.sx.rz %s0, %s0 304; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1 305; CHECK-NEXT: b.l.t (, %s10) 306 %r = fptoui float %x to i16 307 ret i16 %r 308} 309 310define signext i32 @f2i(float %x) { 311; CHECK-LABEL: f2i: 312; CHECK: # %bb.0: 313; CHECK-NEXT: cvt.w.s.sx.rz %s0, %s0 314; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 315; CHECK-NEXT: b.l.t (, %s10) 316 %r = fptosi float %x to i32 317 ret i32 %r 318} 319 320define zeroext i32 @f2ui(float %x) { 321; CHECK-LABEL: f2ui: 322; CHECK: # %bb.0: 323; CHECK-NEXT: cvt.d.s %s0, %s0 324; CHECK-NEXT: cvt.l.d.rz %s0, %s0 325; CHECK-NEXT: and %s0, %s0, (32)0 326; CHECK-NEXT: b.l.t (, %s10) 327 %r = fptoui float %x to i32 328 ret i32 %r 329} 330 331define i64 @f2ll(float %x) { 332; CHECK-LABEL: f2ll: 333; CHECK: # %bb.0: 334; CHECK-NEXT: cvt.d.s %s0, %s0 335; CHECK-NEXT: cvt.l.d.rz %s0, %s0 336; CHECK-NEXT: b.l.t (, %s10) 337 %r = fptosi float %x to i64 338 ret i64 %r 339} 340 341define i64 @f2ull(float %x) { 342; CHECK-LABEL: f2ull: 343; CHECK: # %bb.0: 344; CHECK-NEXT: lea.sl %s1, 1593835520 345; CHECK-NEXT: fcmp.s %s2, %s0, %s1 346; CHECK-NEXT: fsub.s %s1, %s0, %s1 347; CHECK-NEXT: cvt.d.s %s1, %s1 348; CHECK-NEXT: cvt.l.d.rz %s1, %s1 349; CHECK-NEXT: xor %s1, %s1, (1)1 350; CHECK-NEXT: cvt.d.s %s0, %s0 351; CHECK-NEXT: cvt.l.d.rz %s0, %s0 352; CHECK-NEXT: cmov.s.lt %s1, %s0, %s2 353; CHECK-NEXT: or %s0, 0, %s1 354; CHECK-NEXT: b.l.t (, %s10) 355 %r = fptoui float %x to i64 356 ret i64 %r 357} 358 359define float @f2f(float returned %0) { 360; CHECK-LABEL: f2f: 361; CHECK: # %bb.0: 362; CHECK-NEXT: b.l.t (, %s10) 363 ret float %0 364} 365 366define double @f2d(float %x) { 367; CHECK-LABEL: f2d: 368; CHECK: # %bb.0: 369; CHECK-NEXT: cvt.d.s %s0, %s0 370; CHECK-NEXT: b.l.t (, %s10) 371 %r = fpext float %x to double 372 ret double %r 373} 374 375define fp128 @f2q(float) { 376; CHECK-LABEL: f2q: 377; CHECK: # %bb.0: 378; CHECK-NEXT: cvt.q.s %s0, %s0 379; CHECK-NEXT: b.l.t (, %s10) 380 %2 = fpext float %0 to fp128 381 ret fp128 %2 382} 383 384define signext i8 @ll2c(i64 %0) { 385; CHECK-LABEL: ll2c: 386; CHECK: # %bb.0: 387; CHECK-NEXT: sll %s0, %s0, 56 388; CHECK-NEXT: sra.l %s0, %s0, 56 389; CHECK-NEXT: b.l.t (, %s10) 390 %2 = trunc i64 %0 to i8 391 ret i8 %2 392} 393 394define zeroext i8 @ll2uc(i64 %0) { 395; CHECK-LABEL: ll2uc: 396; CHECK: # %bb.0: 397; CHECK-NEXT: and %s0, %s0, (56)0 398; CHECK-NEXT: b.l.t (, %s10) 399 %2 = trunc i64 %0 to i8 400 ret i8 %2 401} 402 403define signext i16 @ll2s(i64 %0) { 404; CHECK-LABEL: ll2s: 405; CHECK: # %bb.0: 406; CHECK-NEXT: sll %s0, %s0, 48 407; CHECK-NEXT: sra.l %s0, %s0, 48 408; CHECK-NEXT: b.l.t (, %s10) 409 %2 = trunc i64 %0 to i16 410 ret i16 %2 411} 412 413define zeroext i16 @ll2us(i64 %0) { 414; CHECK-LABEL: ll2us: 415; CHECK: # %bb.0: 416; CHECK-NEXT: and %s0, %s0, (48)0 417; CHECK-NEXT: b.l.t (, %s10) 418 %2 = trunc i64 %0 to i16 419 ret i16 %2 420} 421 422define signext i32 @ll2i(i64 %0) { 423; CHECK-LABEL: ll2i: 424; CHECK: # %bb.0: 425; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 426; CHECK-NEXT: b.l.t (, %s10) 427 %2 = trunc i64 %0 to i32 428 ret i32 %2 429} 430 431define zeroext i32 @ll2ui(i64 %0) { 432; CHECK-LABEL: ll2ui: 433; CHECK: # %bb.0: 434; CHECK-NEXT: and %s0, %s0, (32)0 435; CHECK-NEXT: b.l.t (, %s10) 436 %2 = trunc i64 %0 to i32 437 ret i32 %2 438} 439 440define i64 @ll2ll(i64 returned %0) { 441; CHECK-LABEL: ll2ll: 442; CHECK: # %bb.0: 443; CHECK-NEXT: b.l.t (, %s10) 444 ret i64 %0 445} 446 447define i64 @ll2ull(i64 returned %0) { 448; CHECK-LABEL: ll2ull: 449; CHECK: # %bb.0: 450; CHECK-NEXT: b.l.t (, %s10) 451 ret i64 %0 452} 453 454define float @ll2f(i64 %x) { 455; CHECK-LABEL: ll2f: 456; CHECK: # %bb.0: 457; CHECK-NEXT: cvt.d.l %s0, %s0 458; CHECK-NEXT: cvt.s.d %s0, %s0 459; CHECK-NEXT: b.l.t (, %s10) 460 %r = sitofp i64 %x to float 461 ret float %r 462} 463 464define double @ll2d(i64 %x) { 465; CHECK-LABEL: ll2d: 466; CHECK: # %bb.0: 467; CHECK-NEXT: cvt.d.l %s0, %s0 468; CHECK-NEXT: b.l.t (, %s10) 469 %r = sitofp i64 %x to double 470 ret double %r 471} 472 473define fp128 @ll2q(i64) { 474; CHECK-LABEL: ll2q: 475; CHECK: # %bb.0: 476; CHECK-NEXT: cvt.d.l %s0, %s0 477; CHECK-NEXT: cvt.q.d %s0, %s0 478; CHECK-NEXT: b.l.t (, %s10) 479 %2 = sitofp i64 %0 to fp128 480 ret fp128 %2 481} 482 483define signext i8 @ull2c(i64 %0) { 484; CHECK-LABEL: ull2c: 485; CHECK: # %bb.0: 486; CHECK-NEXT: sll %s0, %s0, 56 487; CHECK-NEXT: sra.l %s0, %s0, 56 488; CHECK-NEXT: b.l.t (, %s10) 489 %2 = trunc i64 %0 to i8 490 ret i8 %2 491} 492 493define zeroext i8 @ull2uc(i64 %0) { 494; CHECK-LABEL: ull2uc: 495; CHECK: # %bb.0: 496; CHECK-NEXT: and %s0, %s0, (56)0 497; CHECK-NEXT: b.l.t (, %s10) 498 %2 = trunc i64 %0 to i8 499 ret i8 %2 500} 501 502define signext i16 @ull2s(i64 %0) { 503; CHECK-LABEL: ull2s: 504; CHECK: # %bb.0: 505; CHECK-NEXT: sll %s0, %s0, 48 506; CHECK-NEXT: sra.l %s0, %s0, 48 507; CHECK-NEXT: b.l.t (, %s10) 508 %2 = trunc i64 %0 to i16 509 ret i16 %2 510} 511 512define zeroext i16 @ull2us(i64 %0) { 513; CHECK-LABEL: ull2us: 514; CHECK: # %bb.0: 515; CHECK-NEXT: and %s0, %s0, (48)0 516; CHECK-NEXT: b.l.t (, %s10) 517 %2 = trunc i64 %0 to i16 518 ret i16 %2 519} 520 521define signext i32 @ull2i(i64 %0) { 522; CHECK-LABEL: ull2i: 523; CHECK: # %bb.0: 524; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 525; CHECK-NEXT: b.l.t (, %s10) 526 %2 = trunc i64 %0 to i32 527 ret i32 %2 528} 529 530define zeroext i32 @ull2ui(i64 %0) { 531; CHECK-LABEL: ull2ui: 532; CHECK: # %bb.0: 533; CHECK-NEXT: and %s0, %s0, (32)0 534; CHECK-NEXT: b.l.t (, %s10) 535 %2 = trunc i64 %0 to i32 536 ret i32 %2 537} 538 539define i64 @ull2ll(i64 returned %0) { 540; CHECK-LABEL: ull2ll: 541; CHECK: # %bb.0: 542; CHECK-NEXT: b.l.t (, %s10) 543 ret i64 %0 544} 545 546define i64 @ull2ull(i64 returned %0) { 547; CHECK-LABEL: ull2ull: 548; CHECK: # %bb.0: 549; CHECK-NEXT: b.l.t (, %s10) 550 ret i64 %0 551} 552 553define float @ull2f(i64 %x) { 554; CHECK-LABEL: ull2f: 555; CHECK: # %bb.0: 556; CHECK-NEXT: cvt.d.l %s1, %s0 557; CHECK-NEXT: cvt.s.d %s1, %s1 558; CHECK-NEXT: srl %s2, %s0, 1 559; CHECK-NEXT: and %s3, 1, %s0 560; CHECK-NEXT: or %s2, %s3, %s2 561; CHECK-NEXT: cvt.d.l %s2, %s2 562; CHECK-NEXT: cvt.s.d %s2, %s2 563; CHECK-NEXT: fadd.s %s2, %s2, %s2 564; CHECK-NEXT: cmov.l.lt %s1, %s2, %s0 565; CHECK-NEXT: or %s0, 0, %s1 566; CHECK-NEXT: b.l.t (, %s10) 567 %r = uitofp i64 %x to float 568 ret float %r 569} 570 571define float @ull2f_nneg(i64 %x) { 572; CHECK-LABEL: ull2f_nneg: 573; CHECK: # %bb.0: 574; CHECK-NEXT: cvt.d.l %s0, %s0 575; CHECK-NEXT: cvt.s.d %s0, %s0 576; CHECK-NEXT: b.l.t (, %s10) 577 %r = uitofp nneg i64 %x to float 578 ret float %r 579} 580 581define float @ull2f_strict(i32 %x) { 582; CHECK-LABEL: ull2f_strict: 583; CHECK: # %bb.0: 584; CHECK-NEXT: adds.l %s11, -16, %s11 585; CHECK-NEXT: brge.l.t %s11, %s8, .LBB58_2 586; CHECK-NEXT: # %bb.1: 587; CHECK-NEXT: ld %s61, 24(, %s14) 588; CHECK-NEXT: or %s62, 0, %s0 589; CHECK-NEXT: lea %s63, 315 590; CHECK-NEXT: shm.l %s63, (%s61) 591; CHECK-NEXT: shm.l %s8, 8(%s61) 592; CHECK-NEXT: shm.l %s11, 16(%s61) 593; CHECK-NEXT: monc 594; CHECK-NEXT: or %s0, 0, %s62 595; CHECK-NEXT: .LBB58_2: 596; CHECK-NEXT: lea %s1, 1127219200 597; CHECK-NEXT: stl %s1, 12(, %s11) 598; CHECK-NEXT: stl %s0, 8(, %s11) 599; CHECK-NEXT: ld %s0, 8(, %s11) 600; CHECK-NEXT: lea.sl %s1, 1127219200 601; CHECK-NEXT: fsub.d %s0, %s0, %s1 602; CHECK-NEXT: cvt.s.d %s0, %s0 603; CHECK-NEXT: adds.l %s11, 16, %s11 604; CHECK-NEXT: b.l.t (, %s10) 605 %val = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") 606 ret float %val 607} 608 609define double @ull2d(i64 %x) { 610; CHECK-LABEL: ull2d: 611; CHECK: # %bb.0: 612; CHECK-NEXT: srl %s1, %s0, 32 613; CHECK-NEXT: lea.sl %s2, 1160773632 614; CHECK-NEXT: or %s1, %s1, %s2 615; CHECK-NEXT: lea %s2, 1048576 616; CHECK-NEXT: lea.sl %s2, -986710016(, %s2) 617; CHECK-NEXT: fadd.d %s1, %s1, %s2 618; CHECK-NEXT: and %s0, %s0, (32)0 619; CHECK-NEXT: lea.sl %s2, 1127219200 620; CHECK-NEXT: or %s0, %s0, %s2 621; CHECK-NEXT: fadd.d %s0, %s0, %s1 622; CHECK-NEXT: b.l.t (, %s10) 623 %r = uitofp i64 %x to double 624 ret double %r 625} 626 627define fp128 @ull2q(i64) { 628; CHECK-LABEL: ull2q: 629; CHECK: # %bb.0: 630; CHECK-NEXT: srl %s1, %s0, 61 631; CHECK-NEXT: and %s1, 4, %s1 632; CHECK-NEXT: lea %s2, .LCPI{{[0-9]+}}_0@lo 633; CHECK-NEXT: and %s2, %s2, (32)0 634; CHECK-NEXT: lea.sl %s2, .LCPI{{[0-9]+}}_0@hi(, %s2) 635; CHECK-NEXT: ldu %s1, (%s1, %s2) 636; CHECK-NEXT: cvt.q.s %s2, %s1 637; CHECK-NEXT: cvt.d.l %s0, %s0 638; CHECK-NEXT: cvt.q.d %s0, %s0 639; CHECK-NEXT: fadd.q %s0, %s0, %s2 640; CHECK-NEXT: b.l.t (, %s10) 641 %2 = uitofp i64 %0 to fp128 642 ret fp128 %2 643} 644 645define signext i8 @i2c(i32 signext %0) { 646; CHECK-LABEL: i2c: 647; CHECK: # %bb.0: 648; CHECK-NEXT: sll %s0, %s0, 56 649; CHECK-NEXT: sra.l %s0, %s0, 56 650; CHECK-NEXT: b.l.t (, %s10) 651 %2 = trunc i32 %0 to i8 652 ret i8 %2 653} 654 655define zeroext i8 @i2uc(i32 signext %0) { 656; CHECK-LABEL: i2uc: 657; CHECK: # %bb.0: 658; CHECK-NEXT: and %s0, %s0, (56)0 659; CHECK-NEXT: b.l.t (, %s10) 660 %2 = trunc i32 %0 to i8 661 ret i8 %2 662} 663 664define signext i16 @i2s(i32 signext %0) { 665; CHECK-LABEL: i2s: 666; CHECK: # %bb.0: 667; CHECK-NEXT: sll %s0, %s0, 48 668; CHECK-NEXT: sra.l %s0, %s0, 48 669; CHECK-NEXT: b.l.t (, %s10) 670 %2 = trunc i32 %0 to i16 671 ret i16 %2 672} 673 674define zeroext i16 @i2us(i32 signext %0) { 675; CHECK-LABEL: i2us: 676; CHECK: # %bb.0: 677; CHECK-NEXT: and %s0, %s0, (48)0 678; CHECK-NEXT: b.l.t (, %s10) 679 %2 = trunc i32 %0 to i16 680 ret i16 %2 681} 682 683define signext i32 @i2i(i32 signext returned %0) { 684; CHECK-LABEL: i2i: 685; CHECK: # %bb.0: 686; CHECK-NEXT: b.l.t (, %s10) 687 ret i32 %0 688} 689 690define zeroext i32 @i2ui(i32 signext returned %0) { 691; CHECK-LABEL: i2ui: 692; CHECK: # %bb.0: 693; CHECK-NEXT: and %s0, %s0, (32)0 694; CHECK-NEXT: b.l.t (, %s10) 695 ret i32 %0 696} 697 698define i64 @i2ll(i32 signext %0) { 699; CHECK-LABEL: i2ll: 700; CHECK: # %bb.0: 701; CHECK-NEXT: b.l.t (, %s10) 702 %2 = sext i32 %0 to i64 703 ret i64 %2 704} 705 706define i64 @i2ull(i32 signext %0) { 707; CHECK-LABEL: i2ull: 708; CHECK: # %bb.0: 709; CHECK-NEXT: b.l.t (, %s10) 710 %2 = sext i32 %0 to i64 711 ret i64 %2 712} 713 714define float @i2f(i32 signext %x) { 715; CHECK-LABEL: i2f: 716; CHECK: # %bb.0: 717; CHECK-NEXT: cvt.s.w %s0, %s0 718; CHECK-NEXT: b.l.t (, %s10) 719 %r = sitofp i32 %x to float 720 ret float %r 721} 722 723define double @i2d(i32 signext %x) { 724; CHECK-LABEL: i2d: 725; CHECK: # %bb.0: 726; CHECK-NEXT: cvt.d.w %s0, %s0 727; CHECK-NEXT: b.l.t (, %s10) 728 %r = sitofp i32 %x to double 729 ret double %r 730} 731 732define fp128 @i2q(i32 signext %x) { 733; CHECK-LABEL: i2q: 734; CHECK: # %bb.0: 735; CHECK-NEXT: cvt.d.w %s0, %s0 736; CHECK-NEXT: cvt.q.d %s0, %s0 737; CHECK-NEXT: b.l.t (, %s10) 738 %r = sitofp i32 %x to fp128 739 ret fp128 %r 740} 741 742define signext i8 @ui2c(i32 zeroext %0) { 743; CHECK-LABEL: ui2c: 744; CHECK: # %bb.0: 745; CHECK-NEXT: sll %s0, %s0, 56 746; CHECK-NEXT: sra.l %s0, %s0, 56 747; CHECK-NEXT: b.l.t (, %s10) 748 %2 = trunc i32 %0 to i8 749 ret i8 %2 750} 751 752define zeroext i8 @ui2uc(i32 zeroext %0) { 753; CHECK-LABEL: ui2uc: 754; CHECK: # %bb.0: 755; CHECK-NEXT: and %s0, %s0, (56)0 756; CHECK-NEXT: b.l.t (, %s10) 757 %2 = trunc i32 %0 to i8 758 ret i8 %2 759} 760 761define signext i16 @ui2s(i32 zeroext %0) { 762; CHECK-LABEL: ui2s: 763; CHECK: # %bb.0: 764; CHECK-NEXT: sll %s0, %s0, 48 765; CHECK-NEXT: sra.l %s0, %s0, 48 766; CHECK-NEXT: b.l.t (, %s10) 767 %2 = trunc i32 %0 to i16 768 ret i16 %2 769} 770 771define zeroext i16 @ui2us(i32 zeroext %0) { 772; CHECK-LABEL: ui2us: 773; CHECK: # %bb.0: 774; CHECK-NEXT: and %s0, %s0, (48)0 775; CHECK-NEXT: b.l.t (, %s10) 776 %2 = trunc i32 %0 to i16 777 ret i16 %2 778} 779 780define signext i32 @ui2i(i32 zeroext returned %0) { 781; CHECK-LABEL: ui2i: 782; CHECK: # %bb.0: 783; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 784; CHECK-NEXT: b.l.t (, %s10) 785 ret i32 %0 786} 787 788define zeroext i32 @ui2ui(i32 zeroext returned %0) { 789; CHECK-LABEL: ui2ui: 790; CHECK: # %bb.0: 791; CHECK-NEXT: b.l.t (, %s10) 792 ret i32 %0 793} 794 795define i64 @ui2ll(i32 zeroext %0) { 796; CHECK-LABEL: ui2ll: 797; CHECK: # %bb.0: 798; CHECK-NEXT: b.l.t (, %s10) 799 %2 = zext i32 %0 to i64 800 ret i64 %2 801} 802 803define i64 @ui2ull(i32 zeroext %0) { 804; CHECK-LABEL: ui2ull: 805; CHECK: # %bb.0: 806; CHECK-NEXT: b.l.t (, %s10) 807 %2 = zext i32 %0 to i64 808 ret i64 %2 809} 810 811define float @ui2f(i32 zeroext %x) { 812; CHECK-LABEL: ui2f: 813; CHECK: # %bb.0: 814; CHECK-NEXT: cvt.d.l %s0, %s0 815; CHECK-NEXT: cvt.s.d %s0, %s0 816; CHECK-NEXT: b.l.t (, %s10) 817 %r = uitofp i32 %x to float 818 ret float %r 819} 820 821define double @ui2d(i32 zeroext %x) { 822; CHECK-LABEL: ui2d: 823; CHECK: # %bb.0: 824; CHECK-NEXT: cvt.d.l %s0, %s0 825; CHECK-NEXT: b.l.t (, %s10) 826 %r = uitofp i32 %x to double 827 ret double %r 828} 829 830define fp128 @ui2q(i32 zeroext %0) { 831; CHECK-LABEL: ui2q: 832; CHECK: # %bb.0: 833; CHECK-NEXT: cvt.d.l %s0, %s0 834; CHECK-NEXT: cvt.q.d %s0, %s0 835; CHECK-NEXT: b.l.t (, %s10) 836 %2 = uitofp i32 %0 to fp128 837 ret fp128 %2 838} 839 840define signext i8 @s2c(i16 signext %0) { 841; CHECK-LABEL: s2c: 842; CHECK: # %bb.0: 843; CHECK-NEXT: sll %s0, %s0, 56 844; CHECK-NEXT: sra.l %s0, %s0, 56 845; CHECK-NEXT: b.l.t (, %s10) 846 %2 = trunc i16 %0 to i8 847 ret i8 %2 848} 849 850define zeroext i8 @s2uc(i16 signext %0) { 851; CHECK-LABEL: s2uc: 852; CHECK: # %bb.0: 853; CHECK-NEXT: and %s0, %s0, (56)0 854; CHECK-NEXT: b.l.t (, %s10) 855 %2 = trunc i16 %0 to i8 856 ret i8 %2 857} 858 859define signext i16 @s2s(i16 returned signext %0) { 860; CHECK-LABEL: s2s: 861; CHECK: # %bb.0: 862; CHECK-NEXT: b.l.t (, %s10) 863 ret i16 %0 864} 865 866define zeroext i16 @s2us(i16 returned signext %0) { 867; CHECK-LABEL: s2us: 868; CHECK: # %bb.0: 869; CHECK-NEXT: and %s0, %s0, (48)0 870; CHECK-NEXT: b.l.t (, %s10) 871 ret i16 %0 872} 873 874define signext i32 @s2i(i16 signext %0) { 875; CHECK-LABEL: s2i: 876; CHECK: # %bb.0: 877; CHECK-NEXT: b.l.t (, %s10) 878 %2 = sext i16 %0 to i32 879 ret i32 %2 880} 881 882define zeroext i32 @s2ui(i16 signext %0) { 883; CHECK-LABEL: s2ui: 884; CHECK: # %bb.0: 885; CHECK-NEXT: and %s0, %s0, (32)0 886; CHECK-NEXT: b.l.t (, %s10) 887 %2 = sext i16 %0 to i32 888 ret i32 %2 889} 890 891define i64 @s2ll(i16 signext %0) { 892; CHECK-LABEL: s2ll: 893; CHECK: # %bb.0: 894; CHECK-NEXT: b.l.t (, %s10) 895 %2 = sext i16 %0 to i64 896 ret i64 %2 897} 898 899define i64 @s2ull(i16 signext %0) { 900; CHECK-LABEL: s2ull: 901; CHECK: # %bb.0: 902; CHECK-NEXT: b.l.t (, %s10) 903 %2 = sext i16 %0 to i64 904 ret i64 %2 905} 906 907define float @s2f(i16 signext %x) { 908; CHECK-LABEL: s2f: 909; CHECK: # %bb.0: 910; CHECK-NEXT: cvt.s.w %s0, %s0 911; CHECK-NEXT: b.l.t (, %s10) 912 %r = sitofp i16 %x to float 913 ret float %r 914} 915 916define double @s2d(i16 signext %x) { 917; CHECK-LABEL: s2d: 918; CHECK: # %bb.0: 919; CHECK-NEXT: cvt.d.w %s0, %s0 920; CHECK-NEXT: b.l.t (, %s10) 921 %r = sitofp i16 %x to double 922 ret double %r 923} 924 925define fp128 @s2q(i16 signext) { 926; CHECK-LABEL: s2q: 927; CHECK: # %bb.0: 928; CHECK-NEXT: cvt.d.w %s0, %s0 929; CHECK-NEXT: cvt.q.d %s0, %s0 930; CHECK-NEXT: b.l.t (, %s10) 931 %2 = sitofp i16 %0 to fp128 932 ret fp128 %2 933} 934 935define signext i8 @us2c(i16 zeroext %0) { 936; CHECK-LABEL: us2c: 937; CHECK: # %bb.0: 938; CHECK-NEXT: sll %s0, %s0, 56 939; CHECK-NEXT: sra.l %s0, %s0, 56 940; CHECK-NEXT: b.l.t (, %s10) 941 %2 = trunc i16 %0 to i8 942 ret i8 %2 943} 944 945define zeroext i8 @us2uc(i16 zeroext %0) { 946; CHECK-LABEL: us2uc: 947; CHECK: # %bb.0: 948; CHECK-NEXT: and %s0, %s0, (56)0 949; CHECK-NEXT: b.l.t (, %s10) 950 %2 = trunc i16 %0 to i8 951 ret i8 %2 952} 953 954define signext i16 @us2s(i16 returned zeroext %0) { 955; CHECK-LABEL: us2s: 956; CHECK: # %bb.0: 957; CHECK-NEXT: sll %s0, %s0, 48 958; CHECK-NEXT: sra.l %s0, %s0, 48 959; CHECK-NEXT: b.l.t (, %s10) 960 ret i16 %0 961} 962 963define zeroext i16 @us2us(i16 returned zeroext %0) { 964; CHECK-LABEL: us2us: 965; CHECK: # %bb.0: 966; CHECK-NEXT: b.l.t (, %s10) 967 ret i16 %0 968} 969 970define signext i32 @us2i(i16 zeroext %0) { 971; CHECK-LABEL: us2i: 972; CHECK: # %bb.0: 973; CHECK-NEXT: b.l.t (, %s10) 974 %2 = zext i16 %0 to i32 975 ret i32 %2 976} 977 978define zeroext i32 @us2ui(i16 zeroext %0) { 979; CHECK-LABEL: us2ui: 980; CHECK: # %bb.0: 981; CHECK-NEXT: b.l.t (, %s10) 982 %2 = zext i16 %0 to i32 983 ret i32 %2 984} 985 986define i64 @us2ll(i16 zeroext %0) { 987; CHECK-LABEL: us2ll: 988; CHECK: # %bb.0: 989; CHECK-NEXT: b.l.t (, %s10) 990 %2 = zext i16 %0 to i64 991 ret i64 %2 992} 993 994define i64 @us2ull(i16 zeroext %0) { 995; CHECK-LABEL: us2ull: 996; CHECK: # %bb.0: 997; CHECK-NEXT: b.l.t (, %s10) 998 %2 = zext i16 %0 to i64 999 ret i64 %2 1000} 1001 1002define float @us2f(i16 zeroext %x) { 1003; CHECK-LABEL: us2f: 1004; CHECK: # %bb.0: 1005; CHECK-NEXT: cvt.s.w %s0, %s0 1006; CHECK-NEXT: b.l.t (, %s10) 1007 %r = uitofp i16 %x to float 1008 ret float %r 1009} 1010 1011define double @us2d(i16 zeroext %x) { 1012; CHECK-LABEL: us2d: 1013; CHECK: # %bb.0: 1014; CHECK-NEXT: cvt.d.w %s0, %s0 1015; CHECK-NEXT: b.l.t (, %s10) 1016 %r = uitofp i16 %x to double 1017 ret double %r 1018} 1019 1020define fp128 @us2q(i16 zeroext) { 1021; CHECK-LABEL: us2q: 1022; CHECK: # %bb.0: 1023; CHECK-NEXT: cvt.d.w %s0, %s0 1024; CHECK-NEXT: cvt.q.d %s0, %s0 1025; CHECK-NEXT: b.l.t (, %s10) 1026 %2 = uitofp i16 %0 to fp128 1027 ret fp128 %2 1028} 1029 1030define signext i8 @c2c(i8 returned signext %0) { 1031; CHECK-LABEL: c2c: 1032; CHECK: # %bb.0: 1033; CHECK-NEXT: b.l.t (, %s10) 1034 ret i8 %0 1035} 1036 1037define zeroext i8 @c2uc(i8 returned signext %0) { 1038; CHECK-LABEL: c2uc: 1039; CHECK: # %bb.0: 1040; CHECK-NEXT: and %s0, %s0, (56)0 1041; CHECK-NEXT: b.l.t (, %s10) 1042 ret i8 %0 1043} 1044 1045define signext i16 @c2s(i8 signext %0) { 1046; CHECK-LABEL: c2s: 1047; CHECK: # %bb.0: 1048; CHECK-NEXT: b.l.t (, %s10) 1049 %2 = sext i8 %0 to i16 1050 ret i16 %2 1051} 1052 1053define zeroext i16 @c2us(i8 signext %0) { 1054; CHECK-LABEL: c2us: 1055; CHECK: # %bb.0: 1056; CHECK-NEXT: and %s0, %s0, (48)0 1057; CHECK-NEXT: b.l.t (, %s10) 1058 %2 = sext i8 %0 to i16 1059 ret i16 %2 1060} 1061 1062define signext i32 @c2i(i8 signext %0) { 1063; CHECK-LABEL: c2i: 1064; CHECK: # %bb.0: 1065; CHECK-NEXT: b.l.t (, %s10) 1066 %2 = sext i8 %0 to i32 1067 ret i32 %2 1068} 1069 1070define zeroext i32 @c2ui(i8 signext %0) { 1071; CHECK-LABEL: c2ui: 1072; CHECK: # %bb.0: 1073; CHECK-NEXT: and %s0, %s0, (32)0 1074; CHECK-NEXT: b.l.t (, %s10) 1075 %2 = sext i8 %0 to i32 1076 ret i32 %2 1077} 1078 1079define i64 @c2ll(i8 signext %0) { 1080; CHECK-LABEL: c2ll: 1081; CHECK: # %bb.0: 1082; CHECK-NEXT: b.l.t (, %s10) 1083 %2 = sext i8 %0 to i64 1084 ret i64 %2 1085} 1086 1087define i64 @c2ull(i8 signext %0) { 1088; CHECK-LABEL: c2ull: 1089; CHECK: # %bb.0: 1090; CHECK-NEXT: b.l.t (, %s10) 1091 %2 = sext i8 %0 to i64 1092 ret i64 %2 1093} 1094 1095define float @c2f(i8 signext %x) { 1096; CHECK-LABEL: c2f: 1097; CHECK: # %bb.0: 1098; CHECK-NEXT: cvt.s.w %s0, %s0 1099; CHECK-NEXT: b.l.t (, %s10) 1100 %r = sitofp i8 %x to float 1101 ret float %r 1102} 1103 1104define double @c2d(i8 signext %x) { 1105; CHECK-LABEL: c2d: 1106; CHECK: # %bb.0: 1107; CHECK-NEXT: cvt.d.w %s0, %s0 1108; CHECK-NEXT: b.l.t (, %s10) 1109 %r = sitofp i8 %x to double 1110 ret double %r 1111} 1112 1113define fp128 @c2q(i8 signext) { 1114; CHECK-LABEL: c2q: 1115; CHECK: # %bb.0: 1116; CHECK-NEXT: cvt.d.w %s0, %s0 1117; CHECK-NEXT: cvt.q.d %s0, %s0 1118; CHECK-NEXT: b.l.t (, %s10) 1119 %2 = sitofp i8 %0 to fp128 1120 ret fp128 %2 1121} 1122 1123define signext i8 @uc2c(i8 returned zeroext %0) { 1124; CHECK-LABEL: uc2c: 1125; CHECK: # %bb.0: 1126; CHECK-NEXT: sll %s0, %s0, 56 1127; CHECK-NEXT: sra.l %s0, %s0, 56 1128; CHECK-NEXT: b.l.t (, %s10) 1129 ret i8 %0 1130} 1131 1132define zeroext i8 @uc2uc(i8 returned zeroext %0) { 1133; CHECK-LABEL: uc2uc: 1134; CHECK: # %bb.0: 1135; CHECK-NEXT: b.l.t (, %s10) 1136 ret i8 %0 1137} 1138 1139define signext i16 @uc2s(i8 zeroext %0) { 1140; CHECK-LABEL: uc2s: 1141; CHECK: # %bb.0: 1142; CHECK-NEXT: b.l.t (, %s10) 1143 %2 = zext i8 %0 to i16 1144 ret i16 %2 1145} 1146 1147define zeroext i16 @uc2us(i8 zeroext %0) { 1148; CHECK-LABEL: uc2us: 1149; CHECK: # %bb.0: 1150; CHECK-NEXT: b.l.t (, %s10) 1151 %2 = zext i8 %0 to i16 1152 ret i16 %2 1153} 1154 1155define signext i32 @uc2i(i8 zeroext %0) { 1156; CHECK-LABEL: uc2i: 1157; CHECK: # %bb.0: 1158; CHECK-NEXT: b.l.t (, %s10) 1159 %2 = zext i8 %0 to i32 1160 ret i32 %2 1161} 1162 1163define zeroext i32 @uc2ui(i8 zeroext %0) { 1164; CHECK-LABEL: uc2ui: 1165; CHECK: # %bb.0: 1166; CHECK-NEXT: b.l.t (, %s10) 1167 %2 = zext i8 %0 to i32 1168 ret i32 %2 1169} 1170 1171define i64 @uc2ll(i8 zeroext %0) { 1172; CHECK-LABEL: uc2ll: 1173; CHECK: # %bb.0: 1174; CHECK-NEXT: b.l.t (, %s10) 1175 %2 = zext i8 %0 to i64 1176 ret i64 %2 1177} 1178 1179define i64 @uc2ull(i8 zeroext %0) { 1180; CHECK-LABEL: uc2ull: 1181; CHECK: # %bb.0: 1182; CHECK-NEXT: b.l.t (, %s10) 1183 %2 = zext i8 %0 to i64 1184 ret i64 %2 1185} 1186 1187define float @uc2f(i8 zeroext %x) { 1188; CHECK-LABEL: uc2f: 1189; CHECK: # %bb.0: 1190; CHECK-NEXT: cvt.s.w %s0, %s0 1191; CHECK-NEXT: b.l.t (, %s10) 1192 %r = uitofp i8 %x to float 1193 ret float %r 1194} 1195 1196define double @uc2d(i8 zeroext %x) { 1197; CHECK-LABEL: uc2d: 1198; CHECK: # %bb.0: 1199; CHECK-NEXT: cvt.d.w %s0, %s0 1200; CHECK-NEXT: b.l.t (, %s10) 1201 %r = uitofp i8 %x to double 1202 ret double %r 1203} 1204 1205define fp128 @uc2q(i8 zeroext) { 1206; CHECK-LABEL: uc2q: 1207; CHECK: # %bb.0: 1208; CHECK-NEXT: cvt.d.w %s0, %s0 1209; CHECK-NEXT: cvt.q.d %s0, %s0 1210; CHECK-NEXT: b.l.t (, %s10) 1211 %2 = uitofp i8 %0 to fp128 1212 ret fp128 %2 1213} 1214 1215; Function Attrs: norecurse nounwind readnone 1216define i128 @i128() { 1217; CHECK-LABEL: i128: 1218; CHECK: # %bb.0: 1219; CHECK-NEXT: lea %s0, -2147483648 1220; CHECK-NEXT: or %s1, -1, (0)1 1221; CHECK-NEXT: b.l.t (, %s10) 1222 ret i128 -2147483648 1223} 1224 1225; Function Attrs: norecurse nounwind readnone 1226define i128 @ui128() { 1227; CHECK-LABEL: ui128: 1228; CHECK: # %bb.0: 1229; CHECK-NEXT: lea %s0, -2147483648 1230; CHECK-NEXT: or %s1, -1, (0)1 1231; CHECK-NEXT: b.l.t (, %s10) 1232 ret i128 -2147483648 1233} 1234 1235; Function Attrs: norecurse nounwind readnone 1236define signext i8 @i1282c(i128 %0) { 1237; CHECK-LABEL: i1282c: 1238; CHECK: # %bb.0: 1239; CHECK-NEXT: sll %s0, %s0, 56 1240; CHECK-NEXT: sra.l %s0, %s0, 56 1241; CHECK-NEXT: b.l.t (, %s10) 1242 %2 = trunc i128 %0 to i8 1243 ret i8 %2 1244} 1245 1246; Function Attrs: norecurse nounwind readnone 1247define signext i8 @ui1282c(i128 %0) { 1248; CHECK-LABEL: ui1282c: 1249; CHECK: # %bb.0: 1250; CHECK-NEXT: sll %s0, %s0, 56 1251; CHECK-NEXT: sra.l %s0, %s0, 56 1252; CHECK-NEXT: b.l.t (, %s10) 1253 %2 = trunc i128 %0 to i8 1254 ret i8 %2 1255} 1256 1257; Function Attrs: norecurse nounwind readnone 1258define zeroext i8 @i1282uc(i128 %0) { 1259; CHECK-LABEL: i1282uc: 1260; CHECK: # %bb.0: 1261; CHECK-NEXT: and %s0, %s0, (56)0 1262; CHECK-NEXT: b.l.t (, %s10) 1263 %2 = trunc i128 %0 to i8 1264 ret i8 %2 1265} 1266 1267; Function Attrs: norecurse nounwind readnone 1268define zeroext i8 @ui1282uc(i128 %0) { 1269; CHECK-LABEL: ui1282uc: 1270; CHECK: # %bb.0: 1271; CHECK-NEXT: and %s0, %s0, (56)0 1272; CHECK-NEXT: b.l.t (, %s10) 1273 %2 = trunc i128 %0 to i8 1274 ret i8 %2 1275} 1276 1277; Function Attrs: norecurse nounwind readnone 1278define signext i16 @i1282s(i128 %0) { 1279; CHECK-LABEL: i1282s: 1280; CHECK: # %bb.0: 1281; CHECK-NEXT: sll %s0, %s0, 48 1282; CHECK-NEXT: sra.l %s0, %s0, 48 1283; CHECK-NEXT: b.l.t (, %s10) 1284 %2 = trunc i128 %0 to i16 1285 ret i16 %2 1286} 1287 1288; Function Attrs: norecurse nounwind readnone 1289define signext i16 @ui1282s(i128 %0) { 1290; CHECK-LABEL: ui1282s: 1291; CHECK: # %bb.0: 1292; CHECK-NEXT: sll %s0, %s0, 48 1293; CHECK-NEXT: sra.l %s0, %s0, 48 1294; CHECK-NEXT: b.l.t (, %s10) 1295 %2 = trunc i128 %0 to i16 1296 ret i16 %2 1297} 1298 1299; Function Attrs: norecurse nounwind readnone 1300define zeroext i16 @i1282us(i128 %0) { 1301; CHECK-LABEL: i1282us: 1302; CHECK: # %bb.0: 1303; CHECK-NEXT: and %s0, %s0, (48)0 1304; CHECK-NEXT: b.l.t (, %s10) 1305 %2 = trunc i128 %0 to i16 1306 ret i16 %2 1307} 1308 1309; Function Attrs: norecurse nounwind readnone 1310define zeroext i16 @ui1282us(i128 %0) { 1311; CHECK-LABEL: ui1282us: 1312; CHECK: # %bb.0: 1313; CHECK-NEXT: and %s0, %s0, (48)0 1314; CHECK-NEXT: b.l.t (, %s10) 1315 %2 = trunc i128 %0 to i16 1316 ret i16 %2 1317} 1318 1319; Function Attrs: norecurse nounwind readnone 1320define signext i32 @i1282i(i128 %0) { 1321; CHECK-LABEL: i1282i: 1322; CHECK: # %bb.0: 1323; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 1324; CHECK-NEXT: b.l.t (, %s10) 1325 %2 = trunc i128 %0 to i32 1326 ret i32 %2 1327} 1328 1329; Function Attrs: norecurse nounwind readnone 1330define signext i32 @ui1282i(i128 %0) { 1331; CHECK-LABEL: ui1282i: 1332; CHECK: # %bb.0: 1333; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1 1334; CHECK-NEXT: b.l.t (, %s10) 1335 %2 = trunc i128 %0 to i32 1336 ret i32 %2 1337} 1338 1339; Function Attrs: norecurse nounwind readnone 1340define zeroext i32 @i1282ui(i128 %0) { 1341; CHECK-LABEL: i1282ui: 1342; CHECK: # %bb.0: 1343; CHECK-NEXT: and %s0, %s0, (32)0 1344; CHECK-NEXT: b.l.t (, %s10) 1345 %2 = trunc i128 %0 to i32 1346 ret i32 %2 1347} 1348 1349; Function Attrs: norecurse nounwind readnone 1350define zeroext i32 @ui1282ui(i128 %0) { 1351; CHECK-LABEL: ui1282ui: 1352; CHECK: # %bb.0: 1353; CHECK-NEXT: and %s0, %s0, (32)0 1354; CHECK-NEXT: b.l.t (, %s10) 1355 %2 = trunc i128 %0 to i32 1356 ret i32 %2 1357} 1358 1359; Function Attrs: norecurse nounwind readnone 1360define i64 @i1282ll(i128 %0) { 1361; CHECK-LABEL: i1282ll: 1362; CHECK: # %bb.0: 1363; CHECK-NEXT: b.l.t (, %s10) 1364 %2 = trunc i128 %0 to i64 1365 ret i64 %2 1366} 1367 1368; Function Attrs: norecurse nounwind readnone 1369define i64 @ui1282ll(i128 %0) { 1370; CHECK-LABEL: ui1282ll: 1371; CHECK: # %bb.0: 1372; CHECK-NEXT: b.l.t (, %s10) 1373 %2 = trunc i128 %0 to i64 1374 ret i64 %2 1375} 1376 1377; Function Attrs: norecurse nounwind readnone 1378define i64 @i1282ull(i128 %0) { 1379; CHECK-LABEL: i1282ull: 1380; CHECK: # %bb.0: 1381; CHECK-NEXT: b.l.t (, %s10) 1382 %2 = trunc i128 %0 to i64 1383 ret i64 %2 1384} 1385 1386; Function Attrs: norecurse nounwind readnone 1387define i64 @ui1282ull(i128 %0) { 1388; CHECK-LABEL: ui1282ull: 1389; CHECK: # %bb.0: 1390; CHECK-NEXT: b.l.t (, %s10) 1391 %2 = trunc i128 %0 to i64 1392 ret i64 %2 1393} 1394 1395; Function Attrs: norecurse nounwind readnone 1396define i128 @i1282ui128(i128 returned %0) { 1397; CHECK-LABEL: i1282ui128: 1398; CHECK: # %bb.0: 1399; CHECK-NEXT: b.l.t (, %s10) 1400 ret i128 %0 1401} 1402 1403; Function Attrs: norecurse nounwind readnone 1404define i128 @ui1282i128(i128 returned %0) { 1405; CHECK-LABEL: ui1282i128: 1406; CHECK: # %bb.0: 1407; CHECK-NEXT: b.l.t (, %s10) 1408 ret i128 %0 1409} 1410 1411; Function Attrs: norecurse nounwind readnone 1412define float @i1282f(i128) { 1413; CHECK-LABEL: i1282f: 1414; CHECK: .LBB{{[0-9]+}}_2: 1415; CHECK-NEXT: lea %s2, __floattisf@lo 1416; CHECK-NEXT: and %s2, %s2, (32)0 1417; CHECK-NEXT: lea.sl %s12, __floattisf@hi(, %s2) 1418; CHECK-NEXT: bsic %s10, (, %s12) 1419; CHECK-NEXT: or %s11, 0, %s9 1420 %2 = sitofp i128 %0 to float 1421 ret float %2 1422} 1423 1424; Function Attrs: norecurse nounwind readnone 1425define float @ui1282f(i128) { 1426; CHECK-LABEL: ui1282f: 1427; CHECK: .LBB{{[0-9]+}}_2: 1428; CHECK-NEXT: lea %s2, __floatuntisf@lo 1429; CHECK-NEXT: and %s2, %s2, (32)0 1430; CHECK-NEXT: lea.sl %s12, __floatuntisf@hi(, %s2) 1431; CHECK-NEXT: bsic %s10, (, %s12) 1432; CHECK-NEXT: or %s11, 0, %s9 1433 %2 = uitofp i128 %0 to float 1434 ret float %2 1435} 1436 1437; Function Attrs: norecurse nounwind readnone 1438define double @i1282d(i128) { 1439; CHECK-LABEL: i1282d: 1440; CHECK: .LBB{{[0-9]+}}_2: 1441; CHECK-NEXT: lea %s2, __floattidf@lo 1442; CHECK-NEXT: and %s2, %s2, (32)0 1443; CHECK-NEXT: lea.sl %s12, __floattidf@hi(, %s2) 1444; CHECK-NEXT: bsic %s10, (, %s12) 1445; CHECK-NEXT: or %s11, 0, %s9 1446 %2 = sitofp i128 %0 to double 1447 ret double %2 1448} 1449 1450; Function Attrs: norecurse nounwind readnone 1451define double @ui1282d(i128) { 1452; CHECK-LABEL: ui1282d: 1453; CHECK: .LBB{{[0-9]+}}_2: 1454; CHECK-NEXT: lea %s2, __floatuntidf@lo 1455; CHECK-NEXT: and %s2, %s2, (32)0 1456; CHECK-NEXT: lea.sl %s12, __floatuntidf@hi(, %s2) 1457; CHECK-NEXT: bsic %s10, (, %s12) 1458; CHECK-NEXT: or %s11, 0, %s9 1459 %2 = uitofp i128 %0 to double 1460 ret double %2 1461} 1462 1463; Function Attrs: norecurse nounwind readnone 1464define i128 @d2i128(double) { 1465; CHECK-LABEL: d2i128: 1466; CHECK: .LBB{{[0-9]+}}_2: 1467; CHECK-NEXT: lea %s1, __fixdfti@lo 1468; CHECK-NEXT: and %s1, %s1, (32)0 1469; CHECK-NEXT: lea.sl %s12, __fixdfti@hi(, %s1) 1470; CHECK-NEXT: bsic %s10, (, %s12) 1471; CHECK-NEXT: or %s11, 0, %s9 1472 %2 = fptosi double %0 to i128 1473 ret i128 %2 1474} 1475 1476; Function Attrs: norecurse nounwind readnone 1477define i128 @d2ui128(double) { 1478; CHECK-LABEL: d2ui128: 1479; CHECK: .LBB{{[0-9]+}}_2: 1480; CHECK-NEXT: lea %s1, __fixunsdfti@lo 1481; CHECK-NEXT: and %s1, %s1, (32)0 1482; CHECK-NEXT: lea.sl %s12, __fixunsdfti@hi(, %s1) 1483; CHECK-NEXT: bsic %s10, (, %s12) 1484; CHECK-NEXT: or %s11, 0, %s9 1485 %2 = fptoui double %0 to i128 1486 ret i128 %2 1487} 1488 1489; Function Attrs: norecurse nounwind readnone 1490define i128 @f2i128(float) { 1491; CHECK-LABEL: f2i128: 1492; CHECK: .LBB{{[0-9]+}}_2: 1493; CHECK-NEXT: lea %s1, __fixsfti@lo 1494; CHECK-NEXT: and %s1, %s1, (32)0 1495; CHECK-NEXT: lea.sl %s12, __fixsfti@hi(, %s1) 1496; CHECK-NEXT: bsic %s10, (, %s12) 1497; CHECK-NEXT: or %s11, 0, %s9 1498 %2 = fptosi float %0 to i128 1499 ret i128 %2 1500} 1501 1502; Function Attrs: norecurse nounwind readnone 1503define i128 @f2ui128(float) { 1504; CHECK-LABEL: f2ui128: 1505; CHECK: .LBB{{[0-9]+}}_2: 1506; CHECK-NEXT: lea %s1, __fixunssfti@lo 1507; CHECK-NEXT: and %s1, %s1, (32)0 1508; CHECK-NEXT: lea.sl %s12, __fixunssfti@hi(, %s1) 1509; CHECK-NEXT: bsic %s10, (, %s12) 1510; CHECK-NEXT: or %s11, 0, %s9 1511 %2 = fptoui float %0 to i128 1512 ret i128 %2 1513} 1514 1515; Function Attrs: norecurse nounwind readnone 1516define i128 @ll2i128(i64 %0) { 1517; CHECK-LABEL: ll2i128: 1518; CHECK: # %bb.0: 1519; CHECK-NEXT: sra.l %s1, %s0, 63 1520; CHECK-NEXT: b.l.t (, %s10) 1521 %2 = sext i64 %0 to i128 1522 ret i128 %2 1523} 1524 1525; Function Attrs: norecurse nounwind readnone 1526define i128 @ll2ui128(i64 %0) { 1527; CHECK-LABEL: ll2ui128: 1528; CHECK: # %bb.0: 1529; CHECK-NEXT: sra.l %s1, %s0, 63 1530; CHECK-NEXT: b.l.t (, %s10) 1531 %2 = sext i64 %0 to i128 1532 ret i128 %2 1533} 1534 1535; Function Attrs: norecurse nounwind readnone 1536define i128 @ull2i128(i64 %0) { 1537; CHECK-LABEL: ull2i128: 1538; CHECK: # %bb.0: 1539; CHECK-NEXT: or %s1, 0, (0)1 1540; CHECK-NEXT: b.l.t (, %s10) 1541 %2 = zext i64 %0 to i128 1542 ret i128 %2 1543} 1544 1545; Function Attrs: norecurse nounwind readnone 1546define i128 @ull2ui128(i64 %0) { 1547; CHECK-LABEL: ull2ui128: 1548; CHECK: # %bb.0: 1549; CHECK-NEXT: or %s1, 0, (0)1 1550; CHECK-NEXT: b.l.t (, %s10) 1551 %2 = zext i64 %0 to i128 1552 ret i128 %2 1553} 1554 1555; Function Attrs: norecurse nounwind readnone 1556define i128 @i2i128(i32 signext %0) { 1557; CHECK-LABEL: i2i128: 1558; CHECK: # %bb.0: 1559; CHECK-NEXT: sra.l %s1, %s0, 63 1560; CHECK-NEXT: b.l.t (, %s10) 1561 %2 = sext i32 %0 to i128 1562 ret i128 %2 1563} 1564 1565; Function Attrs: norecurse nounwind readnone 1566define i128 @i2ui128(i32 signext %0) { 1567; CHECK-LABEL: i2ui128: 1568; CHECK: # %bb.0: 1569; CHECK-NEXT: sra.l %s1, %s0, 63 1570; CHECK-NEXT: b.l.t (, %s10) 1571 %2 = sext i32 %0 to i128 1572 ret i128 %2 1573} 1574 1575; Function Attrs: norecurse nounwind readnone 1576define i128 @ui2i128(i32 zeroext %0) { 1577; CHECK-LABEL: ui2i128: 1578; CHECK: # %bb.0: 1579; CHECK-NEXT: or %s1, 0, (0)1 1580; CHECK-NEXT: b.l.t (, %s10) 1581 %2 = zext i32 %0 to i128 1582 ret i128 %2 1583} 1584 1585; Function Attrs: norecurse nounwind readnone 1586define i128 @ui2ui128(i32 zeroext %0) { 1587; CHECK-LABEL: ui2ui128: 1588; CHECK: # %bb.0: 1589; CHECK-NEXT: or %s1, 0, (0)1 1590; CHECK-NEXT: b.l.t (, %s10) 1591 %2 = zext i32 %0 to i128 1592 ret i128 %2 1593} 1594 1595; Function Attrs: norecurse nounwind readnone 1596define i128 @s2i128(i16 signext %0) { 1597; CHECK-LABEL: s2i128: 1598; CHECK: # %bb.0: 1599; CHECK-NEXT: sra.l %s1, %s0, 63 1600; CHECK-NEXT: b.l.t (, %s10) 1601 %2 = sext i16 %0 to i128 1602 ret i128 %2 1603} 1604 1605; Function Attrs: norecurse nounwind readnone 1606define i128 @s2ui128(i16 signext %0) { 1607; CHECK-LABEL: s2ui128: 1608; CHECK: # %bb.0: 1609; CHECK-NEXT: sra.l %s1, %s0, 63 1610; CHECK-NEXT: b.l.t (, %s10) 1611 %2 = sext i16 %0 to i128 1612 ret i128 %2 1613} 1614 1615; Function Attrs: norecurse nounwind readnone 1616define i128 @us2i128(i16 zeroext %0) { 1617; CHECK-LABEL: us2i128: 1618; CHECK: # %bb.0: 1619; CHECK-NEXT: or %s1, 0, (0)1 1620; CHECK-NEXT: b.l.t (, %s10) 1621 %2 = zext i16 %0 to i128 1622 ret i128 %2 1623} 1624 1625; Function Attrs: norecurse nounwind readnone 1626define i128 @us2ui128(i16 zeroext %0) { 1627; CHECK-LABEL: us2ui128: 1628; CHECK: # %bb.0: 1629; CHECK-NEXT: or %s1, 0, (0)1 1630; CHECK-NEXT: b.l.t (, %s10) 1631 %2 = zext i16 %0 to i128 1632 ret i128 %2 1633} 1634 1635; Function Attrs: norecurse nounwind readnone 1636define i128 @c2i128(i8 signext %0) { 1637; CHECK-LABEL: c2i128: 1638; CHECK: # %bb.0: 1639; CHECK-NEXT: sra.l %s1, %s0, 63 1640; CHECK-NEXT: b.l.t (, %s10) 1641 %2 = sext i8 %0 to i128 1642 ret i128 %2 1643} 1644 1645; Function Attrs: norecurse nounwind readnone 1646define i128 @char2ui128(i8 signext %0) { 1647; CHECK-LABEL: char2ui128: 1648; CHECK: # %bb.0: 1649; CHECK-NEXT: sra.l %s1, %s0, 63 1650; CHECK-NEXT: b.l.t (, %s10) 1651 %2 = sext i8 %0 to i128 1652 ret i128 %2 1653} 1654 1655; Function Attrs: norecurse nounwind readnone 1656define i128 @uc2i128(i8 zeroext %0) { 1657; CHECK-LABEL: uc2i128: 1658; CHECK: # %bb.0: 1659; CHECK-NEXT: or %s1, 0, (0)1 1660; CHECK-NEXT: b.l.t (, %s10) 1661 %2 = zext i8 %0 to i128 1662 ret i128 %2 1663} 1664 1665; Function Attrs: norecurse nounwind readnone 1666define i128 @uc2ui128(i8 zeroext %0) { 1667; CHECK-LABEL: uc2ui128: 1668; CHECK: # %bb.0: 1669; CHECK-NEXT: or %s1, 0, (0)1 1670; CHECK-NEXT: b.l.t (, %s10) 1671 %2 = zext i8 %0 to i128 1672 ret i128 %2 1673} 1674