1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -mtriple=x86_64-- -expand-large-fp-convert < %s | FileCheck %s 3; RUN: opt -S -mtriple=x86_64-- -passes=expand-large-fp-convert < %s | FileCheck %s 4 5define half @ui129tohalf(i129 %a) { 6; CHECK-LABEL: @ui129tohalf( 7; CHECK-NEXT: itofp-entry: 8; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 0 9; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]] 10; CHECK: itofp-if-end: 11; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 128 12; 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 i32 16; CHECK-NEXT: [[TMP6:%.*]] = sub i32 129, [[TMP5]] 17; CHECK-NEXT: [[TMP7:%.*]] = sub i32 128, [[TMP5]] 18; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i32 [[TMP6]], 24 19; 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]], 1 27; 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 i129 31; CHECK-NEXT: [[TMP12:%.*]] = lshr i129 [[A]], [[TMP11]] 32; CHECK-NEXT: [[TMP13:%.*]] = add i32 [[TMP5]], 26 33; CHECK-NEXT: [[TMP14:%.*]] = zext i32 [[TMP13]] to i129 34; CHECK-NEXT: [[TMP15:%.*]] = lshr i129 -1, [[TMP14]] 35; CHECK-NEXT: [[TMP16:%.*]] = and i129 [[TMP15]], [[A]] 36; CHECK-NEXT: [[TMP17:%.*]] = icmp ne i129 [[TMP16]], 0 37; CHECK-NEXT: [[TMP18:%.*]] = zext i1 [[TMP17]] to i129 38; 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 i32 43; CHECK-NEXT: [[TMP22:%.*]] = lshr i32 [[TMP21]], 2 44; CHECK-NEXT: [[TMP23:%.*]] = and i32 [[TMP22]], 1 45; CHECK-NEXT: [[TMP24:%.*]] = zext i32 [[TMP23]] to i129 46; CHECK-NEXT: [[TMP25:%.*]] = or i129 [[TMP20]], [[TMP24]] 47; CHECK-NEXT: [[TMP26:%.*]] = add i129 [[TMP25]], 1 48; CHECK-NEXT: [[TMP27:%.*]] = lshr i129 [[TMP26]], 2 49; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP26]], 67108864 50; CHECK-NEXT: [[TMP28:%.*]] = icmp eq i129 [[A3]], 0 51; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP27]] to i32 52; CHECK-NEXT: [[TMP30:%.*]] = lshr i129 [[TMP27]], 32 53; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i32 54; 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]], 3 57; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP32]] to i32 58; CHECK-NEXT: [[TMP34:%.*]] = lshr i129 [[TMP32]], 32 59; CHECK-NEXT: [[TMP35:%.*]] = trunc i129 [[TMP34]] to i32 60; CHECK-NEXT: br label [[ITOFP_IF_END26]] 61; CHECK: itofp-if-else: 62; CHECK-NEXT: [[TMP36:%.*]] = add i32 [[TMP5]], -105 63; CHECK-NEXT: [[TMP37:%.*]] = zext i32 [[TMP36]] to i129 64; CHECK-NEXT: [[TMP38:%.*]] = shl i129 [[A]], [[TMP37]] 65; CHECK-NEXT: [[TMP39:%.*]] = trunc i129 [[TMP38]] to i32 66; CHECK-NEXT: [[TMP40:%.*]] = lshr i129 [[TMP38]], 32 67; CHECK-NEXT: [[TMP41:%.*]] = trunc i129 [[TMP40]] to i32 68; 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 i32 73; CHECK-NEXT: [[TMP45:%.*]] = and i32 [[TMP44]], -2147483648 74; CHECK-NEXT: [[TMP46:%.*]] = shl i32 [[TMP43]], 23 75; CHECK-NEXT: [[TMP47:%.*]] = add i32 [[TMP46]], 1065353216 76; CHECK-NEXT: [[TMP48:%.*]] = and i32 [[TMP42]], 8388607 77; CHECK-NEXT: [[TMP49:%.*]] = or i32 [[TMP48]], [[TMP45]] 78; CHECK-NEXT: [[TMP50:%.*]] = or i32 [[TMP48]], [[TMP47]] 79; CHECK-NEXT: [[TMP51:%.*]] = bitcast i32 [[TMP50]] to float 80; CHECK-NEXT: [[TMP52:%.*]] = fptrunc float [[TMP51]] to half 81; 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 half 87 ret half %conv 88} 89 90define float @ui129tofloat(i129 %a) { 91; CHECK-LABEL: @ui129tofloat( 92; CHECK-NEXT: itofp-entry: 93; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 0 94; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]] 95; CHECK: itofp-if-end: 96; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 128 97; 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 i32 101; CHECK-NEXT: [[TMP6:%.*]] = sub i32 129, [[TMP5]] 102; CHECK-NEXT: [[TMP7:%.*]] = sub i32 128, [[TMP5]] 103; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i32 [[TMP6]], 24 104; 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]], 1 112; 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 i129 116; CHECK-NEXT: [[TMP12:%.*]] = lshr i129 [[A]], [[TMP11]] 117; CHECK-NEXT: [[TMP13:%.*]] = add i32 [[TMP5]], 26 118; CHECK-NEXT: [[TMP14:%.*]] = zext i32 [[TMP13]] to i129 119; CHECK-NEXT: [[TMP15:%.*]] = lshr i129 -1, [[TMP14]] 120; CHECK-NEXT: [[TMP16:%.*]] = and i129 [[TMP15]], [[A]] 121; CHECK-NEXT: [[TMP17:%.*]] = icmp ne i129 [[TMP16]], 0 122; CHECK-NEXT: [[TMP18:%.*]] = zext i1 [[TMP17]] to i129 123; 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 i32 128; CHECK-NEXT: [[TMP22:%.*]] = lshr i32 [[TMP21]], 2 129; CHECK-NEXT: [[TMP23:%.*]] = and i32 [[TMP22]], 1 130; CHECK-NEXT: [[TMP24:%.*]] = zext i32 [[TMP23]] to i129 131; CHECK-NEXT: [[TMP25:%.*]] = or i129 [[TMP20]], [[TMP24]] 132; CHECK-NEXT: [[TMP26:%.*]] = add i129 [[TMP25]], 1 133; CHECK-NEXT: [[TMP27:%.*]] = lshr i129 [[TMP26]], 2 134; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP26]], 67108864 135; CHECK-NEXT: [[TMP28:%.*]] = icmp eq i129 [[A3]], 0 136; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP27]] to i32 137; CHECK-NEXT: [[TMP30:%.*]] = lshr i129 [[TMP27]], 32 138; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i32 139; 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]], 3 142; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP32]] to i32 143; CHECK-NEXT: [[TMP34:%.*]] = lshr i129 [[TMP32]], 32 144; CHECK-NEXT: [[TMP35:%.*]] = trunc i129 [[TMP34]] to i32 145; CHECK-NEXT: br label [[ITOFP_IF_END26]] 146; CHECK: itofp-if-else: 147; CHECK-NEXT: [[TMP36:%.*]] = add i32 [[TMP5]], -105 148; CHECK-NEXT: [[TMP37:%.*]] = zext i32 [[TMP36]] to i129 149; CHECK-NEXT: [[TMP38:%.*]] = shl i129 [[A]], [[TMP37]] 150; CHECK-NEXT: [[TMP39:%.*]] = trunc i129 [[TMP38]] to i32 151; CHECK-NEXT: [[TMP40:%.*]] = lshr i129 [[TMP38]], 32 152; CHECK-NEXT: [[TMP41:%.*]] = trunc i129 [[TMP40]] to i32 153; 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 i32 158; CHECK-NEXT: [[TMP45:%.*]] = and i32 [[TMP44]], -2147483648 159; CHECK-NEXT: [[TMP46:%.*]] = shl i32 [[TMP43]], 23 160; CHECK-NEXT: [[TMP47:%.*]] = add i32 [[TMP46]], 1065353216 161; CHECK-NEXT: [[TMP48:%.*]] = and i32 [[TMP42]], 8388607 162; CHECK-NEXT: [[TMP49:%.*]] = or i32 [[TMP48]], [[TMP45]] 163; CHECK-NEXT: [[TMP50:%.*]] = or i32 [[TMP48]], [[TMP47]] 164; CHECK-NEXT: [[TMP51:%.*]] = bitcast i32 [[TMP50]] to float 165; 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 float 171 ret float %conv 172} 173 174define double @ui129todouble(i129 %a) { 175; CHECK-LABEL: @ui129todouble( 176; CHECK-NEXT: itofp-entry: 177; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 0 178; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]] 179; CHECK: itofp-if-end: 180; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 128 181; 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 i32 185; CHECK-NEXT: [[TMP6:%.*]] = sub i32 129, [[TMP5]] 186; CHECK-NEXT: [[TMP7:%.*]] = sub i32 128, [[TMP5]] 187; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i32 [[TMP6]], 53 188; 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]], 1 196; 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 i129 200; CHECK-NEXT: [[TMP12:%.*]] = lshr i129 [[A]], [[TMP11]] 201; CHECK-NEXT: [[TMP13:%.*]] = add i32 [[TMP5]], 55 202; CHECK-NEXT: [[TMP14:%.*]] = zext i32 [[TMP13]] to i129 203; CHECK-NEXT: [[TMP15:%.*]] = lshr i129 -1, [[TMP14]] 204; CHECK-NEXT: [[TMP16:%.*]] = and i129 [[TMP15]], [[A]] 205; CHECK-NEXT: [[TMP17:%.*]] = icmp ne i129 [[TMP16]], 0 206; CHECK-NEXT: [[TMP18:%.*]] = zext i1 [[TMP17]] to i129 207; 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 i32 212; CHECK-NEXT: [[TMP22:%.*]] = lshr i32 [[TMP21]], 2 213; CHECK-NEXT: [[TMP23:%.*]] = and i32 [[TMP22]], 1 214; CHECK-NEXT: [[TMP24:%.*]] = zext i32 [[TMP23]] to i129 215; CHECK-NEXT: [[TMP25:%.*]] = or i129 [[TMP20]], [[TMP24]] 216; CHECK-NEXT: [[TMP26:%.*]] = add i129 [[TMP25]], 1 217; CHECK-NEXT: [[TMP27:%.*]] = lshr i129 [[TMP26]], 2 218; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP26]], 36028797018963968 219; CHECK-NEXT: [[TMP28:%.*]] = icmp eq i129 [[A3]], 0 220; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP27]] to i64 221; CHECK-NEXT: [[TMP30:%.*]] = lshr i129 [[TMP27]], 32 222; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i32 223; 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]], 3 226; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP32]] to i64 227; CHECK-NEXT: [[TMP34:%.*]] = lshr i129 [[TMP32]], 32 228; CHECK-NEXT: [[TMP35:%.*]] = trunc i129 [[TMP34]] to i32 229; CHECK-NEXT: br label [[ITOFP_IF_END26]] 230; CHECK: itofp-if-else: 231; CHECK-NEXT: [[TMP36:%.*]] = add i32 [[TMP5]], -76 232; CHECK-NEXT: [[TMP37:%.*]] = zext i32 [[TMP36]] to i129 233; CHECK-NEXT: [[TMP38:%.*]] = shl i129 [[A]], [[TMP37]] 234; CHECK-NEXT: [[TMP39:%.*]] = trunc i129 [[TMP38]] to i64 235; CHECK-NEXT: [[TMP40:%.*]] = lshr i129 [[TMP38]], 32 236; CHECK-NEXT: [[TMP41:%.*]] = trunc i129 [[TMP40]] to i32 237; 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 i32 243; CHECK-NEXT: [[TMP46:%.*]] = and i32 [[TMP45]], -2147483648 244; CHECK-NEXT: [[TMP47:%.*]] = shl i32 [[TMP44]], 20 245; CHECK-NEXT: [[TMP48:%.*]] = add i32 [[TMP47]], 1072693248 246; CHECK-NEXT: [[TMP49:%.*]] = and i32 [[TMP43]], 1048575 247; CHECK-NEXT: [[TMP50:%.*]] = or i32 [[TMP49]], [[TMP46]] 248; CHECK-NEXT: [[TMP51:%.*]] = or i32 [[TMP49]], [[TMP48]] 249; CHECK-NEXT: [[TMP52:%.*]] = zext i32 [[TMP51]] to i64 250; CHECK-NEXT: [[TMP53:%.*]] = shl i64 [[TMP52]], 32 251; CHECK-NEXT: [[TMP54:%.*]] = and i64 [[TMP42]], 4294967295 252; CHECK-NEXT: [[TMP55:%.*]] = or i64 [[TMP53]], [[TMP54]] 253; CHECK-NEXT: [[TMP56:%.*]] = bitcast i64 [[TMP55]] to double 254; 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 double 260 ret double %conv 261} 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:%.*]], 0 267; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]] 268; CHECK: itofp-if-end: 269; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 128 270; 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 i32 274; CHECK-NEXT: [[TMP6:%.*]] = sub i129 129, [[TMP4]] 275; CHECK-NEXT: [[TMP7:%.*]] = sub i129 128, [[TMP4]] 276; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i129 [[TMP6]], 113 277; 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]], 1 285; 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]], 115 290; CHECK-NEXT: [[TMP13:%.*]] = lshr i129 -1, [[TMP12]] 291; CHECK-NEXT: [[TMP14:%.*]] = and i129 [[TMP13]], [[A]] 292; CHECK-NEXT: [[TMP15:%.*]] = icmp ne i129 [[TMP14]], 0 293; CHECK-NEXT: [[TMP16:%.*]] = zext i1 [[TMP15]] to i129 294; 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 i32 299; CHECK-NEXT: [[TMP20:%.*]] = lshr i32 [[TMP19]], 2 300; CHECK-NEXT: [[TMP21:%.*]] = and i32 [[TMP20]], 1 301; CHECK-NEXT: [[TMP22:%.*]] = zext i32 [[TMP21]] to i129 302; CHECK-NEXT: [[TMP23:%.*]] = or i129 [[TMP18]], [[TMP22]] 303; CHECK-NEXT: [[TMP24:%.*]] = add i129 [[TMP23]], 1 304; CHECK-NEXT: [[TMP25:%.*]] = lshr i129 [[TMP24]], 2 305; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP24]], 41538374868278621028243970633760768 306; CHECK-NEXT: [[TMP26:%.*]] = icmp eq i129 [[A3]], 0 307; CHECK-NEXT: [[TMP27:%.*]] = trunc i129 [[TMP25]] to i128 308; CHECK-NEXT: [[TMP28:%.*]] = lshr i129 [[TMP25]], 32 309; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP7]] to i64 310; 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]], 3 313; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i128 314; CHECK-NEXT: [[TMP32:%.*]] = lshr i129 [[TMP30]], 32 315; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP6]] to i64 316; CHECK-NEXT: br label [[ITOFP_IF_END26]] 317; CHECK: itofp-if-else: 318; CHECK-NEXT: [[TMP34:%.*]] = add i129 [[TMP4]], 4294967280 319; CHECK-NEXT: [[TMP35:%.*]] = shl i129 [[A]], [[TMP34]] 320; CHECK-NEXT: [[TMP36:%.*]] = trunc i129 [[TMP35]] to i128 321; CHECK-NEXT: [[TMP37:%.*]] = lshr i129 [[TMP35]], 32 322; CHECK-NEXT: [[TMP38:%.*]] = trunc i129 [[TMP7]] to i64 323; 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]], 9223372036854775808 328; CHECK-NEXT: [[TMP41:%.*]] = shl i64 [[TMP40]], 48 329; CHECK-NEXT: [[TMP42:%.*]] = add i64 [[TMP41]], 4611404543450677248 330; CHECK-NEXT: [[TMP43:%.*]] = zext i64 [[TMP42]] to i128 331; CHECK-NEXT: [[TMP44:%.*]] = trunc i129 [[AND29]] to i128 332; CHECK-NEXT: [[TMP45:%.*]] = or i128 [[TMP44]], [[TMP43]] 333; CHECK-NEXT: [[TMP46:%.*]] = shl i128 [[TMP45]], 64 334; CHECK-NEXT: [[TMP47:%.*]] = and i128 [[TMP39]], 5192296858534827628530496329220095 335; CHECK-NEXT: [[TMP48:%.*]] = or i128 [[TMP46]], [[TMP47]] 336; CHECK-NEXT: [[TMP49:%.*]] = bitcast i128 [[TMP48]] to fp128 337; CHECK-NEXT: [[TMP50:%.*]] = fptrunc fp128 [[TMP49]] to x86_fp80 338; 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_fp80 344 ret x86_fp80 %conv 345} 346 347define fp128 @ui129tofp128(i129 %a) { 348; CHECK-LABEL: @ui129tofp128( 349; CHECK-NEXT: itofp-entry: 350; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A:%.*]], 0 351; CHECK-NEXT: br i1 [[TMP0]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]] 352; CHECK: itofp-if-end: 353; CHECK-NEXT: [[TMP1:%.*]] = ashr i129 [[A]], 128 354; 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 i32 358; CHECK-NEXT: [[TMP6:%.*]] = sub i129 129, [[TMP4]] 359; CHECK-NEXT: [[TMP7:%.*]] = sub i129 128, [[TMP4]] 360; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt i129 [[TMP6]], 113 361; 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]], 1 369; 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]], 115 374; CHECK-NEXT: [[TMP13:%.*]] = lshr i129 -1, [[TMP12]] 375; CHECK-NEXT: [[TMP14:%.*]] = and i129 [[TMP13]], [[A]] 376; CHECK-NEXT: [[TMP15:%.*]] = icmp ne i129 [[TMP14]], 0 377; CHECK-NEXT: [[TMP16:%.*]] = zext i1 [[TMP15]] to i129 378; 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 i32 383; CHECK-NEXT: [[TMP20:%.*]] = lshr i32 [[TMP19]], 2 384; CHECK-NEXT: [[TMP21:%.*]] = and i32 [[TMP20]], 1 385; CHECK-NEXT: [[TMP22:%.*]] = zext i32 [[TMP21]] to i129 386; CHECK-NEXT: [[TMP23:%.*]] = or i129 [[TMP18]], [[TMP22]] 387; CHECK-NEXT: [[TMP24:%.*]] = add i129 [[TMP23]], 1 388; CHECK-NEXT: [[TMP25:%.*]] = lshr i129 [[TMP24]], 2 389; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP24]], 41538374868278621028243970633760768 390; CHECK-NEXT: [[TMP26:%.*]] = icmp eq i129 [[A3]], 0 391; CHECK-NEXT: [[TMP27:%.*]] = trunc i129 [[TMP25]] to i128 392; CHECK-NEXT: [[TMP28:%.*]] = lshr i129 [[TMP25]], 32 393; CHECK-NEXT: [[TMP29:%.*]] = trunc i129 [[TMP7]] to i64 394; 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]], 3 397; CHECK-NEXT: [[TMP31:%.*]] = trunc i129 [[TMP30]] to i128 398; CHECK-NEXT: [[TMP32:%.*]] = lshr i129 [[TMP30]], 32 399; CHECK-NEXT: [[TMP33:%.*]] = trunc i129 [[TMP6]] to i64 400; CHECK-NEXT: br label [[ITOFP_IF_END26]] 401; CHECK: itofp-if-else: 402; CHECK-NEXT: [[TMP34:%.*]] = add i129 [[TMP4]], 4294967280 403; CHECK-NEXT: [[TMP35:%.*]] = shl i129 [[A]], [[TMP34]] 404; CHECK-NEXT: [[TMP36:%.*]] = trunc i129 [[TMP35]] to i128 405; CHECK-NEXT: [[TMP37:%.*]] = lshr i129 [[TMP35]], 32 406; CHECK-NEXT: [[TMP38:%.*]] = trunc i129 [[TMP7]] to i64 407; 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]], 9223372036854775808 412; CHECK-NEXT: [[TMP41:%.*]] = shl i64 [[TMP40]], 48 413; CHECK-NEXT: [[TMP42:%.*]] = add i64 [[TMP41]], 4611404543450677248 414; CHECK-NEXT: [[TMP43:%.*]] = zext i64 [[TMP42]] to i128 415; CHECK-NEXT: [[TMP44:%.*]] = trunc i129 [[AND29]] to i128 416; CHECK-NEXT: [[TMP45:%.*]] = or i128 [[TMP44]], [[TMP43]] 417; CHECK-NEXT: [[TMP46:%.*]] = shl i128 [[TMP45]], 64 418; CHECK-NEXT: [[TMP47:%.*]] = and i128 [[TMP39]], 5192296858534827628530496329220095 419; CHECK-NEXT: [[TMP48:%.*]] = or i128 [[TMP46]], [[TMP47]] 420; CHECK-NEXT: [[TMP49:%.*]] = bitcast i128 [[TMP48]] to fp128 421; 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 fp128 427 ret fp128 %conv 428} 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 0 434; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i129 [[TMP0]], 0 435; CHECK-NEXT: br i1 [[TMP1]], label [[ITOFP_RETURN1:%.*]], label [[ITOFP_IF_END2:%.*]] 436; CHECK: itofp-if-end2: 437; CHECK-NEXT: [[TMP2:%.*]] = ashr i129 [[TMP0]], 128 438; 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 i32 442; CHECK-NEXT: [[TMP7:%.*]] = sub i32 129, [[TMP6]] 443; CHECK-NEXT: [[TMP8:%.*]] = sub i32 128, [[TMP6]] 444; CHECK-NEXT: [[TMP9:%.*]] = icmp sgt i32 [[TMP7]], 24 445; 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]], 1 453; 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 i129 457; CHECK-NEXT: [[TMP13:%.*]] = lshr i129 [[TMP0]], [[TMP12]] 458; CHECK-NEXT: [[TMP14:%.*]] = add i32 [[TMP6]], 26 459; CHECK-NEXT: [[TMP15:%.*]] = zext i32 [[TMP14]] to i129 460; CHECK-NEXT: [[TMP16:%.*]] = lshr i129 -1, [[TMP15]] 461; CHECK-NEXT: [[TMP17:%.*]] = and i129 [[TMP16]], [[TMP0]] 462; CHECK-NEXT: [[TMP18:%.*]] = icmp ne i129 [[TMP17]], 0 463; CHECK-NEXT: [[TMP19:%.*]] = zext i1 [[TMP18]] to i129 464; 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 i32 469; CHECK-NEXT: [[TMP23:%.*]] = lshr i32 [[TMP22]], 2 470; CHECK-NEXT: [[TMP24:%.*]] = and i32 [[TMP23]], 1 471; CHECK-NEXT: [[TMP25:%.*]] = zext i32 [[TMP24]] to i129 472; CHECK-NEXT: [[TMP26:%.*]] = or i129 [[TMP21]], [[TMP25]] 473; CHECK-NEXT: [[TMP27:%.*]] = add i129 [[TMP26]], 1 474; CHECK-NEXT: [[TMP28:%.*]] = lshr i129 [[TMP27]], 2 475; CHECK-NEXT: [[A310:%.*]] = and i129 [[TMP27]], 67108864 476; CHECK-NEXT: [[TMP29:%.*]] = icmp eq i129 [[A310]], 0 477; CHECK-NEXT: [[TMP30:%.*]] = trunc i129 [[TMP28]] to i32 478; CHECK-NEXT: [[TMP31:%.*]] = lshr i129 [[TMP28]], 32 479; CHECK-NEXT: [[TMP32:%.*]] = trunc i129 [[TMP31]] to i32 480; 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]], 3 483; CHECK-NEXT: [[TMP34:%.*]] = trunc i129 [[TMP33]] to i32 484; CHECK-NEXT: [[TMP35:%.*]] = lshr i129 [[TMP33]], 32 485; CHECK-NEXT: [[TMP36:%.*]] = trunc i129 [[TMP35]] to i32 486; CHECK-NEXT: br label [[ITOFP_IF_END269]] 487; CHECK: itofp-if-else8: 488; CHECK-NEXT: [[TMP37:%.*]] = add i32 [[TMP6]], -105 489; CHECK-NEXT: [[TMP38:%.*]] = zext i32 [[TMP37]] to i129 490; CHECK-NEXT: [[TMP39:%.*]] = shl i129 [[TMP0]], [[TMP38]] 491; CHECK-NEXT: [[TMP40:%.*]] = trunc i129 [[TMP39]] to i32 492; CHECK-NEXT: [[TMP41:%.*]] = lshr i129 [[TMP39]], 32 493; CHECK-NEXT: [[TMP42:%.*]] = trunc i129 [[TMP41]] to i32 494; 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 i32 499; CHECK-NEXT: [[TMP46:%.*]] = and i32 [[TMP45]], -2147483648 500; CHECK-NEXT: [[TMP47:%.*]] = shl i32 [[TMP44]], 23 501; CHECK-NEXT: [[TMP48:%.*]] = add i32 [[TMP47]], 1065353216 502; CHECK-NEXT: [[TMP49:%.*]] = and i32 [[TMP43]], 8388607 503; CHECK-NEXT: [[TMP50:%.*]] = or i32 [[TMP49]], [[TMP46]] 504; CHECK-NEXT: [[TMP51:%.*]] = or i32 [[TMP49]], [[TMP48]] 505; CHECK-NEXT: [[TMP52:%.*]] = bitcast i32 [[TMP51]] to float 506; 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 0 510; CHECK-NEXT: [[TMP55:%.*]] = extractelement <2 x i129> [[A]], i64 1 511; CHECK-NEXT: [[TMP56:%.*]] = icmp eq i129 [[TMP55]], 0 512; CHECK-NEXT: br i1 [[TMP56]], label [[ITOFP_RETURN:%.*]], label [[ITOFP_IF_END:%.*]] 513; CHECK: itofp-if-end: 514; CHECK-NEXT: [[TMP57:%.*]] = ashr i129 [[TMP55]], 128 515; 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 i32 519; CHECK-NEXT: [[TMP62:%.*]] = sub i32 129, [[TMP61]] 520; CHECK-NEXT: [[TMP63:%.*]] = sub i32 128, [[TMP61]] 521; CHECK-NEXT: [[TMP64:%.*]] = icmp sgt i32 [[TMP62]], 24 522; 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]], 1 530; 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 i129 534; CHECK-NEXT: [[TMP68:%.*]] = lshr i129 [[TMP55]], [[TMP67]] 535; CHECK-NEXT: [[TMP69:%.*]] = add i32 [[TMP61]], 26 536; CHECK-NEXT: [[TMP70:%.*]] = zext i32 [[TMP69]] to i129 537; CHECK-NEXT: [[TMP71:%.*]] = lshr i129 -1, [[TMP70]] 538; CHECK-NEXT: [[TMP72:%.*]] = and i129 [[TMP71]], [[TMP55]] 539; CHECK-NEXT: [[TMP73:%.*]] = icmp ne i129 [[TMP72]], 0 540; CHECK-NEXT: [[TMP74:%.*]] = zext i1 [[TMP73]] to i129 541; 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 i32 546; CHECK-NEXT: [[TMP78:%.*]] = lshr i32 [[TMP77]], 2 547; CHECK-NEXT: [[TMP79:%.*]] = and i32 [[TMP78]], 1 548; CHECK-NEXT: [[TMP80:%.*]] = zext i32 [[TMP79]] to i129 549; CHECK-NEXT: [[TMP81:%.*]] = or i129 [[TMP76]], [[TMP80]] 550; CHECK-NEXT: [[TMP82:%.*]] = add i129 [[TMP81]], 1 551; CHECK-NEXT: [[TMP83:%.*]] = lshr i129 [[TMP82]], 2 552; CHECK-NEXT: [[A3:%.*]] = and i129 [[TMP82]], 67108864 553; CHECK-NEXT: [[TMP84:%.*]] = icmp eq i129 [[A3]], 0 554; CHECK-NEXT: [[TMP85:%.*]] = trunc i129 [[TMP83]] to i32 555; CHECK-NEXT: [[TMP86:%.*]] = lshr i129 [[TMP83]], 32 556; CHECK-NEXT: [[TMP87:%.*]] = trunc i129 [[TMP86]] to i32 557; 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]], 3 560; CHECK-NEXT: [[TMP89:%.*]] = trunc i129 [[TMP88]] to i32 561; CHECK-NEXT: [[TMP90:%.*]] = lshr i129 [[TMP88]], 32 562; CHECK-NEXT: [[TMP91:%.*]] = trunc i129 [[TMP90]] to i32 563; CHECK-NEXT: br label [[ITOFP_IF_END26]] 564; CHECK: itofp-if-else: 565; CHECK-NEXT: [[TMP92:%.*]] = add i32 [[TMP61]], -105 566; CHECK-NEXT: [[TMP93:%.*]] = zext i32 [[TMP92]] to i129 567; CHECK-NEXT: [[TMP94:%.*]] = shl i129 [[TMP55]], [[TMP93]] 568; CHECK-NEXT: [[TMP95:%.*]] = trunc i129 [[TMP94]] to i32 569; CHECK-NEXT: [[TMP96:%.*]] = lshr i129 [[TMP94]], 32 570; CHECK-NEXT: [[TMP97:%.*]] = trunc i129 [[TMP96]] to i32 571; 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 i32 576; CHECK-NEXT: [[TMP101:%.*]] = and i32 [[TMP100]], -2147483648 577; CHECK-NEXT: [[TMP102:%.*]] = shl i32 [[TMP99]], 23 578; CHECK-NEXT: [[TMP103:%.*]] = add i32 [[TMP102]], 1065353216 579; CHECK-NEXT: [[TMP104:%.*]] = and i32 [[TMP98]], 8388607 580; CHECK-NEXT: [[TMP105:%.*]] = or i32 [[TMP104]], [[TMP101]] 581; CHECK-NEXT: [[TMP106:%.*]] = or i32 [[TMP104]], [[TMP103]] 582; CHECK-NEXT: [[TMP107:%.*]] = bitcast i32 [[TMP106]] to float 583; 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 1 587; CHECK-NEXT: ret <2 x float> [[TMP109]] 588; 589 %conv = uitofp <2 x i129> %a to <2 x float> 590 ret <2 x float> %conv 591} 592