brintos

brintos / llvm-project-archived public Read only

0
0
Text · 38.5 KiB · 6f6c93a Raw
1674 lines · plain
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s2 3define signext i32 @i() {4; CHECK-LABEL: i:5; CHECK:       # %bb.0:6; CHECK-NEXT:    lea %s0, -21474836487; CHECK-NEXT:    b.l.t (, %s10)8  ret i32 -21474836489}10 11define zeroext i32 @ui() {12; CHECK-LABEL: ui:13; CHECK:       # %bb.0:14; CHECK-NEXT:    lea %s0, -214748364815; CHECK-NEXT:    and %s0, %s0, (32)016; CHECK-NEXT:    b.l.t (, %s10)17  ret i32 -214748364818}19 20define i64 @ll() {21; CHECK-LABEL: ll:22; CHECK:       # %bb.0:23; CHECK-NEXT:    lea %s0, -214748364824; CHECK-NEXT:    b.l.t (, %s10)25  ret i64 -214748364826}27 28define i64 @ull() {29; CHECK-LABEL: ull:30; CHECK:       # %bb.0:31; CHECK-NEXT:    lea %s0, -214748364832; CHECK-NEXT:    and %s0, %s0, (32)033; CHECK-NEXT:    b.l.t (, %s10)34  ret i64 214748364835}36 37define signext i8 @d2c(double %x) {38; CHECK-LABEL: d2c:39; CHECK:       # %bb.0:40; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s041; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)142; CHECK-NEXT:    b.l.t (, %s10)43  %r = fptosi double %x to i844  ret i8 %r45}46 47define zeroext i8 @d2uc(double %x) {48; CHECK-LABEL: d2uc:49; CHECK:       # %bb.0:50; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s051; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)152; CHECK-NEXT:    b.l.t (, %s10)53  %r = fptoui double %x to i854  ret i8 %r55}56 57define signext i16 @d2s(double %x) {58; CHECK-LABEL: d2s:59; CHECK:       # %bb.0:60; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s061; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)162; CHECK-NEXT:    b.l.t (, %s10)63  %r = fptosi double %x to i1664  ret i16 %r65}66 67define zeroext i16 @d2us(double %x) {68; CHECK-LABEL: d2us:69; CHECK:       # %bb.0:70; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s071; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)172; CHECK-NEXT:    b.l.t (, %s10)73  %r = fptoui double %x to i1674  ret i16 %r75}76 77define signext i32 @d2i(double %x) {78; CHECK-LABEL: d2i:79; CHECK:       # %bb.0:80; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s081; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)182; CHECK-NEXT:    b.l.t (, %s10)83  %r = fptosi double %x to i3284  ret i32 %r85}86 87define zeroext i32 @d2ui(double %x) {88; CHECK-LABEL: d2ui:89; CHECK:       # %bb.0:90; CHECK-NEXT:    cvt.l.d.rz %s0, %s091; CHECK-NEXT:    and %s0, %s0, (32)092; CHECK-NEXT:    b.l.t (, %s10)93  %r = fptoui double %x to i3294  ret i32 %r95}96 97define i64 @d2ll(double %x) {98; CHECK-LABEL: d2ll:99; CHECK:       # %bb.0:100; CHECK-NEXT:    cvt.l.d.rz %s0, %s0101; CHECK-NEXT:    b.l.t (, %s10)102  %r = fptosi double %x to i64103  ret i64 %r104}105 106define i64 @d2ull(double %x) {107; CHECK-LABEL: d2ull:108; CHECK:       # %bb.0:109; CHECK-NEXT:    lea.sl %s1, 1138753536110; CHECK-NEXT:    fcmp.d %s2, %s0, %s1111; CHECK-NEXT:    fsub.d %s1, %s0, %s1112; CHECK-NEXT:    cvt.l.d.rz %s1, %s1113; CHECK-NEXT:    xor %s1, %s1, (1)1114; CHECK-NEXT:    cvt.l.d.rz %s0, %s0115; CHECK-NEXT:    cmov.d.lt %s1, %s0, %s2116; CHECK-NEXT:    or %s0, 0, %s1117; CHECK-NEXT:    b.l.t (, %s10)118  %r = fptoui double %x to i64119  ret i64 %r120}121 122define float @d2f(double %x) {123; CHECK-LABEL: d2f:124; CHECK:       # %bb.0:125; CHECK-NEXT:    cvt.s.d %s0, %s0126; CHECK-NEXT:    b.l.t (, %s10)127  %r = fptrunc double %x to float128  ret float %r129}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 %0136}137 138define fp128 @d2q(double) {139; CHECK-LABEL: d2q:140; CHECK:       # %bb.0:141; CHECK-NEXT:    cvt.q.d %s0, %s0142; CHECK-NEXT:    b.l.t (, %s10)143  %2 = fpext double %0 to fp128144  ret fp128 %2145}146 147define signext i8 @q2c(fp128) {148; CHECK-LABEL: q2c:149; CHECK:       # %bb.0:150; CHECK-NEXT:    cvt.d.q %s0, %s0151; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0152; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1153; CHECK-NEXT:    b.l.t (, %s10)154  %2 = fptosi fp128 %0 to i8155  ret i8 %2156}157 158define zeroext i8 @q2uc(fp128) {159; CHECK-LABEL: q2uc:160; CHECK:       # %bb.0:161; CHECK-NEXT:    cvt.d.q %s0, %s0162; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0163; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1164; CHECK-NEXT:    b.l.t (, %s10)165  %2 = fptoui fp128 %0 to i8166  ret i8 %2167}168 169define signext i16 @q2s(fp128) {170; CHECK-LABEL: q2s:171; CHECK:       # %bb.0:172; CHECK-NEXT:    cvt.d.q %s0, %s0173; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0174; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1175; CHECK-NEXT:    b.l.t (, %s10)176  %2 = fptosi fp128 %0 to i16177  ret i16 %2178}179 180define zeroext i16 @q2us(fp128) {181; CHECK-LABEL: q2us:182; CHECK:       # %bb.0:183; CHECK-NEXT:    cvt.d.q %s0, %s0184; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0185; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1186; CHECK-NEXT:    b.l.t (, %s10)187  %2 = fptoui fp128 %0 to i16188  ret i16 %2189}190 191define signext i32 @q2i(fp128) {192; CHECK-LABEL: q2i:193; CHECK:       # %bb.0:194; CHECK-NEXT:    cvt.d.q %s0, %s0195; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0196; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1197; CHECK-NEXT:    b.l.t (, %s10)198  %2 = fptosi fp128 %0 to i32199  ret i32 %2200}201 202define zeroext i32 @q2ui(fp128) {203; CHECK-LABEL: q2ui:204; CHECK:       # %bb.0:205; CHECK-NEXT:    cvt.d.q %s0, %s0206; CHECK-NEXT:    cvt.l.d.rz %s0, %s0207; CHECK-NEXT:    and %s0, %s0, (32)0208; CHECK-NEXT:    b.l.t (, %s10)209  %2 = fptoui fp128 %0 to i32210  ret i32 %2211}212 213define i64 @q2ll(fp128) {214; CHECK-LABEL: q2ll:215; CHECK:       # %bb.0:216; CHECK-NEXT:    cvt.d.q %s0, %s0217; CHECK-NEXT:    cvt.l.d.rz %s0, %s0218; CHECK-NEXT:    b.l.t (, %s10)219  %2 = fptosi fp128 %0 to i64220  ret i64 %2221}222 223define i64 @q2ull(fp128) {224; CHECK-LABEL: q2ull:225; CHECK:       # %bb.0:226; CHECK-NEXT:    lea %s2, .LCPI{{[0-9]+}}_0@lo227; CHECK-NEXT:    and %s2, %s2, (32)0228; 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, %s4232; CHECK-NEXT:    fsub.q %s4, %s0, %s4233; CHECK-NEXT:    cvt.d.q %s2, %s4234; CHECK-NEXT:    cvt.l.d.rz %s2, %s2235; CHECK-NEXT:    xor %s2, %s2, (1)1236; CHECK-NEXT:    cvt.d.q %s0, %s0237; CHECK-NEXT:    cvt.l.d.rz %s0, %s0238; CHECK-NEXT:    cmov.d.lt %s2, %s0, %s3239; CHECK-NEXT:    or %s0, 0, %s2240; CHECK-NEXT:    b.l.t (, %s10)241  %2 = fptoui fp128 %0 to i64242  ret i64 %2243}244 245define float @q2f(fp128) {246; CHECK-LABEL: q2f:247; CHECK:       # %bb.0:248; CHECK-NEXT:    cvt.s.q %s0, %s0249; CHECK-NEXT:    b.l.t (, %s10)250  %2 = fptrunc fp128 %0 to float251  ret float %2252}253 254define double @q2d(fp128) {255; CHECK-LABEL: q2d:256; CHECK:       # %bb.0:257; CHECK-NEXT:    cvt.d.q %s0, %s0258; CHECK-NEXT:    b.l.t (, %s10)259  %2 = fptrunc fp128 %0 to double260  ret double %2261}262 263define fp128 @q2q(fp128 returned) {264; CHECK-LABEL: q2q:265; CHECK:       # %bb.0:266; CHECK-NEXT:    b.l.t (, %s10)267  ret fp128 %0268}269 270define signext i8 @f2c(float %x) {271; CHECK-LABEL: f2c:272; CHECK:       # %bb.0:273; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0274; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1275; CHECK-NEXT:    b.l.t (, %s10)276  %r = fptosi float %x to i8277  ret i8 %r278}279 280define zeroext i8 @f2uc(float %x) {281; CHECK-LABEL: f2uc:282; CHECK:       # %bb.0:283; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0284; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1285; CHECK-NEXT:    b.l.t (, %s10)286  %r = fptoui float %x to i8287  ret i8 %r288}289 290define signext i16 @f2s(float %x) {291; CHECK-LABEL: f2s:292; CHECK:       # %bb.0:293; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0294; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1295; CHECK-NEXT:    b.l.t (, %s10)296  %r = fptosi float %x to i16297  ret i16 %r298}299 300define zeroext i16 @f2us(float %x) {301; CHECK-LABEL: f2us:302; CHECK:       # %bb.0:303; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0304; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1305; CHECK-NEXT:    b.l.t (, %s10)306  %r = fptoui float %x to i16307  ret i16 %r308}309 310define signext i32 @f2i(float %x) {311; CHECK-LABEL: f2i:312; CHECK:       # %bb.0:313; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0314; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1315; CHECK-NEXT:    b.l.t (, %s10)316  %r = fptosi float %x to i32317  ret i32 %r318}319 320define zeroext i32 @f2ui(float %x) {321; CHECK-LABEL: f2ui:322; CHECK:       # %bb.0:323; CHECK-NEXT:    cvt.d.s %s0, %s0324; CHECK-NEXT:    cvt.l.d.rz %s0, %s0325; CHECK-NEXT:    and %s0, %s0, (32)0326; CHECK-NEXT:    b.l.t (, %s10)327  %r = fptoui float %x to i32328  ret i32 %r329}330 331define i64 @f2ll(float %x) {332; CHECK-LABEL: f2ll:333; CHECK:       # %bb.0:334; CHECK-NEXT:    cvt.d.s %s0, %s0335; CHECK-NEXT:    cvt.l.d.rz %s0, %s0336; CHECK-NEXT:    b.l.t (, %s10)337  %r = fptosi float %x to i64338  ret i64 %r339}340 341define i64 @f2ull(float %x) {342; CHECK-LABEL: f2ull:343; CHECK:       # %bb.0:344; CHECK-NEXT:    lea.sl %s1, 1593835520345; CHECK-NEXT:    fcmp.s %s2, %s0, %s1346; CHECK-NEXT:    fsub.s %s1, %s0, %s1347; CHECK-NEXT:    cvt.d.s %s1, %s1348; CHECK-NEXT:    cvt.l.d.rz %s1, %s1349; CHECK-NEXT:    xor %s1, %s1, (1)1350; CHECK-NEXT:    cvt.d.s %s0, %s0351; CHECK-NEXT:    cvt.l.d.rz %s0, %s0352; CHECK-NEXT:    cmov.s.lt %s1, %s0, %s2353; CHECK-NEXT:    or %s0, 0, %s1354; CHECK-NEXT:    b.l.t (, %s10)355  %r = fptoui float %x to i64356  ret i64 %r357}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 %0364}365 366define double @f2d(float %x) {367; CHECK-LABEL: f2d:368; CHECK:       # %bb.0:369; CHECK-NEXT:    cvt.d.s %s0, %s0370; CHECK-NEXT:    b.l.t (, %s10)371  %r = fpext float %x to double372  ret double %r373}374 375define fp128 @f2q(float) {376; CHECK-LABEL: f2q:377; CHECK:       # %bb.0:378; CHECK-NEXT:    cvt.q.s %s0, %s0379; CHECK-NEXT:    b.l.t (, %s10)380  %2 = fpext float %0 to fp128381  ret fp128 %2382}383 384define signext i8 @ll2c(i64 %0) {385; CHECK-LABEL: ll2c:386; CHECK:       # %bb.0:387; CHECK-NEXT:    sll %s0, %s0, 56388; CHECK-NEXT:    sra.l %s0, %s0, 56389; CHECK-NEXT:    b.l.t (, %s10)390  %2 = trunc i64 %0 to i8391  ret i8 %2392}393 394define zeroext i8 @ll2uc(i64 %0) {395; CHECK-LABEL: ll2uc:396; CHECK:       # %bb.0:397; CHECK-NEXT:    and %s0, %s0, (56)0398; CHECK-NEXT:    b.l.t (, %s10)399  %2 = trunc i64 %0 to i8400  ret i8 %2401}402 403define signext i16 @ll2s(i64 %0) {404; CHECK-LABEL: ll2s:405; CHECK:       # %bb.0:406; CHECK-NEXT:    sll %s0, %s0, 48407; CHECK-NEXT:    sra.l %s0, %s0, 48408; CHECK-NEXT:    b.l.t (, %s10)409  %2 = trunc i64 %0 to i16410  ret i16 %2411}412 413define zeroext i16 @ll2us(i64 %0) {414; CHECK-LABEL: ll2us:415; CHECK:       # %bb.0:416; CHECK-NEXT:    and %s0, %s0, (48)0417; CHECK-NEXT:    b.l.t (, %s10)418  %2 = trunc i64 %0 to i16419  ret i16 %2420}421 422define signext i32 @ll2i(i64 %0) {423; CHECK-LABEL: ll2i:424; CHECK:       # %bb.0:425; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1426; CHECK-NEXT:    b.l.t (, %s10)427  %2 = trunc i64 %0 to i32428  ret i32 %2429}430 431define zeroext i32 @ll2ui(i64 %0) {432; CHECK-LABEL: ll2ui:433; CHECK:       # %bb.0:434; CHECK-NEXT:    and %s0, %s0, (32)0435; CHECK-NEXT:    b.l.t (, %s10)436  %2 = trunc i64 %0 to i32437  ret i32 %2438}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 %0445}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 %0452}453 454define float @ll2f(i64 %x) {455; CHECK-LABEL: ll2f:456; CHECK:       # %bb.0:457; CHECK-NEXT:    cvt.d.l %s0, %s0458; CHECK-NEXT:    cvt.s.d %s0, %s0459; CHECK-NEXT:    b.l.t (, %s10)460  %r = sitofp i64 %x to float461  ret float %r462}463 464define double @ll2d(i64 %x) {465; CHECK-LABEL: ll2d:466; CHECK:       # %bb.0:467; CHECK-NEXT:    cvt.d.l %s0, %s0468; CHECK-NEXT:    b.l.t (, %s10)469  %r = sitofp i64 %x to double470  ret double %r471}472 473define fp128 @ll2q(i64) {474; CHECK-LABEL: ll2q:475; CHECK:       # %bb.0:476; CHECK-NEXT:    cvt.d.l %s0, %s0477; CHECK-NEXT:    cvt.q.d %s0, %s0478; CHECK-NEXT:    b.l.t (, %s10)479  %2 = sitofp i64 %0 to fp128480  ret fp128 %2481}482 483define signext i8 @ull2c(i64 %0) {484; CHECK-LABEL: ull2c:485; CHECK:       # %bb.0:486; CHECK-NEXT:    sll %s0, %s0, 56487; CHECK-NEXT:    sra.l %s0, %s0, 56488; CHECK-NEXT:    b.l.t (, %s10)489  %2 = trunc i64 %0 to i8490  ret i8 %2491}492 493define zeroext i8 @ull2uc(i64 %0) {494; CHECK-LABEL: ull2uc:495; CHECK:       # %bb.0:496; CHECK-NEXT:    and %s0, %s0, (56)0497; CHECK-NEXT:    b.l.t (, %s10)498  %2 = trunc i64 %0 to i8499  ret i8 %2500}501 502define signext i16 @ull2s(i64 %0) {503; CHECK-LABEL: ull2s:504; CHECK:       # %bb.0:505; CHECK-NEXT:    sll %s0, %s0, 48506; CHECK-NEXT:    sra.l %s0, %s0, 48507; CHECK-NEXT:    b.l.t (, %s10)508  %2 = trunc i64 %0 to i16509  ret i16 %2510}511 512define zeroext i16 @ull2us(i64 %0) {513; CHECK-LABEL: ull2us:514; CHECK:       # %bb.0:515; CHECK-NEXT:    and %s0, %s0, (48)0516; CHECK-NEXT:    b.l.t (, %s10)517  %2 = trunc i64 %0 to i16518  ret i16 %2519}520 521define signext i32 @ull2i(i64 %0) {522; CHECK-LABEL: ull2i:523; CHECK:       # %bb.0:524; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1525; CHECK-NEXT:    b.l.t (, %s10)526  %2 = trunc i64 %0 to i32527  ret i32 %2528}529 530define zeroext i32 @ull2ui(i64 %0) {531; CHECK-LABEL: ull2ui:532; CHECK:       # %bb.0:533; CHECK-NEXT:    and %s0, %s0, (32)0534; CHECK-NEXT:    b.l.t (, %s10)535  %2 = trunc i64 %0 to i32536  ret i32 %2537}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 %0544}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 %0551}552 553define float @ull2f(i64 %x) {554; CHECK-LABEL: ull2f:555; CHECK:       # %bb.0:556; CHECK-NEXT:    cvt.d.l %s1, %s0557; CHECK-NEXT:    cvt.s.d %s1, %s1558; CHECK-NEXT:    srl %s2, %s0, 1559; CHECK-NEXT:    and %s3, 1, %s0560; CHECK-NEXT:    or %s2, %s3, %s2561; CHECK-NEXT:    cvt.d.l %s2, %s2562; CHECK-NEXT:    cvt.s.d %s2, %s2563; CHECK-NEXT:    fadd.s %s2, %s2, %s2564; CHECK-NEXT:    cmov.l.lt %s1, %s2, %s0565; CHECK-NEXT:    or %s0, 0, %s1566; CHECK-NEXT:    b.l.t (, %s10)567  %r = uitofp i64 %x to float568  ret float %r569}570 571define float @ull2f_nneg(i64 %x) {572; CHECK-LABEL: ull2f_nneg:573; CHECK:       # %bb.0:574; CHECK-NEXT:    cvt.d.l %s0, %s0575; CHECK-NEXT:    cvt.s.d %s0, %s0576; CHECK-NEXT:    b.l.t (, %s10)577  %r = uitofp nneg i64 %x to float578  ret float %r579}580 581define float @ull2f_strict(i32 %x) {582; CHECK-LABEL: ull2f_strict:583; CHECK:     # %bb.0:584; CHECK-NEXT:	adds.l %s11, -16, %s11585; CHECK-NEXT:		brge.l.t %s11, %s8, .LBB58_2586; CHECK-NEXT:	# %bb.1:587; CHECK-NEXT:		ld %s61, 24(, %s14)588; CHECK-NEXT:		or %s62, 0, %s0589; CHECK-NEXT:		lea %s63, 315590; 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:		monc594; CHECK-NEXT:		or %s0, 0, %s62595; CHECK-NEXT:	.LBB58_2:596; CHECK-NEXT:		lea %s1, 1127219200597; 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, 1127219200601; CHECK-NEXT:		fsub.d %s0, %s0, %s1602; CHECK-NEXT:		cvt.s.d %s0, %s0603; CHECK-NEXT:		adds.l %s11, 16, %s11604; 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 %val607}608 609define double @ull2d(i64 %x) {610; CHECK-LABEL: ull2d:611; CHECK:       # %bb.0:612; CHECK-NEXT:    srl %s1, %s0, 32613; CHECK-NEXT:    lea.sl %s2, 1160773632614; CHECK-NEXT:    or %s1, %s1, %s2615; CHECK-NEXT:    lea %s2, 1048576616; CHECK-NEXT:    lea.sl %s2, -986710016(, %s2)617; CHECK-NEXT:    fadd.d %s1, %s1, %s2618; CHECK-NEXT:    and %s0, %s0, (32)0619; CHECK-NEXT:    lea.sl %s2, 1127219200620; CHECK-NEXT:    or %s0, %s0, %s2621; CHECK-NEXT:    fadd.d %s0, %s0, %s1622; CHECK-NEXT:    b.l.t (, %s10)623  %r = uitofp i64 %x to double624  ret double %r625}626 627define fp128 @ull2q(i64) {628; CHECK-LABEL: ull2q:629; CHECK:       # %bb.0:630; CHECK-NEXT:    srl %s1, %s0, 61631; CHECK-NEXT:    and %s1, 4, %s1632; CHECK-NEXT:    lea %s2, .LCPI{{[0-9]+}}_0@lo633; CHECK-NEXT:    and %s2, %s2, (32)0634; 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, %s1637; CHECK-NEXT:    cvt.d.l %s0, %s0638; CHECK-NEXT:    cvt.q.d %s0, %s0639; CHECK-NEXT:    fadd.q %s0, %s0, %s2640; CHECK-NEXT:    b.l.t (, %s10)641  %2 = uitofp i64 %0 to fp128642  ret fp128 %2643}644 645define signext i8 @i2c(i32 signext %0) {646; CHECK-LABEL: i2c:647; CHECK:       # %bb.0:648; CHECK-NEXT:    sll %s0, %s0, 56649; CHECK-NEXT:    sra.l %s0, %s0, 56650; CHECK-NEXT:    b.l.t (, %s10)651  %2 = trunc i32 %0 to i8652  ret i8 %2653}654 655define zeroext i8 @i2uc(i32 signext %0) {656; CHECK-LABEL: i2uc:657; CHECK:       # %bb.0:658; CHECK-NEXT:    and %s0, %s0, (56)0659; CHECK-NEXT:    b.l.t (, %s10)660  %2 = trunc i32 %0 to i8661  ret i8 %2662}663 664define signext i16 @i2s(i32 signext %0) {665; CHECK-LABEL: i2s:666; CHECK:       # %bb.0:667; CHECK-NEXT:    sll %s0, %s0, 48668; CHECK-NEXT:    sra.l %s0, %s0, 48669; CHECK-NEXT:    b.l.t (, %s10)670  %2 = trunc i32 %0 to i16671  ret i16 %2672}673 674define zeroext i16 @i2us(i32 signext %0) {675; CHECK-LABEL: i2us:676; CHECK:       # %bb.0:677; CHECK-NEXT:    and %s0, %s0, (48)0678; CHECK-NEXT:    b.l.t (, %s10)679  %2 = trunc i32 %0 to i16680  ret i16 %2681}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 %0688}689 690define zeroext i32 @i2ui(i32 signext returned %0) {691; CHECK-LABEL: i2ui:692; CHECK:       # %bb.0:693; CHECK-NEXT:    and %s0, %s0, (32)0694; CHECK-NEXT:    b.l.t (, %s10)695  ret i32 %0696}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 i64703  ret i64 %2704}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 i64711  ret i64 %2712}713 714define float @i2f(i32 signext %x) {715; CHECK-LABEL: i2f:716; CHECK:       # %bb.0:717; CHECK-NEXT:    cvt.s.w %s0, %s0718; CHECK-NEXT:    b.l.t (, %s10)719  %r = sitofp i32 %x to float720  ret float %r721}722 723define double @i2d(i32 signext %x) {724; CHECK-LABEL: i2d:725; CHECK:       # %bb.0:726; CHECK-NEXT:    cvt.d.w %s0, %s0727; CHECK-NEXT:    b.l.t (, %s10)728  %r = sitofp i32 %x to double729  ret double %r730}731 732define fp128 @i2q(i32 signext %x) {733; CHECK-LABEL: i2q:734; CHECK:       # %bb.0:735; CHECK-NEXT:    cvt.d.w %s0, %s0736; CHECK-NEXT:    cvt.q.d %s0, %s0737; CHECK-NEXT:    b.l.t (, %s10)738  %r = sitofp i32 %x to fp128739  ret fp128 %r740}741 742define signext i8 @ui2c(i32 zeroext %0) {743; CHECK-LABEL: ui2c:744; CHECK:       # %bb.0:745; CHECK-NEXT:    sll %s0, %s0, 56746; CHECK-NEXT:    sra.l %s0, %s0, 56747; CHECK-NEXT:    b.l.t (, %s10)748  %2 = trunc i32 %0 to i8749  ret i8 %2750}751 752define zeroext i8 @ui2uc(i32 zeroext %0) {753; CHECK-LABEL: ui2uc:754; CHECK:       # %bb.0:755; CHECK-NEXT:    and %s0, %s0, (56)0756; CHECK-NEXT:    b.l.t (, %s10)757  %2 = trunc i32 %0 to i8758  ret i8 %2759}760 761define signext i16 @ui2s(i32 zeroext %0) {762; CHECK-LABEL: ui2s:763; CHECK:       # %bb.0:764; CHECK-NEXT:    sll %s0, %s0, 48765; CHECK-NEXT:    sra.l %s0, %s0, 48766; CHECK-NEXT:    b.l.t (, %s10)767  %2 = trunc i32 %0 to i16768  ret i16 %2769}770 771define zeroext i16 @ui2us(i32 zeroext %0) {772; CHECK-LABEL: ui2us:773; CHECK:       # %bb.0:774; CHECK-NEXT:    and %s0, %s0, (48)0775; CHECK-NEXT:    b.l.t (, %s10)776  %2 = trunc i32 %0 to i16777  ret i16 %2778}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)1784; CHECK-NEXT:    b.l.t (, %s10)785  ret i32 %0786}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 %0793}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 i64800  ret i64 %2801}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 i64808  ret i64 %2809}810 811define float @ui2f(i32 zeroext %x) {812; CHECK-LABEL: ui2f:813; CHECK:       # %bb.0:814; CHECK-NEXT:    cvt.d.l %s0, %s0815; CHECK-NEXT:    cvt.s.d %s0, %s0816; CHECK-NEXT:    b.l.t (, %s10)817  %r = uitofp i32 %x to float818  ret float %r819}820 821define double @ui2d(i32 zeroext %x) {822; CHECK-LABEL: ui2d:823; CHECK:       # %bb.0:824; CHECK-NEXT:    cvt.d.l %s0, %s0825; CHECK-NEXT:    b.l.t (, %s10)826  %r = uitofp i32 %x to double827  ret double %r828}829 830define fp128 @ui2q(i32 zeroext %0) {831; CHECK-LABEL: ui2q:832; CHECK:       # %bb.0:833; CHECK-NEXT:    cvt.d.l %s0, %s0834; CHECK-NEXT:    cvt.q.d %s0, %s0835; CHECK-NEXT:    b.l.t (, %s10)836  %2 = uitofp i32 %0 to fp128837  ret fp128 %2838}839 840define signext i8 @s2c(i16 signext %0) {841; CHECK-LABEL: s2c:842; CHECK:       # %bb.0:843; CHECK-NEXT:    sll %s0, %s0, 56844; CHECK-NEXT:    sra.l %s0, %s0, 56845; CHECK-NEXT:    b.l.t (, %s10)846  %2 = trunc i16 %0 to i8847  ret i8 %2848}849 850define zeroext i8 @s2uc(i16 signext %0) {851; CHECK-LABEL: s2uc:852; CHECK:       # %bb.0:853; CHECK-NEXT:    and %s0, %s0, (56)0854; CHECK-NEXT:    b.l.t (, %s10)855  %2 = trunc i16 %0 to i8856  ret i8 %2857}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 %0864}865 866define zeroext i16 @s2us(i16 returned signext %0) {867; CHECK-LABEL: s2us:868; CHECK:       # %bb.0:869; CHECK-NEXT:    and %s0, %s0, (48)0870; CHECK-NEXT:    b.l.t (, %s10)871  ret i16 %0872}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 i32879  ret i32 %2880}881 882define zeroext i32 @s2ui(i16 signext %0) {883; CHECK-LABEL: s2ui:884; CHECK:       # %bb.0:885; CHECK-NEXT:    and %s0, %s0, (32)0886; CHECK-NEXT:    b.l.t (, %s10)887  %2 = sext i16 %0 to i32888  ret i32 %2889}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 i64896  ret i64 %2897}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 i64904  ret i64 %2905}906 907define float @s2f(i16 signext %x) {908; CHECK-LABEL: s2f:909; CHECK:       # %bb.0:910; CHECK-NEXT:    cvt.s.w %s0, %s0911; CHECK-NEXT:    b.l.t (, %s10)912  %r = sitofp i16 %x to float913  ret float %r914}915 916define double @s2d(i16 signext %x) {917; CHECK-LABEL: s2d:918; CHECK:       # %bb.0:919; CHECK-NEXT:    cvt.d.w %s0, %s0920; CHECK-NEXT:    b.l.t (, %s10)921  %r = sitofp i16 %x to double922  ret double %r923}924 925define fp128 @s2q(i16 signext) {926; CHECK-LABEL: s2q:927; CHECK:       # %bb.0:928; CHECK-NEXT:    cvt.d.w %s0, %s0929; CHECK-NEXT:    cvt.q.d %s0, %s0930; CHECK-NEXT:    b.l.t (, %s10)931  %2 = sitofp i16 %0 to fp128932  ret fp128 %2933}934 935define signext i8 @us2c(i16 zeroext %0) {936; CHECK-LABEL: us2c:937; CHECK:       # %bb.0:938; CHECK-NEXT:    sll %s0, %s0, 56939; CHECK-NEXT:    sra.l %s0, %s0, 56940; CHECK-NEXT:    b.l.t (, %s10)941  %2 = trunc i16 %0 to i8942  ret i8 %2943}944 945define zeroext i8 @us2uc(i16 zeroext %0) {946; CHECK-LABEL: us2uc:947; CHECK:       # %bb.0:948; CHECK-NEXT:    and %s0, %s0, (56)0949; CHECK-NEXT:    b.l.t (, %s10)950  %2 = trunc i16 %0 to i8951  ret i8 %2952}953 954define signext i16 @us2s(i16 returned zeroext %0) {955; CHECK-LABEL: us2s:956; CHECK:       # %bb.0:957; CHECK-NEXT:    sll %s0, %s0, 48958; CHECK-NEXT:    sra.l %s0, %s0, 48959; CHECK-NEXT:    b.l.t (, %s10)960  ret i16 %0961}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 %0968}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 i32975  ret i32 %2976}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 i32983  ret i32 %2984}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 i64991  ret i64 %2992}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 i64999  ret i64 %21000}1001 1002define float @us2f(i16 zeroext %x) {1003; CHECK-LABEL: us2f:1004; CHECK:       # %bb.0:1005; CHECK-NEXT:    cvt.s.w %s0, %s01006; CHECK-NEXT:    b.l.t (, %s10)1007  %r = uitofp i16 %x to float1008  ret float %r1009}1010 1011define double @us2d(i16 zeroext %x) {1012; CHECK-LABEL: us2d:1013; CHECK:       # %bb.0:1014; CHECK-NEXT:    cvt.d.w %s0, %s01015; CHECK-NEXT:    b.l.t (, %s10)1016  %r = uitofp i16 %x to double1017  ret double %r1018}1019 1020define fp128 @us2q(i16 zeroext) {1021; CHECK-LABEL: us2q:1022; CHECK:       # %bb.0:1023; CHECK-NEXT:    cvt.d.w %s0, %s01024; CHECK-NEXT:    cvt.q.d %s0, %s01025; CHECK-NEXT:    b.l.t (, %s10)1026  %2 = uitofp i16 %0 to fp1281027  ret fp128 %21028}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 %01035}1036 1037define zeroext i8 @c2uc(i8 returned signext %0) {1038; CHECK-LABEL: c2uc:1039; CHECK:       # %bb.0:1040; CHECK-NEXT:    and %s0, %s0, (56)01041; CHECK-NEXT:    b.l.t (, %s10)1042  ret i8 %01043}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 i161050  ret i16 %21051}1052 1053define zeroext i16 @c2us(i8 signext %0) {1054; CHECK-LABEL: c2us:1055; CHECK:       # %bb.0:1056; CHECK-NEXT:    and %s0, %s0, (48)01057; CHECK-NEXT:    b.l.t (, %s10)1058  %2 = sext i8 %0 to i161059  ret i16 %21060}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 i321067  ret i32 %21068}1069 1070define zeroext i32 @c2ui(i8 signext %0) {1071; CHECK-LABEL: c2ui:1072; CHECK:       # %bb.0:1073; CHECK-NEXT:    and %s0, %s0, (32)01074; CHECK-NEXT:    b.l.t (, %s10)1075  %2 = sext i8 %0 to i321076  ret i32 %21077}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 i641084  ret i64 %21085}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 i641092  ret i64 %21093}1094 1095define float @c2f(i8 signext %x) {1096; CHECK-LABEL: c2f:1097; CHECK:       # %bb.0:1098; CHECK-NEXT:    cvt.s.w %s0, %s01099; CHECK-NEXT:    b.l.t (, %s10)1100  %r = sitofp i8 %x to float1101  ret float %r1102}1103 1104define double @c2d(i8 signext %x) {1105; CHECK-LABEL: c2d:1106; CHECK:       # %bb.0:1107; CHECK-NEXT:    cvt.d.w %s0, %s01108; CHECK-NEXT:    b.l.t (, %s10)1109  %r = sitofp i8 %x to double1110  ret double %r1111}1112 1113define fp128 @c2q(i8 signext) {1114; CHECK-LABEL: c2q:1115; CHECK:       # %bb.0:1116; CHECK-NEXT:    cvt.d.w %s0, %s01117; CHECK-NEXT:    cvt.q.d %s0, %s01118; CHECK-NEXT:    b.l.t (, %s10)1119  %2 = sitofp i8 %0 to fp1281120  ret fp128 %21121}1122 1123define signext i8 @uc2c(i8 returned zeroext %0) {1124; CHECK-LABEL: uc2c:1125; CHECK:       # %bb.0:1126; CHECK-NEXT:    sll %s0, %s0, 561127; CHECK-NEXT:    sra.l %s0, %s0, 561128; CHECK-NEXT:    b.l.t (, %s10)1129  ret i8 %01130}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 %01137}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 i161144  ret i16 %21145}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 i161152  ret i16 %21153}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 i321160  ret i32 %21161}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 i321168  ret i32 %21169}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 i641176  ret i64 %21177}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 i641184  ret i64 %21185}1186 1187define float @uc2f(i8 zeroext %x) {1188; CHECK-LABEL: uc2f:1189; CHECK:       # %bb.0:1190; CHECK-NEXT:    cvt.s.w %s0, %s01191; CHECK-NEXT:    b.l.t (, %s10)1192  %r = uitofp i8 %x to float1193  ret float %r1194}1195 1196define double @uc2d(i8 zeroext %x) {1197; CHECK-LABEL: uc2d:1198; CHECK:       # %bb.0:1199; CHECK-NEXT:    cvt.d.w %s0, %s01200; CHECK-NEXT:    b.l.t (, %s10)1201  %r = uitofp i8 %x to double1202  ret double %r1203}1204 1205define fp128 @uc2q(i8 zeroext) {1206; CHECK-LABEL: uc2q:1207; CHECK:       # %bb.0:1208; CHECK-NEXT:    cvt.d.w %s0, %s01209; CHECK-NEXT:    cvt.q.d %s0, %s01210; CHECK-NEXT:    b.l.t (, %s10)1211  %2 = uitofp i8 %0 to fp1281212  ret fp128 %21213}1214 1215; Function Attrs: norecurse nounwind readnone1216define i128 @i128() {1217; CHECK-LABEL: i128:1218; CHECK:       # %bb.0:1219; CHECK-NEXT:    lea %s0, -21474836481220; CHECK-NEXT:    or %s1, -1, (0)11221; CHECK-NEXT:    b.l.t (, %s10)1222  ret i128 -21474836481223}1224 1225; Function Attrs: norecurse nounwind readnone1226define i128 @ui128() {1227; CHECK-LABEL: ui128:1228; CHECK:       # %bb.0:1229; CHECK-NEXT:    lea %s0, -21474836481230; CHECK-NEXT:    or %s1, -1, (0)11231; CHECK-NEXT:    b.l.t (, %s10)1232  ret i128 -21474836481233}1234 1235; Function Attrs: norecurse nounwind readnone1236define signext i8 @i1282c(i128 %0) {1237; CHECK-LABEL: i1282c:1238; CHECK:       # %bb.0:1239; CHECK-NEXT:    sll %s0, %s0, 561240; CHECK-NEXT:    sra.l %s0, %s0, 561241; CHECK-NEXT:    b.l.t (, %s10)1242  %2 = trunc i128 %0 to i81243  ret i8 %21244}1245 1246; Function Attrs: norecurse nounwind readnone1247define signext i8 @ui1282c(i128 %0) {1248; CHECK-LABEL: ui1282c:1249; CHECK:       # %bb.0:1250; CHECK-NEXT:    sll %s0, %s0, 561251; CHECK-NEXT:    sra.l %s0, %s0, 561252; CHECK-NEXT:    b.l.t (, %s10)1253  %2 = trunc i128 %0 to i81254  ret i8 %21255}1256 1257; Function Attrs: norecurse nounwind readnone1258define zeroext i8 @i1282uc(i128 %0) {1259; CHECK-LABEL: i1282uc:1260; CHECK:       # %bb.0:1261; CHECK-NEXT:    and %s0, %s0, (56)01262; CHECK-NEXT:    b.l.t (, %s10)1263  %2 = trunc i128 %0 to i81264  ret i8 %21265}1266 1267; Function Attrs: norecurse nounwind readnone1268define zeroext i8 @ui1282uc(i128 %0) {1269; CHECK-LABEL: ui1282uc:1270; CHECK:       # %bb.0:1271; CHECK-NEXT:    and %s0, %s0, (56)01272; CHECK-NEXT:    b.l.t (, %s10)1273  %2 = trunc i128 %0 to i81274  ret i8 %21275}1276 1277; Function Attrs: norecurse nounwind readnone1278define signext i16 @i1282s(i128 %0) {1279; CHECK-LABEL: i1282s:1280; CHECK:       # %bb.0:1281; CHECK-NEXT:    sll %s0, %s0, 481282; CHECK-NEXT:    sra.l %s0, %s0, 481283; CHECK-NEXT:    b.l.t (, %s10)1284  %2 = trunc i128 %0 to i161285  ret i16 %21286}1287 1288; Function Attrs: norecurse nounwind readnone1289define signext i16 @ui1282s(i128 %0) {1290; CHECK-LABEL: ui1282s:1291; CHECK:       # %bb.0:1292; CHECK-NEXT:    sll %s0, %s0, 481293; CHECK-NEXT:    sra.l %s0, %s0, 481294; CHECK-NEXT:    b.l.t (, %s10)1295  %2 = trunc i128 %0 to i161296  ret i16 %21297}1298 1299; Function Attrs: norecurse nounwind readnone1300define zeroext i16 @i1282us(i128 %0) {1301; CHECK-LABEL: i1282us:1302; CHECK:       # %bb.0:1303; CHECK-NEXT:    and %s0, %s0, (48)01304; CHECK-NEXT:    b.l.t (, %s10)1305  %2 = trunc i128 %0 to i161306  ret i16 %21307}1308 1309; Function Attrs: norecurse nounwind readnone1310define zeroext i16 @ui1282us(i128 %0) {1311; CHECK-LABEL: ui1282us:1312; CHECK:       # %bb.0:1313; CHECK-NEXT:    and %s0, %s0, (48)01314; CHECK-NEXT:    b.l.t (, %s10)1315  %2 = trunc i128 %0 to i161316  ret i16 %21317}1318 1319; Function Attrs: norecurse nounwind readnone1320define signext i32 @i1282i(i128 %0) {1321; CHECK-LABEL: i1282i:1322; CHECK:       # %bb.0:1323; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)11324; CHECK-NEXT:    b.l.t (, %s10)1325  %2 = trunc i128 %0 to i321326  ret i32 %21327}1328 1329; Function Attrs: norecurse nounwind readnone1330define signext i32 @ui1282i(i128 %0) {1331; CHECK-LABEL: ui1282i:1332; CHECK:       # %bb.0:1333; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)11334; CHECK-NEXT:    b.l.t (, %s10)1335  %2 = trunc i128 %0 to i321336  ret i32 %21337}1338 1339; Function Attrs: norecurse nounwind readnone1340define zeroext i32 @i1282ui(i128 %0) {1341; CHECK-LABEL: i1282ui:1342; CHECK:       # %bb.0:1343; CHECK-NEXT:    and %s0, %s0, (32)01344; CHECK-NEXT:    b.l.t (, %s10)1345  %2 = trunc i128 %0 to i321346  ret i32 %21347}1348 1349; Function Attrs: norecurse nounwind readnone1350define zeroext i32 @ui1282ui(i128 %0) {1351; CHECK-LABEL: ui1282ui:1352; CHECK:       # %bb.0:1353; CHECK-NEXT:    and %s0, %s0, (32)01354; CHECK-NEXT:    b.l.t (, %s10)1355  %2 = trunc i128 %0 to i321356  ret i32 %21357}1358 1359; Function Attrs: norecurse nounwind readnone1360define 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 i641365  ret i64 %21366}1367 1368; Function Attrs: norecurse nounwind readnone1369define 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 i641374  ret i64 %21375}1376 1377; Function Attrs: norecurse nounwind readnone1378define 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 i641383  ret i64 %21384}1385 1386; Function Attrs: norecurse nounwind readnone1387define 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 i641392  ret i64 %21393}1394 1395; Function Attrs: norecurse nounwind readnone1396define i128 @i1282ui128(i128 returned %0) {1397; CHECK-LABEL: i1282ui128:1398; CHECK:       # %bb.0:1399; CHECK-NEXT:    b.l.t (, %s10)1400  ret i128 %01401}1402 1403; Function Attrs: norecurse nounwind readnone1404define i128 @ui1282i128(i128 returned %0) {1405; CHECK-LABEL: ui1282i128:1406; CHECK:       # %bb.0:1407; CHECK-NEXT:    b.l.t (, %s10)1408  ret i128 %01409}1410 1411; Function Attrs: norecurse nounwind readnone1412define float @i1282f(i128) {1413; CHECK-LABEL: i1282f:1414; CHECK:       .LBB{{[0-9]+}}_2:1415; CHECK-NEXT:    lea %s2, __floattisf@lo1416; CHECK-NEXT:    and %s2, %s2, (32)01417; CHECK-NEXT:    lea.sl %s12, __floattisf@hi(, %s2)1418; CHECK-NEXT:    bsic %s10, (, %s12)1419; CHECK-NEXT:    or %s11, 0, %s91420  %2 = sitofp i128 %0 to float1421  ret float %21422}1423 1424; Function Attrs: norecurse nounwind readnone1425define float @ui1282f(i128) {1426; CHECK-LABEL: ui1282f:1427; CHECK:       .LBB{{[0-9]+}}_2:1428; CHECK-NEXT:    lea %s2, __floatuntisf@lo1429; CHECK-NEXT:    and %s2, %s2, (32)01430; CHECK-NEXT:    lea.sl %s12, __floatuntisf@hi(, %s2)1431; CHECK-NEXT:    bsic %s10, (, %s12)1432; CHECK-NEXT:    or %s11, 0, %s91433  %2 = uitofp i128 %0 to float1434  ret float %21435}1436 1437; Function Attrs: norecurse nounwind readnone1438define double @i1282d(i128) {1439; CHECK-LABEL: i1282d:1440; CHECK:       .LBB{{[0-9]+}}_2:1441; CHECK-NEXT:    lea %s2, __floattidf@lo1442; CHECK-NEXT:    and %s2, %s2, (32)01443; CHECK-NEXT:    lea.sl %s12, __floattidf@hi(, %s2)1444; CHECK-NEXT:    bsic %s10, (, %s12)1445; CHECK-NEXT:    or %s11, 0, %s91446  %2 = sitofp i128 %0 to double1447  ret double %21448}1449 1450; Function Attrs: norecurse nounwind readnone1451define double @ui1282d(i128) {1452; CHECK-LABEL: ui1282d:1453; CHECK:       .LBB{{[0-9]+}}_2:1454; CHECK-NEXT:    lea %s2, __floatuntidf@lo1455; CHECK-NEXT:    and %s2, %s2, (32)01456; CHECK-NEXT:    lea.sl %s12, __floatuntidf@hi(, %s2)1457; CHECK-NEXT:    bsic %s10, (, %s12)1458; CHECK-NEXT:    or %s11, 0, %s91459  %2 = uitofp i128 %0 to double1460  ret double %21461}1462 1463; Function Attrs: norecurse nounwind readnone1464define i128 @d2i128(double) {1465; CHECK-LABEL: d2i128:1466; CHECK:       .LBB{{[0-9]+}}_2:1467; CHECK-NEXT:    lea %s1, __fixdfti@lo1468; CHECK-NEXT:    and %s1, %s1, (32)01469; CHECK-NEXT:    lea.sl %s12, __fixdfti@hi(, %s1)1470; CHECK-NEXT:    bsic %s10, (, %s12)1471; CHECK-NEXT:    or %s11, 0, %s91472  %2 = fptosi double %0 to i1281473  ret i128 %21474}1475 1476; Function Attrs: norecurse nounwind readnone1477define i128 @d2ui128(double) {1478; CHECK-LABEL: d2ui128:1479; CHECK:       .LBB{{[0-9]+}}_2:1480; CHECK-NEXT:    lea %s1, __fixunsdfti@lo1481; CHECK-NEXT:    and %s1, %s1, (32)01482; CHECK-NEXT:    lea.sl %s12, __fixunsdfti@hi(, %s1)1483; CHECK-NEXT:    bsic %s10, (, %s12)1484; CHECK-NEXT:    or %s11, 0, %s91485  %2 = fptoui double %0 to i1281486  ret i128 %21487}1488 1489; Function Attrs: norecurse nounwind readnone1490define i128 @f2i128(float) {1491; CHECK-LABEL: f2i128:1492; CHECK:       .LBB{{[0-9]+}}_2:1493; CHECK-NEXT:    lea %s1, __fixsfti@lo1494; CHECK-NEXT:    and %s1, %s1, (32)01495; CHECK-NEXT:    lea.sl %s12, __fixsfti@hi(, %s1)1496; CHECK-NEXT:    bsic %s10, (, %s12)1497; CHECK-NEXT:    or %s11, 0, %s91498  %2 = fptosi float %0 to i1281499  ret i128 %21500}1501 1502; Function Attrs: norecurse nounwind readnone1503define i128 @f2ui128(float) {1504; CHECK-LABEL: f2ui128:1505; CHECK:       .LBB{{[0-9]+}}_2:1506; CHECK-NEXT:    lea %s1, __fixunssfti@lo1507; CHECK-NEXT:    and %s1, %s1, (32)01508; CHECK-NEXT:    lea.sl %s12, __fixunssfti@hi(, %s1)1509; CHECK-NEXT:    bsic %s10, (, %s12)1510; CHECK-NEXT:    or %s11, 0, %s91511  %2 = fptoui float %0 to i1281512  ret i128 %21513}1514 1515; Function Attrs: norecurse nounwind readnone1516define i128 @ll2i128(i64 %0) {1517; CHECK-LABEL: ll2i128:1518; CHECK:       # %bb.0:1519; CHECK-NEXT:    sra.l %s1, %s0, 631520; CHECK-NEXT:    b.l.t (, %s10)1521  %2 = sext i64 %0 to i1281522  ret i128 %21523}1524 1525; Function Attrs: norecurse nounwind readnone1526define i128 @ll2ui128(i64 %0) {1527; CHECK-LABEL: ll2ui128:1528; CHECK:       # %bb.0:1529; CHECK-NEXT:    sra.l %s1, %s0, 631530; CHECK-NEXT:    b.l.t (, %s10)1531  %2 = sext i64 %0 to i1281532  ret i128 %21533}1534 1535; Function Attrs: norecurse nounwind readnone1536define i128 @ull2i128(i64 %0) {1537; CHECK-LABEL: ull2i128:1538; CHECK:       # %bb.0:1539; CHECK-NEXT:    or %s1, 0, (0)11540; CHECK-NEXT:    b.l.t (, %s10)1541  %2 = zext i64 %0 to i1281542  ret i128 %21543}1544 1545; Function Attrs: norecurse nounwind readnone1546define i128 @ull2ui128(i64 %0) {1547; CHECK-LABEL: ull2ui128:1548; CHECK:       # %bb.0:1549; CHECK-NEXT:    or %s1, 0, (0)11550; CHECK-NEXT:    b.l.t (, %s10)1551  %2 = zext i64 %0 to i1281552  ret i128 %21553}1554 1555; Function Attrs: norecurse nounwind readnone1556define i128 @i2i128(i32 signext %0) {1557; CHECK-LABEL: i2i128:1558; CHECK:       # %bb.0:1559; CHECK-NEXT:    sra.l %s1, %s0, 631560; CHECK-NEXT:    b.l.t (, %s10)1561  %2 = sext i32 %0 to i1281562  ret i128 %21563}1564 1565; Function Attrs: norecurse nounwind readnone1566define i128 @i2ui128(i32 signext %0) {1567; CHECK-LABEL: i2ui128:1568; CHECK:       # %bb.0:1569; CHECK-NEXT:    sra.l %s1, %s0, 631570; CHECK-NEXT:    b.l.t (, %s10)1571  %2 = sext i32 %0 to i1281572  ret i128 %21573}1574 1575; Function Attrs: norecurse nounwind readnone1576define i128 @ui2i128(i32 zeroext %0) {1577; CHECK-LABEL: ui2i128:1578; CHECK:       # %bb.0:1579; CHECK-NEXT:    or %s1, 0, (0)11580; CHECK-NEXT:    b.l.t (, %s10)1581  %2 = zext i32 %0 to i1281582  ret i128 %21583}1584 1585; Function Attrs: norecurse nounwind readnone1586define i128 @ui2ui128(i32 zeroext %0) {1587; CHECK-LABEL: ui2ui128:1588; CHECK:       # %bb.0:1589; CHECK-NEXT:    or %s1, 0, (0)11590; CHECK-NEXT:    b.l.t (, %s10)1591  %2 = zext i32 %0 to i1281592  ret i128 %21593}1594 1595; Function Attrs: norecurse nounwind readnone1596define i128 @s2i128(i16 signext %0) {1597; CHECK-LABEL: s2i128:1598; CHECK:       # %bb.0:1599; CHECK-NEXT:    sra.l %s1, %s0, 631600; CHECK-NEXT:    b.l.t (, %s10)1601  %2 = sext i16 %0 to i1281602  ret i128 %21603}1604 1605; Function Attrs: norecurse nounwind readnone1606define i128 @s2ui128(i16 signext %0) {1607; CHECK-LABEL: s2ui128:1608; CHECK:       # %bb.0:1609; CHECK-NEXT:    sra.l %s1, %s0, 631610; CHECK-NEXT:    b.l.t (, %s10)1611  %2 = sext i16 %0 to i1281612  ret i128 %21613}1614 1615; Function Attrs: norecurse nounwind readnone1616define i128 @us2i128(i16 zeroext %0) {1617; CHECK-LABEL: us2i128:1618; CHECK:       # %bb.0:1619; CHECK-NEXT:    or %s1, 0, (0)11620; CHECK-NEXT:    b.l.t (, %s10)1621  %2 = zext i16 %0 to i1281622  ret i128 %21623}1624 1625; Function Attrs: norecurse nounwind readnone1626define i128 @us2ui128(i16 zeroext %0) {1627; CHECK-LABEL: us2ui128:1628; CHECK:       # %bb.0:1629; CHECK-NEXT:    or %s1, 0, (0)11630; CHECK-NEXT:    b.l.t (, %s10)1631  %2 = zext i16 %0 to i1281632  ret i128 %21633}1634 1635; Function Attrs: norecurse nounwind readnone1636define i128 @c2i128(i8 signext %0) {1637; CHECK-LABEL: c2i128:1638; CHECK:       # %bb.0:1639; CHECK-NEXT:    sra.l %s1, %s0, 631640; CHECK-NEXT:    b.l.t (, %s10)1641  %2 = sext i8 %0 to i1281642  ret i128 %21643}1644 1645; Function Attrs: norecurse nounwind readnone1646define i128 @char2ui128(i8 signext %0) {1647; CHECK-LABEL: char2ui128:1648; CHECK:       # %bb.0:1649; CHECK-NEXT:    sra.l %s1, %s0, 631650; CHECK-NEXT:    b.l.t (, %s10)1651  %2 = sext i8 %0 to i1281652  ret i128 %21653}1654 1655; Function Attrs: norecurse nounwind readnone1656define i128 @uc2i128(i8 zeroext %0) {1657; CHECK-LABEL: uc2i128:1658; CHECK:       # %bb.0:1659; CHECK-NEXT:    or %s1, 0, (0)11660; CHECK-NEXT:    b.l.t (, %s10)1661  %2 = zext i8 %0 to i1281662  ret i128 %21663}1664 1665; Function Attrs: norecurse nounwind readnone1666define i128 @uc2ui128(i8 zeroext %0) {1667; CHECK-LABEL: uc2ui128:1668; CHECK:       # %bb.0:1669; CHECK-NEXT:    or %s1, 0, (0)11670; CHECK-NEXT:    b.l.t (, %s10)1671  %2 = zext i8 %0 to i1281672  ret i128 %21673}1674