592 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -mtriple=x86_64-- --expand-fp < %s | FileCheck %s3; RUN: opt -S -mtriple=x86_64-- -passes=expand-fp < %s | FileCheck %s4 5define half @ui129tohalf(i129 %a) {6; CHECK-LABEL: @ui129tohalf(7; CHECK-NEXT: itofp-entry:8; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 09; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]]10; CHECK: itofp-if-end:11; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 12812; CHECK-NEXT: [[TMP2:%.*]] = xor i129 [[TMP1]], [[A]]13; CHECK-NEXT: [[TMP3:%.*]] = sub i129 [[TMP2]], [[TMP1]]14; CHECK-NEXT: [[TMP4:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true)15; CHECK-NEXT: [[TMP5:%.*]] = trunc i129 [[TMP4]] to i3216; CHECK-NEXT: [[TMP6:%.*]] = sub i32 129, [[TMP5]]17; CHECK-NEXT: [[TMP7:%.*]] = sub i32 128, [[TMP5]]18; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i32 [[TMP6]], 2419; CHECK-NEXT: br i1 [[TMP8]], label [[ITOFP_IF_THEN4:%.*]], label [[ITOFP_IF_ELSE:%.*]]20; CHECK: itofp-if-then4:21; CHECK-NEXT: switch i32 [[TMP6]], label [[ITOFP_SW_DEFAULT:%.*]] [22; CHECK-NEXT: i32 25, label [[ITOFP_SW_BB:%.*]]23; CHECK-NEXT: i32 26, label [[ITOFP_SW_EPILOG:%.*]]24; CHECK-NEXT: ]25; CHECK: itofp-sw-bb:26; CHECK-NEXT: [[TMP9:%.*]] = shl i129 [[A]], 127; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]28; CHECK: itofp-sw-default:29; CHECK-NEXT: [[TMP10:%.*]] = sub i32 103, [[TMP5]]30; CHECK-NEXT: [[TMP11:%.*]] = zext i32 [[TMP10]] to i12931; CHECK-NEXT: [[TMP12:%.*]] = lshr i129 [[A]], [[TMP11]]32; CHECK-NEXT: [[TMP13:%.*]] = add i32 [[TMP5]], 2633; CHECK-NEXT: [[TMP14:%.*]] = zext i32 [[TMP13]] to i12934; CHECK-NEXT: [[TMP15:%.*]] = lshr i129 -1, [[TMP14]]35; CHECK-NEXT: [[TMP16:%.*]] = and i129 [[TMP15]], [[A]]36; CHECK-NEXT: [[TMP17:%.*]] = icmp ne i129 [[TMP16]], 037; CHECK-NEXT: [[TMP18:%.*]] = zext i1 [[TMP17]] to i12938; CHECK-NEXT: [[TMP19:%.*]] = or i129 [[TMP12]], [[TMP18]]39; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]40; CHECK: itofp-sw-epilog:41; CHECK-NEXT: [[TMP20:%.*]] = phi i129 [ [[TMP19]], [[ITOFP_SW_DEFAULT]] ], [ [[A]], [[ITOFP_IF_THEN4]] ], [ [[TMP9]], [[ITOFP_SW_BB]] ]42; CHECK-NEXT: [[TMP21:%.*]] = trunc i129 [[TMP20]] to i3243; CHECK-NEXT: [[TMP22:%.*]] = lshr i32 [[TMP21]], 244; CHECK-NEXT: [[TMP23:%.*]] = and i32 [[TMP22]], 145; CHECK-NEXT: [[TMP24:%.*]] = zext i32 [[TMP23]] to i12946; CHECK-NEXT: [[TMP25:%.*]] = or i129 [[TMP20]], [[TMP24]]47; CHECK-NEXT: [[TMP26:%.*]] = add i129 [[TMP25]], 148; CHECK-NEXT: [[TMP27:%.*]] = lshr i129 [[TMP26]], 249; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP26]], 6710886450; CHECK-NEXT: [[TMP28:%.*]] = icmp eq i129 [[A3]], 051; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP27]] to i3252; CHECK-NEXT: [[TMP30:%.*]] = lshr i129 [[TMP27]], 3253; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i3254; CHECK-NEXT: br i1 [[TMP28]], label [[ITOFP_IF_END26:%.*]], label [[ITOFP_IF_THEN20:%.*]]55; CHECK: itofp-if-then20:56; CHECK-NEXT: [[TMP32:%.*]] = lshr i129 [[TMP26]], 357; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP32]] to i3258; CHECK-NEXT: [[TMP34:%.*]] = lshr i129 [[TMP32]], 3259; CHECK-NEXT: [[TMP35:%.*]] = trunc i129 [[TMP34]] to i3260; CHECK-NEXT: br label [[ITOFP_IF_END26]]61; CHECK: itofp-if-else:62; CHECK-NEXT: [[TMP36:%.*]] = add i32 [[TMP5]], -10563; CHECK-NEXT: [[TMP37:%.*]] = zext i32 [[TMP36]] to i12964; CHECK-NEXT: [[TMP38:%.*]] = shl i129 [[A]], [[TMP37]]65; CHECK-NEXT: [[TMP39:%.*]] = trunc i129 [[TMP38]] to i3266; CHECK-NEXT: [[TMP40:%.*]] = lshr i129 [[TMP38]], 3267; CHECK-NEXT: [[TMP41:%.*]] = trunc i129 [[TMP40]] to i3268; CHECK-NEXT: br label [[ITOFP_IF_END26]]69; CHECK: itofp-if-end26:70; CHECK-NEXT: [[TMP42:%.*]] = phi i32 [ [[TMP33]], [[ITOFP_IF_THEN20]] ], [ [[TMP29]], [[ITOFP_SW_EPILOG]] ], [ [[TMP39]], [[ITOFP_IF_ELSE]] ]71; CHECK-NEXT: [[TMP43:%.*]] = phi i32 [ [[TMP6]], [[ITOFP_IF_THEN20]] ], [ [[TMP7]], [[ITOFP_SW_EPILOG]] ], [ [[TMP7]], [[ITOFP_IF_ELSE]] ]72; CHECK-NEXT: [[TMP44:%.*]] = trunc i129 [[TMP1]] to i3273; CHECK-NEXT: [[TMP45:%.*]] = and i32 [[TMP44]], -214748364874; CHECK-NEXT: [[TMP46:%.*]] = shl i32 [[TMP43]], 2375; CHECK-NEXT: [[TMP47:%.*]] = add i32 [[TMP46]], 106535321676; CHECK-NEXT: [[TMP48:%.*]] = and i32 [[TMP42]], 838860777; CHECK-NEXT: [[TMP49:%.*]] = or i32 [[TMP48]], [[TMP45]]78; CHECK-NEXT: [[TMP50:%.*]] = or i32 [[TMP48]], [[TMP47]]79; CHECK-NEXT: [[TMP51:%.*]] = bitcast i32 [[TMP50]] to float80; CHECK-NEXT: [[TMP52:%.*]] = fptrunc float [[TMP51]] to half81; CHECK-NEXT: br label [[ITOFP_RETURN]]82; CHECK: itofp-return:83; CHECK-NEXT: [[TMP53:%.*]] = phi half [ [[TMP52]], [[ITOFP_IF_END26]] ], [ 0xH0000, [[ITOFP_ENTRY:%.*]] ]84; CHECK-NEXT: ret half [[TMP53]]85;86 %conv = uitofp i129 %a to half87 ret half %conv88}89 90define float @ui129tofloat(i129 %a) {91; CHECK-LABEL: @ui129tofloat(92; CHECK-NEXT: itofp-entry:93; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 094; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]]95; CHECK: itofp-if-end:96; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 12897; CHECK-NEXT: [[TMP2:%.*]] = xor i129 [[TMP1]], [[A]]98; CHECK-NEXT: [[TMP3:%.*]] = sub i129 [[TMP2]], [[TMP1]]99; CHECK-NEXT: [[TMP4:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true)100; CHECK-NEXT: [[TMP5:%.*]] = trunc i129 [[TMP4]] to i32101; CHECK-NEXT: [[TMP6:%.*]] = sub i32 129, [[TMP5]]102; CHECK-NEXT: [[TMP7:%.*]] = sub i32 128, [[TMP5]]103; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i32 [[TMP6]], 24104; CHECK-NEXT: br i1 [[TMP8]], label [[ITOFP_IF_THEN4:%.*]], label [[ITOFP_IF_ELSE:%.*]]105; CHECK: itofp-if-then4:106; CHECK-NEXT: switch i32 [[TMP6]], label [[ITOFP_SW_DEFAULT:%.*]] [107; CHECK-NEXT: i32 25, label [[ITOFP_SW_BB:%.*]]108; CHECK-NEXT: i32 26, label [[ITOFP_SW_EPILOG:%.*]]109; CHECK-NEXT: ]110; CHECK: itofp-sw-bb:111; CHECK-NEXT: [[TMP9:%.*]] = shl i129 [[A]], 1112; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]113; CHECK: itofp-sw-default:114; CHECK-NEXT: [[TMP10:%.*]] = sub i32 103, [[TMP5]]115; CHECK-NEXT: [[TMP11:%.*]] = zext i32 [[TMP10]] to i129116; CHECK-NEXT: [[TMP12:%.*]] = lshr i129 [[A]], [[TMP11]]117; CHECK-NEXT: [[TMP13:%.*]] = add i32 [[TMP5]], 26118; CHECK-NEXT: [[TMP14:%.*]] = zext i32 [[TMP13]] to i129119; CHECK-NEXT: [[TMP15:%.*]] = lshr i129 -1, [[TMP14]]120; CHECK-NEXT: [[TMP16:%.*]] = and i129 [[TMP15]], [[A]]121; CHECK-NEXT: [[TMP17:%.*]] = icmp ne i129 [[TMP16]], 0122; CHECK-NEXT: [[TMP18:%.*]] = zext i1 [[TMP17]] to i129123; CHECK-NEXT: [[TMP19:%.*]] = or i129 [[TMP12]], [[TMP18]]124; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]125; CHECK: itofp-sw-epilog:126; CHECK-NEXT: [[TMP20:%.*]] = phi i129 [ [[TMP19]], [[ITOFP_SW_DEFAULT]] ], [ [[A]], [[ITOFP_IF_THEN4]] ], [ [[TMP9]], [[ITOFP_SW_BB]] ]127; CHECK-NEXT: [[TMP21:%.*]] = trunc i129 [[TMP20]] to i32128; CHECK-NEXT: [[TMP22:%.*]] = lshr i32 [[TMP21]], 2129; CHECK-NEXT: [[TMP23:%.*]] = and i32 [[TMP22]], 1130; CHECK-NEXT: [[TMP24:%.*]] = zext i32 [[TMP23]] to i129131; CHECK-NEXT: [[TMP25:%.*]] = or i129 [[TMP20]], [[TMP24]]132; CHECK-NEXT: [[TMP26:%.*]] = add i129 [[TMP25]], 1133; CHECK-NEXT: [[TMP27:%.*]] = lshr i129 [[TMP26]], 2134; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP26]], 67108864135; CHECK-NEXT: [[TMP28:%.*]] = icmp eq i129 [[A3]], 0136; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP27]] to i32137; CHECK-NEXT: [[TMP30:%.*]] = lshr i129 [[TMP27]], 32138; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i32139; CHECK-NEXT: br i1 [[TMP28]], label [[ITOFP_IF_END26:%.*]], label [[ITOFP_IF_THEN20:%.*]]140; CHECK: itofp-if-then20:141; CHECK-NEXT: [[TMP32:%.*]] = lshr i129 [[TMP26]], 3142; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP32]] to i32143; CHECK-NEXT: [[TMP34:%.*]] = lshr i129 [[TMP32]], 32144; CHECK-NEXT: [[TMP35:%.*]] = trunc i129 [[TMP34]] to i32145; CHECK-NEXT: br label [[ITOFP_IF_END26]]146; CHECK: itofp-if-else:147; CHECK-NEXT: [[TMP36:%.*]] = add i32 [[TMP5]], -105148; CHECK-NEXT: [[TMP37:%.*]] = zext i32 [[TMP36]] to i129149; CHECK-NEXT: [[TMP38:%.*]] = shl i129 [[A]], [[TMP37]]150; CHECK-NEXT: [[TMP39:%.*]] = trunc i129 [[TMP38]] to i32151; CHECK-NEXT: [[TMP40:%.*]] = lshr i129 [[TMP38]], 32152; CHECK-NEXT: [[TMP41:%.*]] = trunc i129 [[TMP40]] to i32153; CHECK-NEXT: br label [[ITOFP_IF_END26]]154; CHECK: itofp-if-end26:155; CHECK-NEXT: [[TMP42:%.*]] = phi i32 [ [[TMP33]], [[ITOFP_IF_THEN20]] ], [ [[TMP29]], [[ITOFP_SW_EPILOG]] ], [ [[TMP39]], [[ITOFP_IF_ELSE]] ]156; CHECK-NEXT: [[TMP43:%.*]] = phi i32 [ [[TMP6]], [[ITOFP_IF_THEN20]] ], [ [[TMP7]], [[ITOFP_SW_EPILOG]] ], [ [[TMP7]], [[ITOFP_IF_ELSE]] ]157; CHECK-NEXT: [[TMP44:%.*]] = trunc i129 [[TMP1]] to i32158; CHECK-NEXT: [[TMP45:%.*]] = and i32 [[TMP44]], -2147483648159; CHECK-NEXT: [[TMP46:%.*]] = shl i32 [[TMP43]], 23160; CHECK-NEXT: [[TMP47:%.*]] = add i32 [[TMP46]], 1065353216161; CHECK-NEXT: [[TMP48:%.*]] = and i32 [[TMP42]], 8388607162; CHECK-NEXT: [[TMP49:%.*]] = or i32 [[TMP48]], [[TMP45]]163; CHECK-NEXT: [[TMP50:%.*]] = or i32 [[TMP48]], [[TMP47]]164; CHECK-NEXT: [[TMP51:%.*]] = bitcast i32 [[TMP50]] to float165; CHECK-NEXT: br label [[ITOFP_RETURN]]166; CHECK: itofp-return:167; CHECK-NEXT: [[TMP52:%.*]] = phi float [ [[TMP51]], [[ITOFP_IF_END26]] ], [ 0.000000e+00, [[ITOFP_ENTRY:%.*]] ]168; CHECK-NEXT: ret float [[TMP52]]169;170 %conv = uitofp i129 %a to float171 ret float %conv172}173 174define double @ui129todouble(i129 %a) {175; CHECK-LABEL: @ui129todouble(176; CHECK-NEXT: itofp-entry:177; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 0178; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]]179; CHECK: itofp-if-end:180; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 128181; CHECK-NEXT: [[TMP2:%.*]] = xor i129 [[TMP1]], [[A]]182; CHECK-NEXT: [[TMP3:%.*]] = sub i129 [[TMP2]], [[TMP1]]183; CHECK-NEXT: [[TMP4:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true)184; CHECK-NEXT: [[TMP5:%.*]] = trunc i129 [[TMP4]] to i32185; CHECK-NEXT: [[TMP6:%.*]] = sub i32 129, [[TMP5]]186; CHECK-NEXT: [[TMP7:%.*]] = sub i32 128, [[TMP5]]187; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i32 [[TMP6]], 53188; CHECK-NEXT: br i1 [[TMP8]], label [[ITOFP_IF_THEN4:%.*]], label [[ITOFP_IF_ELSE:%.*]]189; CHECK: itofp-if-then4:190; CHECK-NEXT: switch i32 [[TMP6]], label [[ITOFP_SW_DEFAULT:%.*]] [191; CHECK-NEXT: i32 54, label [[ITOFP_SW_BB:%.*]]192; CHECK-NEXT: i32 55, label [[ITOFP_SW_EPILOG:%.*]]193; CHECK-NEXT: ]194; CHECK: itofp-sw-bb:195; CHECK-NEXT: [[TMP9:%.*]] = shl i129 [[A]], 1196; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]197; CHECK: itofp-sw-default:198; CHECK-NEXT: [[TMP10:%.*]] = sub i32 74, [[TMP5]]199; CHECK-NEXT: [[TMP11:%.*]] = zext i32 [[TMP10]] to i129200; CHECK-NEXT: [[TMP12:%.*]] = lshr i129 [[A]], [[TMP11]]201; CHECK-NEXT: [[TMP13:%.*]] = add i32 [[TMP5]], 55202; CHECK-NEXT: [[TMP14:%.*]] = zext i32 [[TMP13]] to i129203; CHECK-NEXT: [[TMP15:%.*]] = lshr i129 -1, [[TMP14]]204; CHECK-NEXT: [[TMP16:%.*]] = and i129 [[TMP15]], [[A]]205; CHECK-NEXT: [[TMP17:%.*]] = icmp ne i129 [[TMP16]], 0206; CHECK-NEXT: [[TMP18:%.*]] = zext i1 [[TMP17]] to i129207; CHECK-NEXT: [[TMP19:%.*]] = or i129 [[TMP12]], [[TMP18]]208; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]209; CHECK: itofp-sw-epilog:210; CHECK-NEXT: [[TMP20:%.*]] = phi i129 [ [[TMP19]], [[ITOFP_SW_DEFAULT]] ], [ [[A]], [[ITOFP_IF_THEN4]] ], [ [[TMP9]], [[ITOFP_SW_BB]] ]211; CHECK-NEXT: [[TMP21:%.*]] = trunc i129 [[TMP20]] to i32212; CHECK-NEXT: [[TMP22:%.*]] = lshr i32 [[TMP21]], 2213; CHECK-NEXT: [[TMP23:%.*]] = and i32 [[TMP22]], 1214; CHECK-NEXT: [[TMP24:%.*]] = zext i32 [[TMP23]] to i129215; CHECK-NEXT: [[TMP25:%.*]] = or i129 [[TMP20]], [[TMP24]]216; CHECK-NEXT: [[TMP26:%.*]] = add i129 [[TMP25]], 1217; CHECK-NEXT: [[TMP27:%.*]] = lshr i129 [[TMP26]], 2218; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP26]], 36028797018963968219; CHECK-NEXT: [[TMP28:%.*]] = icmp eq i129 [[A3]], 0220; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP27]] to i64221; CHECK-NEXT: [[TMP30:%.*]] = lshr i129 [[TMP27]], 32222; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i32223; CHECK-NEXT: br i1 [[TMP28]], label [[ITOFP_IF_END26:%.*]], label [[ITOFP_IF_THEN20:%.*]]224; CHECK: itofp-if-then20:225; CHECK-NEXT: [[TMP32:%.*]] = lshr i129 [[TMP26]], 3226; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP32]] to i64227; CHECK-NEXT: [[TMP34:%.*]] = lshr i129 [[TMP32]], 32228; CHECK-NEXT: [[TMP35:%.*]] = trunc i129 [[TMP34]] to i32229; CHECK-NEXT: br label [[ITOFP_IF_END26]]230; CHECK: itofp-if-else:231; CHECK-NEXT: [[TMP36:%.*]] = add i32 [[TMP5]], -76232; CHECK-NEXT: [[TMP37:%.*]] = zext i32 [[TMP36]] to i129233; CHECK-NEXT: [[TMP38:%.*]] = shl i129 [[A]], [[TMP37]]234; CHECK-NEXT: [[TMP39:%.*]] = trunc i129 [[TMP38]] to i64235; CHECK-NEXT: [[TMP40:%.*]] = lshr i129 [[TMP38]], 32236; CHECK-NEXT: [[TMP41:%.*]] = trunc i129 [[TMP40]] to i32237; CHECK-NEXT: br label [[ITOFP_IF_END26]]238; CHECK: itofp-if-end26:239; CHECK-NEXT: [[TMP42:%.*]] = phi i64 [ [[TMP33]], [[ITOFP_IF_THEN20]] ], [ [[TMP29]], [[ITOFP_SW_EPILOG]] ], [ [[TMP39]], [[ITOFP_IF_ELSE]] ]240; CHECK-NEXT: [[TMP43:%.*]] = phi i32 [ [[TMP35]], [[ITOFP_IF_THEN20]] ], [ [[TMP31]], [[ITOFP_SW_EPILOG]] ], [ [[TMP41]], [[ITOFP_IF_ELSE]] ]241; CHECK-NEXT: [[TMP44:%.*]] = phi i32 [ [[TMP6]], [[ITOFP_IF_THEN20]] ], [ [[TMP7]], [[ITOFP_SW_EPILOG]] ], [ [[TMP7]], [[ITOFP_IF_ELSE]] ]242; CHECK-NEXT: [[TMP45:%.*]] = trunc i129 [[TMP1]] to i32243; CHECK-NEXT: [[TMP46:%.*]] = and i32 [[TMP45]], -2147483648244; CHECK-NEXT: [[TMP47:%.*]] = shl i32 [[TMP44]], 20245; CHECK-NEXT: [[TMP48:%.*]] = add i32 [[TMP47]], 1072693248246; CHECK-NEXT: [[TMP49:%.*]] = and i32 [[TMP43]], 1048575247; CHECK-NEXT: [[TMP50:%.*]] = or i32 [[TMP49]], [[TMP46]]248; CHECK-NEXT: [[TMP51:%.*]] = or i32 [[TMP49]], [[TMP48]]249; CHECK-NEXT: [[TMP52:%.*]] = zext i32 [[TMP51]] to i64250; CHECK-NEXT: [[TMP53:%.*]] = shl i64 [[TMP52]], 32251; CHECK-NEXT: [[TMP54:%.*]] = and i64 [[TMP42]], 4294967295252; CHECK-NEXT: [[TMP55:%.*]] = or i64 [[TMP53]], [[TMP54]]253; CHECK-NEXT: [[TMP56:%.*]] = bitcast i64 [[TMP55]] to double254; CHECK-NEXT: br label [[ITOFP_RETURN]]255; CHECK: itofp-return:256; CHECK-NEXT: [[TMP57:%.*]] = phi double [ [[TMP56]], [[ITOFP_IF_END26]] ], [ 0.000000e+00, [[ITOFP_ENTRY:%.*]] ]257; CHECK-NEXT: ret double [[TMP57]]258;259 %conv = uitofp i129 %a to double260 ret double %conv261}262 263define x86_fp80 @ui129tox86_fp80(i129 %a) {264; CHECK-LABEL: @ui129tox86_fp80(265; CHECK-NEXT: itofp-entry:266; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 0267; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]]268; CHECK: itofp-if-end:269; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 128270; CHECK-NEXT: [[TMP2:%.*]] = xor i129 [[TMP1]], [[A]]271; CHECK-NEXT: [[TMP3:%.*]] = sub i129 [[TMP2]], [[TMP1]]272; CHECK-NEXT: [[TMP4:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true)273; CHECK-NEXT: [[TMP5:%.*]] = trunc i129 [[TMP4]] to i32274; CHECK-NEXT: [[TMP6:%.*]] = sub i129 129, [[TMP4]]275; CHECK-NEXT: [[TMP7:%.*]] = sub i129 128, [[TMP4]]276; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i129 [[TMP6]], 113277; CHECK-NEXT: br i1 [[TMP8]], label [[ITOFP_IF_THEN4:%.*]], label [[ITOFP_IF_ELSE:%.*]]278; CHECK: itofp-if-then4:279; CHECK-NEXT: switch i129 [[TMP6]], label [[ITOFP_SW_DEFAULT:%.*]] [280; CHECK-NEXT: i129 114, label [[ITOFP_SW_BB:%.*]]281; CHECK-NEXT: i129 115, label [[ITOFP_SW_EPILOG:%.*]]282; CHECK-NEXT: ]283; CHECK: itofp-sw-bb:284; CHECK-NEXT: [[TMP9:%.*]] = shl i129 [[A]], 1285; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]286; CHECK: itofp-sw-default:287; CHECK-NEXT: [[TMP10:%.*]] = sub i129 14, [[TMP4]]288; CHECK-NEXT: [[TMP11:%.*]] = lshr i129 [[A]], [[TMP10]]289; CHECK-NEXT: [[TMP12:%.*]] = add i129 [[TMP4]], 115290; CHECK-NEXT: [[TMP13:%.*]] = lshr i129 -1, [[TMP12]]291; CHECK-NEXT: [[TMP14:%.*]] = and i129 [[TMP13]], [[A]]292; CHECK-NEXT: [[TMP15:%.*]] = icmp ne i129 [[TMP14]], 0293; CHECK-NEXT: [[TMP16:%.*]] = zext i1 [[TMP15]] to i129294; CHECK-NEXT: [[TMP17:%.*]] = or i129 [[TMP11]], [[TMP16]]295; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]296; CHECK: itofp-sw-epilog:297; CHECK-NEXT: [[TMP18:%.*]] = phi i129 [ [[TMP17]], [[ITOFP_SW_DEFAULT]] ], [ [[A]], [[ITOFP_IF_THEN4]] ], [ [[TMP9]], [[ITOFP_SW_BB]] ]298; CHECK-NEXT: [[TMP19:%.*]] = trunc i129 [[TMP18]] to i32299; CHECK-NEXT: [[TMP20:%.*]] = lshr i32 [[TMP19]], 2300; CHECK-NEXT: [[TMP21:%.*]] = and i32 [[TMP20]], 1301; CHECK-NEXT: [[TMP22:%.*]] = zext i32 [[TMP21]] to i129302; CHECK-NEXT: [[TMP23:%.*]] = or i129 [[TMP18]], [[TMP22]]303; CHECK-NEXT: [[TMP24:%.*]] = add i129 [[TMP23]], 1304; CHECK-NEXT: [[TMP25:%.*]] = lshr i129 [[TMP24]], 2305; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP24]], 41538374868278621028243970633760768306; CHECK-NEXT: [[TMP26:%.*]] = icmp eq i129 [[A3]], 0307; CHECK-NEXT: [[TMP27:%.*]] = trunc i129 [[TMP25]] to i128308; CHECK-NEXT: [[TMP28:%.*]] = lshr i129 [[TMP25]], 32309; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP7]] to i64310; CHECK-NEXT: br i1 [[TMP26]], label [[ITOFP_IF_END26:%.*]], label [[ITOFP_IF_THEN20:%.*]]311; CHECK: itofp-if-then20:312; CHECK-NEXT: [[TMP30:%.*]] = lshr i129 [[TMP24]], 3313; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i128314; CHECK-NEXT: [[TMP32:%.*]] = lshr i129 [[TMP30]], 32315; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP6]] to i64316; CHECK-NEXT: br label [[ITOFP_IF_END26]]317; CHECK: itofp-if-else:318; CHECK-NEXT: [[TMP34:%.*]] = add i129 [[TMP4]], 4294967280319; CHECK-NEXT: [[TMP35:%.*]] = shl i129 [[A]], [[TMP34]]320; CHECK-NEXT: [[TMP36:%.*]] = trunc i129 [[TMP35]] to i128321; CHECK-NEXT: [[TMP37:%.*]] = lshr i129 [[TMP35]], 32322; CHECK-NEXT: [[TMP38:%.*]] = trunc i129 [[TMP7]] to i64323; CHECK-NEXT: br label [[ITOFP_IF_END26]]324; CHECK: itofp-if-end26:325; CHECK-NEXT: [[TMP39:%.*]] = phi i128 [ [[TMP31]], [[ITOFP_IF_THEN20]] ], [ [[TMP27]], [[ITOFP_SW_EPILOG]] ], [ [[TMP36]], [[ITOFP_IF_ELSE]] ]326; CHECK-NEXT: [[TMP40:%.*]] = phi i64 [ [[TMP33]], [[ITOFP_IF_THEN20]] ], [ [[TMP29]], [[ITOFP_SW_EPILOG]] ], [ [[TMP38]], [[ITOFP_IF_ELSE]] ]327; CHECK-NEXT: [[AND29:%.*]] = and i129 [[TMP1]], 9223372036854775808328; CHECK-NEXT: [[TMP41:%.*]] = shl i64 [[TMP40]], 48329; CHECK-NEXT: [[TMP42:%.*]] = add i64 [[TMP41]], 4611404543450677248330; CHECK-NEXT: [[TMP43:%.*]] = zext i64 [[TMP42]] to i128331; CHECK-NEXT: [[TMP44:%.*]] = trunc i129 [[AND29]] to i128332; CHECK-NEXT: [[TMP45:%.*]] = or i128 [[TMP44]], [[TMP43]]333; CHECK-NEXT: [[TMP46:%.*]] = shl i128 [[TMP45]], 64334; CHECK-NEXT: [[TMP47:%.*]] = and i128 [[TMP39]], 5192296858534827628530496329220095335; CHECK-NEXT: [[TMP48:%.*]] = or i128 [[TMP46]], [[TMP47]]336; CHECK-NEXT: [[TMP49:%.*]] = bitcast i128 [[TMP48]] to fp128337; CHECK-NEXT: [[TMP50:%.*]] = fptrunc fp128 [[TMP49]] to x86_fp80338; CHECK-NEXT: br label [[ITOFP_RETURN]]339; CHECK: itofp-return:340; CHECK-NEXT: [[TMP51:%.*]] = phi x86_fp80 [ [[TMP50]], [[ITOFP_IF_END26]] ], [ 0xK00000000000000000000, [[ITOFP_ENTRY:%.*]] ]341; CHECK-NEXT: ret x86_fp80 [[TMP51]]342;343 %conv = uitofp i129 %a to x86_fp80344 ret x86_fp80 %conv345}346 347define fp128 @ui129tofp128(i129 %a) {348; CHECK-LABEL: @ui129tofp128(349; CHECK-NEXT: itofp-entry:350; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 0351; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]]352; CHECK: itofp-if-end:353; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 128354; CHECK-NEXT: [[TMP2:%.*]] = xor i129 [[TMP1]], [[A]]355; CHECK-NEXT: [[TMP3:%.*]] = sub i129 [[TMP2]], [[TMP1]]356; CHECK-NEXT: [[TMP4:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true)357; CHECK-NEXT: [[TMP5:%.*]] = trunc i129 [[TMP4]] to i32358; CHECK-NEXT: [[TMP6:%.*]] = sub i129 129, [[TMP4]]359; CHECK-NEXT: [[TMP7:%.*]] = sub i129 128, [[TMP4]]360; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i129 [[TMP6]], 113361; CHECK-NEXT: br i1 [[TMP8]], label [[ITOFP_IF_THEN4:%.*]], label [[ITOFP_IF_ELSE:%.*]]362; CHECK: itofp-if-then4:363; CHECK-NEXT: switch i129 [[TMP6]], label [[ITOFP_SW_DEFAULT:%.*]] [364; CHECK-NEXT: i129 114, label [[ITOFP_SW_BB:%.*]]365; CHECK-NEXT: i129 115, label [[ITOFP_SW_EPILOG:%.*]]366; CHECK-NEXT: ]367; CHECK: itofp-sw-bb:368; CHECK-NEXT: [[TMP9:%.*]] = shl i129 [[A]], 1369; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]370; CHECK: itofp-sw-default:371; CHECK-NEXT: [[TMP10:%.*]] = sub i129 14, [[TMP4]]372; CHECK-NEXT: [[TMP11:%.*]] = lshr i129 [[A]], [[TMP10]]373; CHECK-NEXT: [[TMP12:%.*]] = add i129 [[TMP4]], 115374; CHECK-NEXT: [[TMP13:%.*]] = lshr i129 -1, [[TMP12]]375; CHECK-NEXT: [[TMP14:%.*]] = and i129 [[TMP13]], [[A]]376; CHECK-NEXT: [[TMP15:%.*]] = icmp ne i129 [[TMP14]], 0377; CHECK-NEXT: [[TMP16:%.*]] = zext i1 [[TMP15]] to i129378; CHECK-NEXT: [[TMP17:%.*]] = or i129 [[TMP11]], [[TMP16]]379; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]380; CHECK: itofp-sw-epilog:381; CHECK-NEXT: [[TMP18:%.*]] = phi i129 [ [[TMP17]], [[ITOFP_SW_DEFAULT]] ], [ [[A]], [[ITOFP_IF_THEN4]] ], [ [[TMP9]], [[ITOFP_SW_BB]] ]382; CHECK-NEXT: [[TMP19:%.*]] = trunc i129 [[TMP18]] to i32383; CHECK-NEXT: [[TMP20:%.*]] = lshr i32 [[TMP19]], 2384; CHECK-NEXT: [[TMP21:%.*]] = and i32 [[TMP20]], 1385; CHECK-NEXT: [[TMP22:%.*]] = zext i32 [[TMP21]] to i129386; CHECK-NEXT: [[TMP23:%.*]] = or i129 [[TMP18]], [[TMP22]]387; CHECK-NEXT: [[TMP24:%.*]] = add i129 [[TMP23]], 1388; CHECK-NEXT: [[TMP25:%.*]] = lshr i129 [[TMP24]], 2389; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP24]], 41538374868278621028243970633760768390; CHECK-NEXT: [[TMP26:%.*]] = icmp eq i129 [[A3]], 0391; CHECK-NEXT: [[TMP27:%.*]] = trunc i129 [[TMP25]] to i128392; CHECK-NEXT: [[TMP28:%.*]] = lshr i129 [[TMP25]], 32393; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP7]] to i64394; CHECK-NEXT: br i1 [[TMP26]], label [[ITOFP_IF_END26:%.*]], label [[ITOFP_IF_THEN20:%.*]]395; CHECK: itofp-if-then20:396; CHECK-NEXT: [[TMP30:%.*]] = lshr i129 [[TMP24]], 3397; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i128398; CHECK-NEXT: [[TMP32:%.*]] = lshr i129 [[TMP30]], 32399; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP6]] to i64400; CHECK-NEXT: br label [[ITOFP_IF_END26]]401; CHECK: itofp-if-else:402; CHECK-NEXT: [[TMP34:%.*]] = add i129 [[TMP4]], 4294967280403; CHECK-NEXT: [[TMP35:%.*]] = shl i129 [[A]], [[TMP34]]404; CHECK-NEXT: [[TMP36:%.*]] = trunc i129 [[TMP35]] to i128405; CHECK-NEXT: [[TMP37:%.*]] = lshr i129 [[TMP35]], 32406; CHECK-NEXT: [[TMP38:%.*]] = trunc i129 [[TMP7]] to i64407; CHECK-NEXT: br label [[ITOFP_IF_END26]]408; CHECK: itofp-if-end26:409; CHECK-NEXT: [[TMP39:%.*]] = phi i128 [ [[TMP31]], [[ITOFP_IF_THEN20]] ], [ [[TMP27]], [[ITOFP_SW_EPILOG]] ], [ [[TMP36]], [[ITOFP_IF_ELSE]] ]410; CHECK-NEXT: [[TMP40:%.*]] = phi i64 [ [[TMP33]], [[ITOFP_IF_THEN20]] ], [ [[TMP29]], [[ITOFP_SW_EPILOG]] ], [ [[TMP38]], [[ITOFP_IF_ELSE]] ]411; CHECK-NEXT: [[AND29:%.*]] = and i129 [[TMP1]], 9223372036854775808412; CHECK-NEXT: [[TMP41:%.*]] = shl i64 [[TMP40]], 48413; CHECK-NEXT: [[TMP42:%.*]] = add i64 [[TMP41]], 4611404543450677248414; CHECK-NEXT: [[TMP43:%.*]] = zext i64 [[TMP42]] to i128415; CHECK-NEXT: [[TMP44:%.*]] = trunc i129 [[AND29]] to i128416; CHECK-NEXT: [[TMP45:%.*]] = or i128 [[TMP44]], [[TMP43]]417; CHECK-NEXT: [[TMP46:%.*]] = shl i128 [[TMP45]], 64418; CHECK-NEXT: [[TMP47:%.*]] = and i128 [[TMP39]], 5192296858534827628530496329220095419; CHECK-NEXT: [[TMP48:%.*]] = or i128 [[TMP46]], [[TMP47]]420; CHECK-NEXT: [[TMP49:%.*]] = bitcast i128 [[TMP48]] to fp128421; CHECK-NEXT: br label [[ITOFP_RETURN]]422; CHECK: itofp-return:423; CHECK-NEXT: [[TMP50:%.*]] = phi fp128 [ [[TMP49]], [[ITOFP_IF_END26]] ], [ 0xL00000000000000000000000000000000, [[ITOFP_ENTRY:%.*]] ]424; CHECK-NEXT: ret fp128 [[TMP50]]425;426 %conv = uitofp i129 %a to fp128427 ret fp128 %conv428}429 430define <2 x float> @ui129tofloatv2(<2 x i129> %a) {431; CHECK-LABEL: @ui129tofloatv2(432; CHECK-NEXT: itofp-entryitofp-entry:433; CHECK-NEXT: [[TMP0:%.*]] = extractelement <2 x i129> [[A:%.*]], i64 0434; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i129 [[TMP0]], 0435; CHECK-NEXT: br i1 [[TMP1]], label [[ITOFP_RETURN1:%.*]], label [[ITOFP_IF_END2:%.*]]436; CHECK: itofp-if-end2:437; CHECK-NEXT: [[TMP2:%.*]] = ashr i129 [[TMP0]], 128438; CHECK-NEXT: [[TMP3:%.*]] = xor i129 [[TMP2]], [[TMP0]]439; CHECK-NEXT: [[TMP4:%.*]] = sub i129 [[TMP3]], [[TMP2]]440; CHECK-NEXT: [[TMP5:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP0]], i1 true)441; CHECK-NEXT: [[TMP6:%.*]] = trunc i129 [[TMP5]] to i32442; CHECK-NEXT: [[TMP7:%.*]] = sub i32 129, [[TMP6]]443; CHECK-NEXT: [[TMP8:%.*]] = sub i32 128, [[TMP6]]444; CHECK-NEXT: [[TMP9:%.*]] = icmp sgt i32 [[TMP7]], 24445; CHECK-NEXT: br i1 [[TMP9]], label [[ITOFP_IF_THEN43:%.*]], label [[ITOFP_IF_ELSE8:%.*]]446; CHECK: itofp-if-then43:447; CHECK-NEXT: switch i32 [[TMP7]], label [[ITOFP_SW_DEFAULT5:%.*]] [448; CHECK-NEXT: i32 25, label [[ITOFP_SW_BB4:%.*]]449; CHECK-NEXT: i32 26, label [[ITOFP_SW_EPILOG6:%.*]]450; CHECK-NEXT: ]451; CHECK: itofp-sw-bb4:452; CHECK-NEXT: [[TMP10:%.*]] = shl i129 [[TMP0]], 1453; CHECK-NEXT: br label [[ITOFP_SW_EPILOG6]]454; CHECK: itofp-sw-default5:455; CHECK-NEXT: [[TMP11:%.*]] = sub i32 103, [[TMP6]]456; CHECK-NEXT: [[TMP12:%.*]] = zext i32 [[TMP11]] to i129457; CHECK-NEXT: [[TMP13:%.*]] = lshr i129 [[TMP0]], [[TMP12]]458; CHECK-NEXT: [[TMP14:%.*]] = add i32 [[TMP6]], 26459; CHECK-NEXT: [[TMP15:%.*]] = zext i32 [[TMP14]] to i129460; CHECK-NEXT: [[TMP16:%.*]] = lshr i129 -1, [[TMP15]]461; CHECK-NEXT: [[TMP17:%.*]] = and i129 [[TMP16]], [[TMP0]]462; CHECK-NEXT: [[TMP18:%.*]] = icmp ne i129 [[TMP17]], 0463; CHECK-NEXT: [[TMP19:%.*]] = zext i1 [[TMP18]] to i129464; CHECK-NEXT: [[TMP20:%.*]] = or i129 [[TMP13]], [[TMP19]]465; CHECK-NEXT: br label [[ITOFP_SW_EPILOG6]]466; CHECK: itofp-sw-epilog6:467; CHECK-NEXT: [[TMP21:%.*]] = phi i129 [ [[TMP20]], [[ITOFP_SW_DEFAULT5]] ], [ [[TMP0]], [[ITOFP_IF_THEN43]] ], [ [[TMP10]], [[ITOFP_SW_BB4]] ]468; CHECK-NEXT: [[TMP22:%.*]] = trunc i129 [[TMP21]] to i32469; CHECK-NEXT: [[TMP23:%.*]] = lshr i32 [[TMP22]], 2470; CHECK-NEXT: [[TMP24:%.*]] = and i32 [[TMP23]], 1471; CHECK-NEXT: [[TMP25:%.*]] = zext i32 [[TMP24]] to i129472; CHECK-NEXT: [[TMP26:%.*]] = or i129 [[TMP21]], [[TMP25]]473; CHECK-NEXT: [[TMP27:%.*]] = add i129 [[TMP26]], 1474; CHECK-NEXT: [[TMP28:%.*]] = lshr i129 [[TMP27]], 2475; CHECK-NEXT: [[A310:%.*]] = and i129 [[TMP27]], 67108864476; CHECK-NEXT: [[TMP29:%.*]] = icmp eq i129 [[A310]], 0477; CHECK-NEXT: [[TMP30:%.*]] = trunc i129 [[TMP28]] to i32478; CHECK-NEXT: [[TMP31:%.*]] = lshr i129 [[TMP28]], 32479; CHECK-NEXT: [[TMP32:%.*]] = trunc i129 [[TMP31]] to i32480; CHECK-NEXT: br i1 [[TMP29]], label [[ITOFP_IF_END269:%.*]], label [[ITOFP_IF_THEN207:%.*]]481; CHECK: itofp-if-then207:482; CHECK-NEXT: [[TMP33:%.*]] = lshr i129 [[TMP27]], 3483; CHECK-NEXT: [[TMP34:%.*]] = trunc i129 [[TMP33]] to i32484; CHECK-NEXT: [[TMP35:%.*]] = lshr i129 [[TMP33]], 32485; CHECK-NEXT: [[TMP36:%.*]] = trunc i129 [[TMP35]] to i32486; CHECK-NEXT: br label [[ITOFP_IF_END269]]487; CHECK: itofp-if-else8:488; CHECK-NEXT: [[TMP37:%.*]] = add i32 [[TMP6]], -105489; CHECK-NEXT: [[TMP38:%.*]] = zext i32 [[TMP37]] to i129490; CHECK-NEXT: [[TMP39:%.*]] = shl i129 [[TMP0]], [[TMP38]]491; CHECK-NEXT: [[TMP40:%.*]] = trunc i129 [[TMP39]] to i32492; CHECK-NEXT: [[TMP41:%.*]] = lshr i129 [[TMP39]], 32493; CHECK-NEXT: [[TMP42:%.*]] = trunc i129 [[TMP41]] to i32494; CHECK-NEXT: br label [[ITOFP_IF_END269]]495; CHECK: itofp-if-end269:496; CHECK-NEXT: [[TMP43:%.*]] = phi i32 [ [[TMP34]], [[ITOFP_IF_THEN207]] ], [ [[TMP30]], [[ITOFP_SW_EPILOG6]] ], [ [[TMP40]], [[ITOFP_IF_ELSE8]] ]497; CHECK-NEXT: [[TMP44:%.*]] = phi i32 [ [[TMP7]], [[ITOFP_IF_THEN207]] ], [ [[TMP8]], [[ITOFP_SW_EPILOG6]] ], [ [[TMP8]], [[ITOFP_IF_ELSE8]] ]498; CHECK-NEXT: [[TMP45:%.*]] = trunc i129 [[TMP2]] to i32499; CHECK-NEXT: [[TMP46:%.*]] = and i32 [[TMP45]], -2147483648500; CHECK-NEXT: [[TMP47:%.*]] = shl i32 [[TMP44]], 23501; CHECK-NEXT: [[TMP48:%.*]] = add i32 [[TMP47]], 1065353216502; CHECK-NEXT: [[TMP49:%.*]] = and i32 [[TMP43]], 8388607503; CHECK-NEXT: [[TMP50:%.*]] = or i32 [[TMP49]], [[TMP46]]504; CHECK-NEXT: [[TMP51:%.*]] = or i32 [[TMP49]], [[TMP48]]505; CHECK-NEXT: [[TMP52:%.*]] = bitcast i32 [[TMP51]] to float506; CHECK-NEXT: br label [[ITOFP_RETURN1]]507; CHECK: itofp-return1:508; CHECK-NEXT: [[TMP53:%.*]] = phi float [ [[TMP52]], [[ITOFP_IF_END269]] ], [ 0.000000e+00, [[ITOFP_ENTRYITOFP_ENTRY:%.*]] ]509; CHECK-NEXT: [[TMP54:%.*]] = insertelement <2 x float> poison, float [[TMP53]], i64 0510; CHECK-NEXT: [[TMP55:%.*]] = extractelement <2 x i129> [[A]], i64 1511; CHECK-NEXT: [[TMP56:%.*]] = icmp eq i129 [[TMP55]], 0512; CHECK-NEXT: br i1 [[TMP56]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]]513; CHECK: itofp-if-end:514; CHECK-NEXT: [[TMP57:%.*]] = ashr i129 [[TMP55]], 128515; CHECK-NEXT: [[TMP58:%.*]] = xor i129 [[TMP57]], [[TMP55]]516; CHECK-NEXT: [[TMP59:%.*]] = sub i129 [[TMP58]], [[TMP57]]517; CHECK-NEXT: [[TMP60:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP55]], i1 true)518; CHECK-NEXT: [[TMP61:%.*]] = trunc i129 [[TMP60]] to i32519; CHECK-NEXT: [[TMP62:%.*]] = sub i32 129, [[TMP61]]520; CHECK-NEXT: [[TMP63:%.*]] = sub i32 128, [[TMP61]]521; CHECK-NEXT: [[TMP64:%.*]] = icmp sgt i32 [[TMP62]], 24522; CHECK-NEXT: br i1 [[TMP64]], label [[ITOFP_IF_THEN4:%.*]], label [[ITOFP_IF_ELSE:%.*]]523; CHECK: itofp-if-then4:524; CHECK-NEXT: switch i32 [[TMP62]], label [[ITOFP_SW_DEFAULT:%.*]] [525; CHECK-NEXT: i32 25, label [[ITOFP_SW_BB:%.*]]526; CHECK-NEXT: i32 26, label [[ITOFP_SW_EPILOG:%.*]]527; CHECK-NEXT: ]528; CHECK: itofp-sw-bb:529; CHECK-NEXT: [[TMP65:%.*]] = shl i129 [[TMP55]], 1530; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]531; CHECK: itofp-sw-default:532; CHECK-NEXT: [[TMP66:%.*]] = sub i32 103, [[TMP61]]533; CHECK-NEXT: [[TMP67:%.*]] = zext i32 [[TMP66]] to i129534; CHECK-NEXT: [[TMP68:%.*]] = lshr i129 [[TMP55]], [[TMP67]]535; CHECK-NEXT: [[TMP69:%.*]] = add i32 [[TMP61]], 26536; CHECK-NEXT: [[TMP70:%.*]] = zext i32 [[TMP69]] to i129537; CHECK-NEXT: [[TMP71:%.*]] = lshr i129 -1, [[TMP70]]538; CHECK-NEXT: [[TMP72:%.*]] = and i129 [[TMP71]], [[TMP55]]539; CHECK-NEXT: [[TMP73:%.*]] = icmp ne i129 [[TMP72]], 0540; CHECK-NEXT: [[TMP74:%.*]] = zext i1 [[TMP73]] to i129541; CHECK-NEXT: [[TMP75:%.*]] = or i129 [[TMP68]], [[TMP74]]542; CHECK-NEXT: br label [[ITOFP_SW_EPILOG]]543; CHECK: itofp-sw-epilog:544; CHECK-NEXT: [[TMP76:%.*]] = phi i129 [ [[TMP75]], [[ITOFP_SW_DEFAULT]] ], [ [[TMP55]], [[ITOFP_IF_THEN4]] ], [ [[TMP65]], [[ITOFP_SW_BB]] ]545; CHECK-NEXT: [[TMP77:%.*]] = trunc i129 [[TMP76]] to i32546; CHECK-NEXT: [[TMP78:%.*]] = lshr i32 [[TMP77]], 2547; CHECK-NEXT: [[TMP79:%.*]] = and i32 [[TMP78]], 1548; CHECK-NEXT: [[TMP80:%.*]] = zext i32 [[TMP79]] to i129549; CHECK-NEXT: [[TMP81:%.*]] = or i129 [[TMP76]], [[TMP80]]550; CHECK-NEXT: [[TMP82:%.*]] = add i129 [[TMP81]], 1551; CHECK-NEXT: [[TMP83:%.*]] = lshr i129 [[TMP82]], 2552; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP82]], 67108864553; CHECK-NEXT: [[TMP84:%.*]] = icmp eq i129 [[A3]], 0554; CHECK-NEXT: [[TMP85:%.*]] = trunc i129 [[TMP83]] to i32555; CHECK-NEXT: [[TMP86:%.*]] = lshr i129 [[TMP83]], 32556; CHECK-NEXT: [[TMP87:%.*]] = trunc i129 [[TMP86]] to i32557; CHECK-NEXT: br i1 [[TMP84]], label [[ITOFP_IF_END26:%.*]], label [[ITOFP_IF_THEN20:%.*]]558; CHECK: itofp-if-then20:559; CHECK-NEXT: [[TMP88:%.*]] = lshr i129 [[TMP82]], 3560; CHECK-NEXT: [[TMP89:%.*]] = trunc i129 [[TMP88]] to i32561; CHECK-NEXT: [[TMP90:%.*]] = lshr i129 [[TMP88]], 32562; CHECK-NEXT: [[TMP91:%.*]] = trunc i129 [[TMP90]] to i32563; CHECK-NEXT: br label [[ITOFP_IF_END26]]564; CHECK: itofp-if-else:565; CHECK-NEXT: [[TMP92:%.*]] = add i32 [[TMP61]], -105566; CHECK-NEXT: [[TMP93:%.*]] = zext i32 [[TMP92]] to i129567; CHECK-NEXT: [[TMP94:%.*]] = shl i129 [[TMP55]], [[TMP93]]568; CHECK-NEXT: [[TMP95:%.*]] = trunc i129 [[TMP94]] to i32569; CHECK-NEXT: [[TMP96:%.*]] = lshr i129 [[TMP94]], 32570; CHECK-NEXT: [[TMP97:%.*]] = trunc i129 [[TMP96]] to i32571; CHECK-NEXT: br label [[ITOFP_IF_END26]]572; CHECK: itofp-if-end26:573; CHECK-NEXT: [[TMP98:%.*]] = phi i32 [ [[TMP89]], [[ITOFP_IF_THEN20]] ], [ [[TMP85]], [[ITOFP_SW_EPILOG]] ], [ [[TMP95]], [[ITOFP_IF_ELSE]] ]574; CHECK-NEXT: [[TMP99:%.*]] = phi i32 [ [[TMP62]], [[ITOFP_IF_THEN20]] ], [ [[TMP63]], [[ITOFP_SW_EPILOG]] ], [ [[TMP63]], [[ITOFP_IF_ELSE]] ]575; CHECK-NEXT: [[TMP100:%.*]] = trunc i129 [[TMP57]] to i32576; CHECK-NEXT: [[TMP101:%.*]] = and i32 [[TMP100]], -2147483648577; CHECK-NEXT: [[TMP102:%.*]] = shl i32 [[TMP99]], 23578; CHECK-NEXT: [[TMP103:%.*]] = add i32 [[TMP102]], 1065353216579; CHECK-NEXT: [[TMP104:%.*]] = and i32 [[TMP98]], 8388607580; CHECK-NEXT: [[TMP105:%.*]] = or i32 [[TMP104]], [[TMP101]]581; CHECK-NEXT: [[TMP106:%.*]] = or i32 [[TMP104]], [[TMP103]]582; CHECK-NEXT: [[TMP107:%.*]] = bitcast i32 [[TMP106]] to float583; CHECK-NEXT: br label [[ITOFP_RETURN]]584; CHECK: itofp-return:585; CHECK-NEXT: [[TMP108:%.*]] = phi float [ [[TMP107]], [[ITOFP_IF_END26]] ], [ 0.000000e+00, [[ITOFP_RETURN1]] ]586; CHECK-NEXT: [[TMP109:%.*]] = insertelement <2 x float> [[TMP54]], float [[TMP108]], i64 1587; CHECK-NEXT: ret <2 x float> [[TMP109]]588;589 %conv = uitofp <2 x i129> %a to <2 x float>590 ret <2 x float> %conv591}592