brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.7 KiB · b1c6fc0 Raw
692 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=instcombine < %s | FileCheck %s3 4; Test that floating point operations are not treated as sources of5; poison.6 7define float @freeze_fneg(float %arg) {8; CHECK-LABEL: define float @freeze_fneg(9; CHECK-SAME: float [[ARG:%.*]]) {10; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]11; CHECK-NEXT:    [[OP:%.*]] = fneg float [[ARG_FR]]12; CHECK-NEXT:    ret float [[OP]]13;14  %op = fneg float %arg15  %freeze = freeze float %op16  ret float %freeze17}18 19define float @freeze_fadd(float %arg0, float noundef %arg1) {20; CHECK-LABEL: define float @freeze_fadd(21; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {22; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]23; CHECK-NEXT:    [[OP:%.*]] = fadd float [[ARG0_FR]], [[ARG1]]24; CHECK-NEXT:    ret float [[OP]]25;26  %op = fadd float %arg0, %arg127  %freeze = freeze float %op28  ret float %freeze29}30 31define float @freeze_fsub(float %arg0, float noundef %arg1) {32; CHECK-LABEL: define float @freeze_fsub(33; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {34; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]35; CHECK-NEXT:    [[OP:%.*]] = fsub float [[ARG0_FR]], [[ARG1]]36; CHECK-NEXT:    ret float [[OP]]37;38  %op = fsub float %arg0, %arg139  %freeze = freeze float %op40  ret float %freeze41}42 43define float @freeze_fmul(float %arg0, float noundef %arg1) {44; CHECK-LABEL: define float @freeze_fmul(45; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {46; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]47; CHECK-NEXT:    [[OP:%.*]] = fmul float [[ARG0_FR]], [[ARG1]]48; CHECK-NEXT:    ret float [[OP]]49;50  %op = fmul float %arg0, %arg151  %freeze = freeze float %op52  ret float %freeze53}54 55define float @freeze_fdiv(float %arg0, float noundef %arg1) {56; CHECK-LABEL: define float @freeze_fdiv(57; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {58; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]59; CHECK-NEXT:    [[OP:%.*]] = fdiv float [[ARG0_FR]], [[ARG1]]60; CHECK-NEXT:    ret float [[OP]]61;62  %op = fdiv float %arg0, %arg163  %freeze = freeze float %op64  ret float %freeze65}66 67define float @freeze_frem(float %arg0, float noundef %arg1) {68; CHECK-LABEL: define float @freeze_frem(69; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {70; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]71; CHECK-NEXT:    [[OP:%.*]] = fdiv float [[ARG0_FR]], [[ARG1]]72; CHECK-NEXT:    ret float [[OP]]73;74  %op = fdiv float %arg0, %arg175  %freeze = freeze float %op76  ret float %freeze77}78 79define double @fpext(float %arg) {80; CHECK-LABEL: define double @fpext(81; CHECK-SAME: float [[ARG:%.*]]) {82; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]83; CHECK-NEXT:    [[OP:%.*]] = fpext float [[ARG_FR]] to double84; CHECK-NEXT:    ret double [[OP]]85;86  %op = fpext float %arg to double87  %freeze = freeze double %op88  ret double %freeze89}90 91define float @fptrunc(double %arg) {92; CHECK-LABEL: define float @fptrunc(93; CHECK-SAME: double [[ARG:%.*]]) {94; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze double [[ARG]]95; CHECK-NEXT:    [[OP:%.*]] = fptrunc double [[ARG_FR]] to float96; CHECK-NEXT:    ret float [[OP]]97;98  %op = fptrunc double %arg to float99  %freeze = freeze float %op100  ret float %freeze101}102 103define float @sitofp(i32 %arg) {104; CHECK-LABEL: define float @sitofp(105; CHECK-SAME: i32 [[ARG:%.*]]) {106; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze i32 [[ARG]]107; CHECK-NEXT:    [[OP:%.*]] = sitofp i32 [[ARG_FR]] to float108; CHECK-NEXT:    ret float [[OP]]109;110  %op = sitofp i32 %arg to float111  %freeze = freeze float %op112  ret float %freeze113}114 115define float @uitofp(i32 %arg) {116; CHECK-LABEL: define float @uitofp(117; CHECK-SAME: i32 [[ARG:%.*]]) {118; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze i32 [[ARG]]119; CHECK-NEXT:    [[OP:%.*]] = uitofp i32 [[ARG_FR]] to float120; CHECK-NEXT:    ret float [[OP]]121;122  %op = uitofp i32 %arg to float123  %freeze = freeze float %op124  ret float %freeze125}126 127define float @freeze_fma(float %arg0, float noundef %arg1, float noundef %arg2) {128; CHECK-LABEL: define float @freeze_fma(129; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]], float noundef [[ARG2:%.*]]) {130; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]131; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.fma.f32(float [[ARG0_FR]], float noundef [[ARG1]], float noundef [[ARG2]])132; CHECK-NEXT:    ret float [[OP]]133;134  %op = call float @llvm.fma.f32(float %arg0, float noundef %arg1, float noundef %arg2)135  %freeze = freeze float %op136  ret float %freeze137}138 139define float @freeze_fmuladd(float %arg0, float noundef %arg1, float noundef %arg2) {140; CHECK-LABEL: define float @freeze_fmuladd(141; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]], float noundef [[ARG2:%.*]]) {142; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]143; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.fmuladd.f32(float [[ARG0_FR]], float noundef [[ARG1]], float noundef [[ARG2]])144; CHECK-NEXT:    ret float [[OP]]145;146  %op = call float @llvm.fmuladd.f32(float %arg0, float noundef %arg1, float noundef %arg2)147  %freeze = freeze float %op148  ret float %freeze149}150 151define float @freeze_sqrt(float %arg) {152; CHECK-LABEL: define float @freeze_sqrt(153; CHECK-SAME: float [[ARG:%.*]]) {154; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]155; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.sqrt.f32(float [[ARG_FR]])156; CHECK-NEXT:    ret float [[OP]]157;158  %op = call float @llvm.sqrt.f32(float %arg)159  %freeze = freeze float %op160  ret float %freeze161}162 163define float @freeze_powi(float %arg0, i32 %arg1) {164; CHECK-LABEL: define float @freeze_powi(165; CHECK-SAME: float [[ARG0:%.*]], i32 [[ARG1:%.*]]) {166; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]167; CHECK-NEXT:    [[ARG1_FR:%.*]] = freeze i32 [[ARG1]]168; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.powi.f32.i32(float [[ARG0_FR]], i32 [[ARG1_FR]])169; CHECK-NEXT:    ret float [[OP]]170;171  %op = call float @llvm.powi.f32.i32(float %arg0, i32 %arg1)172  %freeze = freeze float %op173  ret float %freeze174}175 176define float @freeze_sin(float %arg) {177; CHECK-LABEL: define float @freeze_sin(178; CHECK-SAME: float [[ARG:%.*]]) {179; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]180; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.sin.f32(float [[ARG_FR]])181; CHECK-NEXT:    ret float [[OP]]182;183  %op = call float @llvm.sin.f32(float %arg)184  %freeze = freeze float %op185  ret float %freeze186}187 188define float @freeze_cos(float %arg) {189; CHECK-LABEL: define float @freeze_cos(190; CHECK-SAME: float [[ARG:%.*]]) {191; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]192; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.cos.f32(float [[ARG_FR]])193; CHECK-NEXT:    ret float [[OP]]194;195  %op = call float @llvm.cos.f32(float %arg)196  %freeze = freeze float %op197  ret float %freeze198}199 200define float @freeze_pow(float %arg0, float noundef %arg1) {201; CHECK-LABEL: define float @freeze_pow(202; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {203; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]204; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.pow.f32(float [[ARG0_FR]], float noundef [[ARG1]])205; CHECK-NEXT:    ret float [[OP]]206;207  %op = call float @llvm.pow.f32(float %arg0, float noundef %arg1)208  %freeze = freeze float %op209  ret float %freeze210}211 212define float @freeze_log(float %arg) {213; CHECK-LABEL: define float @freeze_log(214; CHECK-SAME: float [[ARG:%.*]]) {215; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]216; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.log.f32(float [[ARG_FR]])217; CHECK-NEXT:    ret float [[OP]]218;219  %op = call float @llvm.log.f32(float %arg)220  %freeze = freeze float %op221  ret float %freeze222}223 224define float @freeze_log10(float %arg) {225; CHECK-LABEL: define float @freeze_log10(226; CHECK-SAME: float [[ARG:%.*]]) {227; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]228; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.log10.f32(float [[ARG_FR]])229; CHECK-NEXT:    ret float [[OP]]230;231  %op = call float @llvm.log10.f32(float %arg)232  %freeze = freeze float %op233  ret float %freeze234}235 236define float @freeze_log2(float %arg) {237; CHECK-LABEL: define float @freeze_log2(238; CHECK-SAME: float [[ARG:%.*]]) {239; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]240; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.log2.f32(float [[ARG_FR]])241; CHECK-NEXT:    ret float [[OP]]242;243  %op = call float @llvm.log2.f32(float %arg)244  %freeze = freeze float %op245  ret float %freeze246}247 248define float @freeze_exp(float %arg) {249; CHECK-LABEL: define float @freeze_exp(250; CHECK-SAME: float [[ARG:%.*]]) {251; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]252; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.exp.f32(float [[ARG_FR]])253; CHECK-NEXT:    ret float [[OP]]254;255  %op = call float @llvm.exp.f32(float %arg)256  %freeze = freeze float %op257  ret float %freeze258}259 260define float @freeze_exp2(float %arg) {261; CHECK-LABEL: define float @freeze_exp2(262; CHECK-SAME: float [[ARG:%.*]]) {263; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]264; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.exp2.f32(float [[ARG_FR]])265; CHECK-NEXT:    ret float [[OP]]266;267  %op = call float @llvm.exp2.f32(float %arg)268  %freeze = freeze float %op269  ret float %freeze270}271 272define float @freeze_exp10(float %arg) {273; CHECK-LABEL: define float @freeze_exp10(274; CHECK-SAME: float [[ARG:%.*]]) {275; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]276; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.exp10.f32(float [[ARG_FR]])277; CHECK-NEXT:    ret float [[OP]]278;279  %op = call float @llvm.exp10.f32(float %arg)280  %freeze = freeze float %op281  ret float %freeze282}283 284define float @freeze_fabs(float %arg) {285; CHECK-LABEL: define float @freeze_fabs(286; CHECK-SAME: float [[ARG:%.*]]) {287; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]288; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.fabs.f32(float [[ARG_FR]])289; CHECK-NEXT:    ret float [[OP]]290;291  %op = call float @llvm.fabs.f32(float %arg)292  %freeze = freeze float %op293  ret float %freeze294}295 296define float @freeze_copysign(float %arg0, float noundef %arg1) {297; CHECK-LABEL: define float @freeze_copysign(298; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {299; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]300; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.copysign.f32(float [[ARG0_FR]], float noundef [[ARG1]])301; CHECK-NEXT:    ret float [[OP]]302;303  %op = call float @llvm.copysign.f32(float %arg0, float noundef %arg1)304  %freeze = freeze float %op305  ret float %freeze306}307 308define float @freeze_floor(float %arg) {309; CHECK-LABEL: define float @freeze_floor(310; CHECK-SAME: float [[ARG:%.*]]) {311; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]312; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.floor.f32(float [[ARG_FR]])313; CHECK-NEXT:    ret float [[OP]]314;315  %op = call float @llvm.floor.f32(float %arg)316  %freeze = freeze float %op317  ret float %freeze318}319 320define float @freeze_ceil(float %arg) {321; CHECK-LABEL: define float @freeze_ceil(322; CHECK-SAME: float [[ARG:%.*]]) {323; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]324; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.ceil.f32(float [[ARG_FR]])325; CHECK-NEXT:    ret float [[OP]]326;327  %op = call float @llvm.ceil.f32(float %arg)328  %freeze = freeze float %op329  ret float %freeze330}331 332define float @freeze_trunc(float %arg) {333; CHECK-LABEL: define float @freeze_trunc(334; CHECK-SAME: float [[ARG:%.*]]) {335; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]336; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.trunc.f32(float [[ARG_FR]])337; CHECK-NEXT:    ret float [[OP]]338;339  %op = call float @llvm.trunc.f32(float %arg)340  %freeze = freeze float %op341  ret float %freeze342}343 344define float @freeze_rint(float %arg) {345; CHECK-LABEL: define float @freeze_rint(346; CHECK-SAME: float [[ARG:%.*]]) {347; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]348; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.rint.f32(float [[ARG_FR]])349; CHECK-NEXT:    ret float [[OP]]350;351  %op = call float @llvm.rint.f32(float %arg)352  %freeze = freeze float %op353  ret float %freeze354}355 356define float @freeze_nearbyint(float %arg) {357; CHECK-LABEL: define float @freeze_nearbyint(358; CHECK-SAME: float [[ARG:%.*]]) {359; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]360; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.nearbyint.f32(float [[ARG_FR]])361; CHECK-NEXT:    ret float [[OP]]362;363  %op = call float @llvm.nearbyint.f32(float %arg)364  %freeze = freeze float %op365  ret float %freeze366}367 368define float @freeze_round(float %arg) {369; CHECK-LABEL: define float @freeze_round(370; CHECK-SAME: float [[ARG:%.*]]) {371; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]372; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.round.f32(float [[ARG_FR]])373; CHECK-NEXT:    ret float [[OP]]374;375  %op = call float @llvm.round.f32(float %arg)376  %freeze = freeze float %op377  ret float %freeze378}379 380define float @freeze_roundeven(float %arg) {381; CHECK-LABEL: define float @freeze_roundeven(382; CHECK-SAME: float [[ARG:%.*]]) {383; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]384; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.roundeven.f32(float [[ARG_FR]])385; CHECK-NEXT:    ret float [[OP]]386;387  %op = call float @llvm.roundeven.f32(float %arg)388  %freeze = freeze float %op389  ret float %freeze390}391 392define float @freeze_canonicalize(float %arg) {393; CHECK-LABEL: define float @freeze_canonicalize(394; CHECK-SAME: float [[ARG:%.*]]) {395; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]396; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.canonicalize.f32(float [[ARG_FR]])397; CHECK-NEXT:    ret float [[OP]]398;399  %op = call float @llvm.canonicalize.f32(float %arg)400  %freeze = freeze float %op401  ret float %freeze402}403 404define float @freeze_arithmetic_fence(float %arg) {405; CHECK-LABEL: define float @freeze_arithmetic_fence(406; CHECK-SAME: float [[ARG:%.*]]) {407; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]408; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.arithmetic.fence.f32(float [[ARG_FR]])409; CHECK-NEXT:    ret float [[OP]]410;411  %op = call float @llvm.arithmetic.fence.f32(float %arg)412  %freeze = freeze float %op413  ret float %freeze414}415 416define i32 @freeze_lround(float %arg) {417; CHECK-LABEL: define i32 @freeze_lround(418; CHECK-SAME: float [[ARG:%.*]]) {419; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]420; CHECK-NEXT:    [[OP:%.*]] = call i32 @llvm.lround.i32.f32(float [[ARG_FR]])421; CHECK-NEXT:    ret i32 [[OP]]422;423  %op = call i32 @llvm.lround.i32.f32(float %arg)424  %freeze = freeze i32 %op425  ret i32 %freeze426}427 428define i32 @freeze_llround(float %arg) {429; CHECK-LABEL: define i32 @freeze_llround(430; CHECK-SAME: float [[ARG:%.*]]) {431; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]432; CHECK-NEXT:    [[OP:%.*]] = call i32 @llvm.llround.i32.f32(float [[ARG_FR]])433; CHECK-NEXT:    ret i32 [[OP]]434;435  %op = call i32 @llvm.llround.i32.f32(float %arg)436  %freeze = freeze i32 %op437  ret i32 %freeze438}439 440define i32 @freeze_lrint(float %arg) {441; CHECK-LABEL: define i32 @freeze_lrint(442; CHECK-SAME: float [[ARG:%.*]]) {443; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]444; CHECK-NEXT:    [[OP:%.*]] = call i32 @llvm.lrint.i32.f32(float [[ARG_FR]])445; CHECK-NEXT:    ret i32 [[OP]]446;447  %op = call i32 @llvm.lrint.i32.f32(float %arg)448  %freeze = freeze i32 %op449  ret i32 %freeze450}451 452define i32 @freeze_llrint(float %arg) {453; CHECK-LABEL: define i32 @freeze_llrint(454; CHECK-SAME: float [[ARG:%.*]]) {455; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG]]456; CHECK-NEXT:    [[OP:%.*]] = call i32 @llvm.llrint.i32.f32(float [[ARG_FR]])457; CHECK-NEXT:    ret i32 [[OP]]458;459  %op = call i32 @llvm.llrint.i32.f32(float %arg)460  %freeze = freeze i32 %op461  ret i32 %freeze462}463 464define i32 @freeze_noundef_lround(float %arg) {465; CHECK-LABEL: define i32 @freeze_noundef_lround(466; CHECK-SAME: float [[ARG:%.*]]) {467; CHECK-NEXT:    [[OP:%.*]] = call noundef i32 @llvm.lround.i32.f32(float [[ARG]])468; CHECK-NEXT:    ret i32 [[OP]]469;470  %op = call noundef i32 @llvm.lround.i32.f32(float %arg)471  %freeze = freeze i32 %op472  ret i32 %freeze473}474 475define i32 @freeze_noundef_llround(float %arg) {476; CHECK-LABEL: define i32 @freeze_noundef_llround(477; CHECK-SAME: float [[ARG:%.*]]) {478; CHECK-NEXT:    [[OP:%.*]] = call noundef i32 @llvm.llround.i32.f32(float [[ARG]])479; CHECK-NEXT:    ret i32 [[OP]]480;481  %op = call noundef i32 @llvm.llround.i32.f32(float %arg)482  %freeze = freeze i32 %op483  ret i32 %freeze484}485 486define i32 @freeze_noundef_lrint(float %arg) {487; CHECK-LABEL: define i32 @freeze_noundef_lrint(488; CHECK-SAME: float [[ARG:%.*]]) {489; CHECK-NEXT:    [[OP:%.*]] = call noundef i32 @llvm.lrint.i32.f32(float [[ARG]])490; CHECK-NEXT:    ret i32 [[OP]]491;492  %op = call noundef i32 @llvm.lrint.i32.f32(float %arg)493  %freeze = freeze i32 %op494  ret i32 %freeze495}496 497define i32 @freeze_noundef_llrint(float %arg) {498; CHECK-LABEL: define i32 @freeze_noundef_llrint(499; CHECK-SAME: float [[ARG:%.*]]) {500; CHECK-NEXT:    [[OP:%.*]] = call noundef i32 @llvm.llrint.i32.f32(float [[ARG]])501; CHECK-NEXT:    ret i32 [[OP]]502;503  %op = call noundef i32 @llvm.llrint.i32.f32(float %arg)504  %freeze = freeze i32 %op505  ret i32 %freeze506}507 508define float @freeze_minnum(float %arg0, float noundef %arg1) {509; CHECK-LABEL: define float @freeze_minnum(510; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {511; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]512; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.minnum.f32(float [[ARG0_FR]], float noundef [[ARG1]])513; CHECK-NEXT:    ret float [[OP]]514;515  %op = call float @llvm.minnum.f32(float %arg0, float noundef %arg1)516  %freeze = freeze float %op517  ret float %freeze518}519 520define float @freeze_maxnum(float %arg0, float noundef %arg1) {521; CHECK-LABEL: define float @freeze_maxnum(522; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {523; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]524; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.maxnum.f32(float [[ARG0_FR]], float noundef [[ARG1]])525; CHECK-NEXT:    ret float [[OP]]526;527  %op = call float @llvm.maxnum.f32(float %arg0, float noundef %arg1)528  %freeze = freeze float %op529  ret float %freeze530}531 532define float @freeze_minimum(float %arg0, float noundef %arg1) {533; CHECK-LABEL: define float @freeze_minimum(534; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {535; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]536; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.minimum.f32(float [[ARG0_FR]], float noundef [[ARG1]])537; CHECK-NEXT:    ret float [[OP]]538;539  %op = call float @llvm.minimum.f32(float %arg0, float noundef %arg1)540  %freeze = freeze float %op541  ret float %freeze542}543 544define float @freeze_maximum(float %arg0, float noundef %arg1) {545; CHECK-LABEL: define float @freeze_maximum(546; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {547; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]548; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.maximum.f32(float [[ARG0_FR]], float noundef [[ARG1]])549; CHECK-NEXT:    ret float [[OP]]550;551  %op = call float @llvm.maximum.f32(float %arg0, float noundef %arg1)552  %freeze = freeze float %op553  ret float %freeze554}555 556define float @freeze_minimumnum(float %arg0, float noundef %arg1) {557; CHECK-LABEL: define float @freeze_minimumnum(558; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {559; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]560; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.minimumnum.f32(float [[ARG0_FR]], float noundef [[ARG1]])561; CHECK-NEXT:    ret float [[OP]]562;563  %op = call float @llvm.minimumnum.f32(float %arg0, float noundef %arg1)564  %freeze = freeze float %op565  ret float %freeze566}567 568define float @freeze_maximumnum(float %arg0, float noundef %arg1) {569; CHECK-LABEL: define float @freeze_maximumnum(570; CHECK-SAME: float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) {571; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]572; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.maximumnum.f32(float [[ARG0_FR]], float noundef [[ARG1]])573; CHECK-NEXT:    ret float [[OP]]574;575  %op = call float @llvm.maximumnum.f32(float %arg0, float noundef %arg1)576  %freeze = freeze float %op577  ret float %freeze578}579 580define i1 @freeze_isfpclass(float %arg0) {581; CHECK-LABEL: define i1 @freeze_isfpclass(582; CHECK-SAME: float [[ARG0:%.*]]) {583; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]584; CHECK-NEXT:    [[OP:%.*]] = call i1 @llvm.is.fpclass.f32(float [[ARG0_FR]], i32 27)585; CHECK-NEXT:    ret i1 [[OP]]586;587  %op = call i1 @llvm.is.fpclass.f32(float %arg0, i32 27)588  %freeze = freeze i1 %op589  ret i1 %freeze590}591 592define float @freeze_fptrunc_round(double %arg0) {593; CHECK-LABEL: define float @freeze_fptrunc_round(594; CHECK-SAME: double [[ARG0:%.*]]) {595; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze double [[ARG0]]596; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.fptrunc.round.f32.f64(double [[ARG0_FR]], metadata !"round.downward")597; CHECK-NEXT:    ret float [[OP]]598;599  %op = call float @llvm.fptrunc.round.f32.f64(double %arg0, metadata !"round.downward")600  %freeze = freeze float %op601  ret float %freeze602}603 604define float @freeze_ldexp(float %arg0, i32 noundef %arg1) {605; CHECK-LABEL: define float @freeze_ldexp(606; CHECK-SAME: float [[ARG0:%.*]], i32 noundef [[ARG1:%.*]]) {607; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]608; CHECK-NEXT:    [[OP:%.*]] = call float @llvm.ldexp.f32.i32(float [[ARG0_FR]], i32 [[ARG1]])609; CHECK-NEXT:    ret float [[OP]]610;611  %op = call float @llvm.ldexp.f32.i32(float %arg0, i32 %arg1)612  %freeze = freeze float %op613  ret float %freeze614}615 616define { float, i32 } @freeze_frexp(float %arg0) {617; CHECK-LABEL: define { float, i32 } @freeze_frexp(618; CHECK-SAME: float [[ARG0:%.*]]) {619; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]620; CHECK-NEXT:    [[OP:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float [[ARG0_FR]])621; CHECK-NEXT:    ret { float, i32 } [[OP]]622;623  %op = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)624  %freeze = freeze { float, i32 } %op625  ret { float, i32 } %freeze626}627 628define float @freeze_frexp_0(float %arg0) {629; CHECK-LABEL: define float @freeze_frexp_0(630; CHECK-SAME: float [[ARG0:%.*]]) {631; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]632; CHECK-NEXT:    [[OP:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float [[ARG0_FR]])633; CHECK-NEXT:    [[EXTRACT_0:%.*]] = extractvalue { float, i32 } [[OP]], 0634; CHECK-NEXT:    ret float [[EXTRACT_0]]635;636  %op = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)637  %extract.0 = extractvalue { float, i32 } %op, 0638  %freeze = freeze float %extract.0639  ret float %freeze640}641 642define i32 @freeze_frexp_1(float %arg0) {643; CHECK-LABEL: define i32 @freeze_frexp_1(644; CHECK-SAME: float [[ARG0:%.*]]) {645; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze float [[ARG0]]646; CHECK-NEXT:    [[OP:%.*]] = call { float, i32 } @llvm.frexp.f32.i32(float [[ARG0_FR]])647; CHECK-NEXT:    [[EXTRACT_1:%.*]] = extractvalue { float, i32 } [[OP]], 1648; CHECK-NEXT:    ret i32 [[EXTRACT_1]]649;650  %op = call { float, i32 } @llvm.frexp.f32.i32(float %arg0)651  %extract.1 = extractvalue { float, i32 } %op, 1652  %freeze = freeze i32 %extract.1653  ret i32 %freeze654}655 656declare float @llvm.fma.f32(float, float, float)657declare float @llvm.fmuladd.f32(float, float, float)658declare float @llvm.sqrt.f32(float)659declare float @llvm.powi.f32.i32(float, i32)660declare float @llvm.sin.f32(float)661declare float @llvm.cos.f32(float)662declare float @llvm.pow.f32(float, float)663declare float @llvm.log.f32(float)664declare float @llvm.log10.f32(float)665declare float @llvm.log2.f32(float)666declare float @llvm.exp.f32(float)667declare float @llvm.exp2.f32(float)668declare float @llvm.exp10.f32(float)669declare float @llvm.fabs.f32(float)670declare float @llvm.copysign.f32(float, float)671declare float @llvm.floor.f32(float)672declare float @llvm.ceil.f32(float)673declare float @llvm.trunc.f32(float)674declare float @llvm.rint.f32(float)675declare float @llvm.nearbyint.f32(float)676declare float @llvm.round.f32(float)677declare float @llvm.roundeven.f32(float)678declare float @llvm.canonicalize.f32(float)679declare float @llvm.arithmetic.fence.f32(float)680declare i32 @llvm.lround.i32.f32(float)681declare i32 @llvm.llround.i32.f32(float)682declare i32 @llvm.lrint.i32.f32(float)683declare i32 @llvm.llrint.i32.f32(float)684declare float @llvm.minnum.f32(float, float)685declare float @llvm.maxnum.f32(float, float)686declare float @llvm.minimum.f32(float, float)687declare float @llvm.maximum.f32(float, float)688declare i1 @llvm.is.fpclass.f32(float, i32 immarg)689declare float @llvm.fptrunc.round.f32.f64(double, metadata)690declare float @llvm.ldexp.f32.i32(float, i32)691declare { float, i32 } @llvm.frexp.f32.i32(float)692