brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.3 KiB · 1ba7005 Raw
735 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --scrub-attributes2; RUN: opt -S -passes=instcombine < %s | FileCheck -check-prefixes=CHECK,IEEE %s3; RUN: opt -S -passes=instcombine -denormal-fp-math=preserve-sign < %s | FileCheck -check-prefixes=CHECK,DAZ  %s4; RUN: opt -S -passes=instcombine -denormal-fp-math=positive-zero < %s | FileCheck -check-prefixes=CHECK,DAPZ  %s5 6; Test for patterns that appear when denormal range checks are folded7; to compares to 0, which drop canonicalizing8 9declare void @llvm.assume(i1 noundef)10declare float @llvm.fabs.f32(float)11declare float @llvm.ldexp.f32.i32(float, i32)12declare <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float>, <2 x i32>)13 14 15define i32 @fcmp_zero_select_is_not_fp(float %x) {16; CHECK-LABEL: @fcmp_zero_select_is_not_fp(17; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = bitcast float [[X:%.*]] to i3218; CHECK-NEXT:    ret i32 [[SCALED_IF_DENORMAL]]19;20  %x.is.zero = fcmp oeq float %x, 0.021  %scaled.x = fmul float %x, 32.022  %bitcast.scaled.x = bitcast float %scaled.x to i3223  %bitcast.x = bitcast float %x to i3224  %scaled.if.denormal = select i1 %x.is.zero, i32 %bitcast.scaled.x, i32 %bitcast.x25  ret i32 %scaled.if.denormal26}27 28define i32 @fcmp_zero_select_is_not_fp_unfoldable(float %x, i32 %y, i32 %z) {29; CHECK-LABEL: @fcmp_zero_select_is_not_fp_unfoldable(30; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+0031; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[X_IS_ZERO]], i32 [[Y:%.*]], i32 [[Z:%.*]]32; CHECK-NEXT:    ret i32 [[SELECT]]33;34  %x.is.zero = fcmp oeq float %x, 0.035  %select = select i1 %x.is.zero, i32 %y, i32 %z36  ret i32 %select37}38 39; Real case40define float @fmul_by_32_if_0_oeq_zero_f32(float %x) {41; CHECK-LABEL: @fmul_by_32_if_0_oeq_zero_f32(42; CHECK-NEXT:    ret float [[X:%.*]]43;44  %x.is.zero = fcmp oeq float %x, 0.045  %scaled.x = fmul float %x, 32.046  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x47  ret float %scaled.if.denormal48}49 50define float @ldexp_by_5_if_0_oeq_zero_f32(float %x) {51; CHECK-LABEL: @ldexp_by_5_if_0_oeq_zero_f32(52; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+0053; CHECK-NEXT:    [[SCALED_X:%.*]] = call float @llvm.ldexp.f32.i32(float [[X]], i32 5)54; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[X]]55; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]56;57  %x.is.zero = fcmp oeq float %x, 0.058  %scaled.x = call float @llvm.ldexp.f32.i32(float %x, i32 5)59  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x60  ret float %scaled.if.denormal61}62 63define <2 x float> @ldexp_by_5_if_0_oeq_zero_v2f32(<2 x float> %x) {64; CHECK-LABEL: @ldexp_by_5_if_0_oeq_zero_v2f32(65; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq <2 x float> [[X:%.*]], zeroinitializer66; CHECK-NEXT:    [[SCALED_X:%.*]] = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> [[X]], <2 x i32> splat (i32 5))67; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select <2 x i1> [[X_IS_ZERO]], <2 x float> [[SCALED_X]], <2 x float> [[X]]68; CHECK-NEXT:    ret <2 x float> [[SCALED_IF_DENORMAL]]69;70  %x.is.zero = fcmp oeq <2 x float> %x, zeroinitializer71  %scaled.x = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> <i32 5, i32 5>)72  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x73  ret <2 x float> %scaled.if.denormal74}75 76define <2 x float> @ldexp_by_n_if_0_oeq_zero_v2f32(<2 x float> %x, <2 x i32> %n) {77; CHECK-LABEL: @ldexp_by_n_if_0_oeq_zero_v2f32(78; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq <2 x float> [[X:%.*]], zeroinitializer79; CHECK-NEXT:    [[SCALED_X:%.*]] = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> [[X]], <2 x i32> [[N:%.*]])80; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select <2 x i1> [[X_IS_ZERO]], <2 x float> [[SCALED_X]], <2 x float> [[X]]81; CHECK-NEXT:    ret <2 x float> [[SCALED_IF_DENORMAL]]82;83  %x.is.zero = fcmp oeq <2 x float> %x, zeroinitializer84  %scaled.x = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> %n)85  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x86  ret <2 x float> %scaled.if.denormal87}88 89define float @ldexp_by_n_if_0_oeq_zero_f32(float %x, i32 %n) {90; CHECK-LABEL: @ldexp_by_n_if_0_oeq_zero_f32(91; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+0092; CHECK-NEXT:    [[SCALED_X:%.*]] = call float @llvm.ldexp.f32.i32(float [[X]], i32 [[N:%.*]])93; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[X]]94; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]95;96  %x.is.zero = fcmp oeq float %x, 0.097  %scaled.x = call float @llvm.ldexp.f32.i32(float %x, i32 %n)98  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x99  ret float %scaled.if.denormal100}101 102; Real case, vector splat103define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_splat(<2 x float> %x) {104; CHECK-LABEL: @fmul_by_32_if_0_oeq_zero_v2f32_splat(105; CHECK-NEXT:    ret <2 x float> [[X:%.*]]106;107  %x.is.zero = fcmp oeq <2 x float> %x, zeroinitializer108  %scaled.x = fmul <2 x float> %x, <float 32.0, float 32.0>109  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x110  ret <2 x float> %scaled.if.denormal111}112 113define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_nonsplat(<2 x float> %x) {114; CHECK-LABEL: @fmul_by_32_if_0_oeq_zero_v2f32_nonsplat(115; CHECK-NEXT:    ret <2 x float> [[X:%.*]]116;117  %x.is.zero = fcmp oeq <2 x float> %x, zeroinitializer118  %scaled.x = fmul <2 x float> %x, <float 32.0, float 64.0>119  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x120  ret <2 x float> %scaled.if.denormal121}122 123define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_eq_mixed_zero_vector(<2 x float> %x) {124; CHECK-LABEL: @fmul_by_32_if_0_oeq_zero_v2f32_eq_mixed_zero_vector(125; CHECK-NEXT:    ret <2 x float> [[X:%.*]]126;127  %x.is.zero = fcmp oeq <2 x float> %x, <float 0.0, float -0.0>128  %scaled.x = fmul <2 x float> %x, <float 32.0, float 32.0>129  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x130  ret <2 x float> %scaled.if.denormal131}132 133define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_eq_zero_vector_undef(<2 x float> %x) {134; CHECK-LABEL: @fmul_by_32_if_0_oeq_zero_v2f32_eq_zero_vector_undef(135; CHECK-NEXT:    ret <2 x float> [[X:%.*]]136;137  %x.is.zero = fcmp oeq <2 x float> %x, <float 0.0, float poison>138  %scaled.x = fmul <2 x float> %x, <float 32.0, float 32.0>139  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x140  ret <2 x float> %scaled.if.denormal141}142 143define float @select_wrong_value(float %x, float %y) {144; CHECK-LABEL: @select_wrong_value(145; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00146; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[X]], 3.200000e+01147; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[Y:%.*]]148; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]149;150  %x.is.zero = fcmp oeq float %x, 0.0151  %scaled.x = fmul float %x, 32.0152  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %y153  ret float %scaled.if.denormal154}155 156define float @fmul_wrong_value(float %x, float %y) {157; CHECK-LABEL: @fmul_wrong_value(158; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00159; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[Y:%.*]], 3.200000e+01160; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[X]]161; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]162;163  %x.is.zero = fcmp oeq float %x, 0.0164  %scaled.x = fmul float %y, 32.0165  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x166  ret float %scaled.if.denormal167}168 169; wrong compared constant170define float @fmul_by_32_if_1_oeq_zero_f32(float %x) {171; CHECK-LABEL: @fmul_by_32_if_1_oeq_zero_f32(172; CHECK-NEXT:    [[X_IS_ONE:%.*]] = fcmp oeq float [[X:%.*]], 1.000000e+00173; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ONE]], float 3.200000e+01, float [[X]]174; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]175;176  %x.is.one = fcmp oeq float %x, 1.0177  %scaled.x = fmul float %x, 32.0178  %scaled.if.denormal = select i1 %x.is.one, float %scaled.x, float %x179  ret float %scaled.if.denormal180}181 182define float @fmul_by_32_if_var_oeq_zero_f32(float %x, float %y) {183; CHECK-LABEL: @fmul_by_32_if_var_oeq_zero_f32(184; CHECK-NEXT:    [[X_IS_ONE:%.*]] = fcmp oeq float [[X:%.*]], [[Y:%.*]]185; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[X]], 3.200000e+01186; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ONE]], float [[SCALED_X]], float [[X]]187; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]188;189  %x.is.one = fcmp oeq float %x, %y190  %scaled.x = fmul float %x, 32.0191  %scaled.if.denormal = select i1 %x.is.one, float %scaled.x, float %x192  ret float %scaled.if.denormal193}194 195define float @fmul_by_32_if_0_ueq_zero_f32(float %x) {196; CHECK-LABEL: @fmul_by_32_if_0_ueq_zero_f32(197; CHECK-NEXT:    ret float [[X:%.*]]198;199  %x.is.zero = fcmp ueq float %x, 0.0200  %scaled.x = fmul float %x, 32.0201  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x202  ret float %scaled.if.denormal203}204 205define float @fmul_by_32_if_0_oeq_negzero_f32(float %x) {206; CHECK-LABEL: @fmul_by_32_if_0_oeq_negzero_f32(207; CHECK-NEXT:    ret float [[X:%.*]]208;209  %x.is.zero = fcmp oeq float %x, -0.0210  %scaled.x = fmul float %x, 32.0211  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x212  ret float %scaled.if.denormal213}214 215define float @fmul_by_32_if_0_oeq_zero_f32_multiple_use_cmp(float %x, ptr %ptr) {216; CHECK-LABEL: @fmul_by_32_if_0_oeq_zero_f32_multiple_use_cmp(217; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00218; CHECK-NEXT:    store i1 [[X_IS_ZERO]], ptr [[PTR:%.*]], align 1219; CHECK-NEXT:    ret float [[X]]220;221  %x.is.zero = fcmp oeq float %x, 0.0222  %scaled.x = fmul float %x, 32.0223  store i1 %x.is.zero, ptr %ptr224  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x225  ret float %scaled.if.denormal226}227 228define float @fmul_by_32_if_0_oeq_zero_f32_multiple_use_fmul(float %x, ptr %ptr) {229; CHECK-LABEL: @fmul_by_32_if_0_oeq_zero_f32_multiple_use_fmul(230; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[X:%.*]], 3.200000e+01231; CHECK-NEXT:    store float [[SCALED_X]], ptr [[PTR:%.*]], align 4232; CHECK-NEXT:    ret float [[X]]233;234  %x.is.zero = fcmp oeq float %x, 0.0235  %scaled.x = fmul float %x, 32.0236  store float %scaled.x, ptr %ptr237  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x238  ret float %scaled.if.denormal239}240 241define float @fmul_by_0_if_0_oeq_zero_f32(float %x) {242; CHECK-LABEL: @fmul_by_0_if_0_oeq_zero_f32(243; CHECK-NEXT:    ret float [[X:%.*]]244;245  %x.is.zero = fcmp oeq float %x, 0.0246  %scaled.x = fmul float %x, 0.0247  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x248  ret float %scaled.if.denormal249}250 251; Inverse of the real case252define float @x_if_one_zero_else_mul_by_32(float %x) {253; CHECK-LABEL: @x_if_one_zero_else_mul_by_32(254; CHECK-NEXT:    ret float [[X:%.*]]255;256  %x.is.not.zero = fcmp one float %x, 0.0257  %scaled.x = fmul float %x, 32.0258  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x259  ret float %scaled.if.denormal260}261 262define float @x_if_one_negzero_else_mul_by_32(float %x) {263; CHECK-LABEL: @x_if_one_negzero_else_mul_by_32(264; CHECK-NEXT:    ret float [[X:%.*]]265;266  %x.is.not.zero = fcmp one float %x, -0.0267  %scaled.x = fmul float %x, 32.0268  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x269  ret float %scaled.if.denormal270}271 272define float @x_if_une_zero_else_mul_by_32(float %x) {273; CHECK-LABEL: @x_if_une_zero_else_mul_by_32(274; CHECK-NEXT:    ret float [[X:%.*]]275;276  %x.is.not.zero = fcmp une float %x, 0.0277  %scaled.x = fmul float %x, 32.0278  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x279  ret float %scaled.if.denormal280}281 282define float @x_if_une_negzero_else_mul_by_32(float %x) {283; CHECK-LABEL: @x_if_une_negzero_else_mul_by_32(284; CHECK-NEXT:    ret float [[X:%.*]]285;286  %x.is.not.zero = fcmp une float %x, -0.0287  %scaled.x = fmul float %x, 32.0288  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x289  ret float %scaled.if.denormal290}291 292define float @fmul_by_neg32_if_0_oeq_zero_f32(float %x) {293; CHECK-LABEL: @fmul_by_neg32_if_0_oeq_zero_f32(294; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00295; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[X]], -3.200000e+01296; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[X]]297; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]298;299  %x.is.zero = fcmp oeq float %x, 0.0300  %scaled.x = fmul float %x, -32.0301  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x302  ret float %scaled.if.denormal303}304 305define float @fmul_by_neg32_if_0_one_zero_f32(float %x) {306; CHECK-LABEL: @fmul_by_neg32_if_0_one_zero_f32(307; CHECK-NEXT:    [[X_IS_NOT_ZERO:%.*]] = fcmp one float [[X:%.*]], 0.000000e+00308; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[X]], -3.200000e+01309; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_NOT_ZERO]], float [[X]], float [[SCALED_X]]310; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]311;312  %x.is.not.zero = fcmp one float %x, 0.0313  %scaled.x = fmul float %x, -32.0314  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x315  ret float %scaled.if.denormal316}317 318define float @fmul_by_neg32_if_0_oeq_zero_f32_select_nsz(float %x) {319; CHECK-LABEL: @fmul_by_neg32_if_0_oeq_zero_f32_select_nsz(320; CHECK-NEXT:    ret float [[X:%.*]]321;322  %x.is.zero = fcmp oeq float %x, 0.0323  %scaled.x = fmul float %x, -32.0324  %scaled.if.denormal = select nsz i1 %x.is.zero, float %scaled.x, float %x325  ret float %scaled.if.denormal326}327 328define float @fmul_by_neg32_if_0_one_zero_f32_select_nsz(float %x) {329; CHECK-LABEL: @fmul_by_neg32_if_0_one_zero_f32_select_nsz(330; CHECK-NEXT:    ret float [[X:%.*]]331;332  %x.is.not.zero = fcmp one float %x, 0.0333  %scaled.x = fmul float %x, -32.0334  %scaled.if.denormal = select nsz i1 %x.is.not.zero, float %x, float %scaled.x335  ret float %scaled.if.denormal336}337 338define float @fmul_by_neg32_if_0_oeq_zero_f32_fmul_nsz(float %x) {339; CHECK-LABEL: @fmul_by_neg32_if_0_oeq_zero_f32_fmul_nsz(340; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00341; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul nsz float [[X]], -3.200000e+01342; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[X]]343; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]344;345  %x.is.zero = fcmp oeq float %x, 0.0346  %scaled.x = fmul nsz float %x, -32.0347  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x348  ret float %scaled.if.denormal349}350 351define float @fmul_by_neg32_if_0_one_zero_f32_mul_nsz(float %x) {352; CHECK-LABEL: @fmul_by_neg32_if_0_one_zero_f32_mul_nsz(353; CHECK-NEXT:    [[X_IS_NOT_ZERO:%.*]] = fcmp one float [[X:%.*]], 0.000000e+00354; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul nsz float [[X]], -3.200000e+01355; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_NOT_ZERO]], float [[X]], float [[SCALED_X]]356; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]357;358  %x.is.not.zero = fcmp one float %x, 0.0359  %scaled.x = fmul nsz float %x, -32.0360  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x361  ret float %scaled.if.denormal362}363 364define float @fmul_by_neg0_if_0_oeq_zero_f32(float %x) {365; CHECK-LABEL: @fmul_by_neg0_if_0_oeq_zero_f32(366; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00367; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[X]], -0.000000e+00368; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[X]]369; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]370;371  %x.is.zero = fcmp oeq float %x, 0.0372  %scaled.x = fmul float %x, -0.0373  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x374  ret float %scaled.if.denormal375}376 377define float @fmul_by_neginf_if_0_oeq_zero_f32(float %x) {378; CHECK-LABEL: @fmul_by_neginf_if_0_oeq_zero_f32(379; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00380; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[X]], 0xFFF0000000000000381; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[X]]382; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]383;384  %x.is.zero = fcmp oeq float %x, 0.0385  %scaled.x = fmul float %x, 0xFFF0000000000000386  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x387  ret float %scaled.if.denormal388}389 390define float @fmul_by_posinf_if_0_oeq_zero_f32(float %x) {391; CHECK-LABEL: @fmul_by_posinf_if_0_oeq_zero_f32(392; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00393; CHECK-NEXT:    [[SCALED_X:%.*]] = fmul float [[X]], 0x7FF0000000000000394; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float [[SCALED_X]], float [[X]]395; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]396;397  %x.is.zero = fcmp oeq float %x, 0.0398  %scaled.x = fmul float %x, 0x7FF0000000000000399  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x400  ret float %scaled.if.denormal401}402 403define float @fmul_by_qnan_if_0_oeq_zero_f32(float %x) {404; CHECK-LABEL: @fmul_by_qnan_if_0_oeq_zero_f32(405; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00406; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float 0x7FF8000000000000, float [[X]]407; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]408;409  %x.is.zero = fcmp oeq float %x, 0.0410  %scaled.x = fmul float %x, 0x7FF8000000000000411  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x412  ret float %scaled.if.denormal413}414 415define float @fmul_by_snan_if_0_oeq_zero_f32(float %x) {416; CHECK-LABEL: @fmul_by_snan_if_0_oeq_zero_f32(417; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00418; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = select i1 [[X_IS_ZERO]], float 0x7FF8800000000000, float [[X]]419; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]420;421  %x.is.zero = fcmp oeq float %x, 0.0422  %scaled.x = fmul float %x, 0x7FF0800000000000423  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x424  ret float %scaled.if.denormal425}426 427define float @fmul_by_var_if_0_oeq_zero_f32(float %x, float %y) {428; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32(429; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00430; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00431; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]432; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]433;434  %x.is.zero = fcmp oeq float %x, 0.0435  %scaled.x = fmul float %x, %y436  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x437  ret float %scaled.if.denormal438}439 440define float @fmul_by_fabs_var_if_0_oeq_zero_f32(float %x, float %y) {441; CHECK-LABEL: @fmul_by_fabs_var_if_0_oeq_zero_f32(442; CHECK-NEXT:    [[Y_FABS:%.*]] = call float @llvm.fabs.f32(float [[Y:%.*]])443; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00444; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y_FABS]], float 1.000000e+00445; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]446; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]447;448  %y.fabs = call float @llvm.fabs.f32(float %y)449  %x.is.zero = fcmp oeq float %x, 0.0450  %scaled.x = fmul float %x, %y.fabs451  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x452  ret float %scaled.if.denormal453}454 455define float @fmul_by_fabs_nnan_ninf_var_if_0_oeq_zero_f32(float %x, float %y) {456; CHECK-LABEL: @fmul_by_fabs_nnan_ninf_var_if_0_oeq_zero_f32(457; CHECK-NEXT:    ret float [[X:%.*]]458;459  %y.fabs = call nnan ninf float @llvm.fabs.f32(float %y)460  %x.is.zero = fcmp oeq float %x, 0.0461  %scaled.x = fmul float %x, %y.fabs462  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x463  ret float %scaled.if.denormal464}465 466; nsz is not sufficient467define float @fmul_by_var_if_0_oeq_zero_f32_nsz_fmul(float %x, float %y) {468; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nsz_fmul(469; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00470; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00471; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]472; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]473;474  %x.is.zero = fcmp oeq float %x, 0.0475  %scaled.x = fmul nsz float %x, %y476  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x477  ret float %scaled.if.denormal478}479 480; nsz ninf is not sufficient481define float @fmul_by_var_if_0_oeq_zero_f32_nsz_ninf_fmul(float %x, float %y) {482; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nsz_ninf_fmul(483; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00484; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00485; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]486; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]487;488  %x.is.zero = fcmp oeq float %x, 0.0489  %scaled.x = fmul nsz ninf float %x, %y490  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x491  ret float %scaled.if.denormal492}493 494; nsz nnan is not sufficient495define float @fmul_by_var_if_0_oeq_zero_f32_nsz_nnan_fmul(float %x, float %y) {496; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nsz_nnan_fmul(497; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00498; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00499; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul nnan float [[X]], [[SCALED_X]]500; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]501;502  %x.is.zero = fcmp oeq float %x, 0.0503  %scaled.x = fmul nsz nnan float %x, %y504  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x505  ret float %scaled.if.denormal506}507 508; nnan ninf is not sufficient509define float @fmul_by_var_if_0_oeq_zero_f32_nnan_ninf_fmul(float %x, float %y) {510; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nnan_ninf_fmul(511; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00512; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00513; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul nnan float [[X]], [[SCALED_X]]514; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]515;516  %x.is.zero = fcmp oeq float %x, 0.0517  %scaled.x = fmul nnan ninf float %x, %y518  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x519  ret float %scaled.if.denormal520}521 522; nsz nnan ninf is sufficient, but not useful on the select523define float @fmul_by_var_if_0_oeq_zero_f32_nsz_nnan_ninf_select(float %x, float %y) {524; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_nsz_nnan_ninf_select(525; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00526; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf nsz i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00527; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]528; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]529;530  %x.is.zero = fcmp oeq float %x, 0.0531  %scaled.x = fmul float %x, %y532  %scaled.if.denormal = select nsz nnan ninf i1 %x.is.zero, float %scaled.x, float %x533  ret float %scaled.if.denormal534}535 536; nsz can come from only the select537define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_nsz(float %x, float %y) {538; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_nsz(539; CHECK-NEXT:    ret float [[X:%.*]]540;541  %x.is.zero = fcmp oeq float %x, 0.0542  %scaled.x = fmul nnan ninf float %x, %y543  %scaled.if.denormal = select nsz i1 %x.is.zero, float %scaled.x, float %x544  ret float %scaled.if.denormal545}546 547; nsz can come from only the select548define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_nsz_inverted(float %x, float %y) {549; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_nsz_inverted(550; CHECK-NEXT:    ret float [[X:%.*]]551;552  %x.is.not.zero = fcmp one float %x, 0.0553  %scaled.x = fmul nnan ninf float %x, %y554  %scaled.if.denormal = select nsz i1 %x.is.not.zero, float %x, float %scaled.x555  ret float %scaled.if.denormal556}557 558define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz(float %x, float %y) {559; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz(560; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00561; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00562; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul nnan float [[X]], [[SCALED_X]]563; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]564;565  %x.is.zero = fcmp oeq float %x, 0.0566  %scaled.x = fmul nnan ninf nsz float %x, %y567  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x568  ret float %scaled.if.denormal569}570 571define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz_commuted(float %x, float %y) {572; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz_commuted(573; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00574; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00575; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul nnan float [[X]], [[SCALED_X]]576; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]577;578  %x.is.zero = fcmp oeq float %x, 0.0579  %scaled.x = fmul nnan ninf nsz float %y, %x580  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x581  ret float %scaled.if.denormal582}583 584; test computeKnownFPClass is checked585define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_known_never_negzero(float %x, float nofpclass(nzero) %y) {586; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_known_never_negzero(587; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00588; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00589; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul nnan float [[X]], [[SCALED_X]]590; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]591;592  %x.is.zero = fcmp oeq float %x, 0.0593  %scaled.x = fmul nnan ninf float %x, %y594  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x595  ret float %scaled.if.denormal596}597 598define float @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_known_never_negzero_negsub(float %x, float nofpclass(nzero nsub) %y) {599; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_nnan_ninf_select_known_never_negzero_negsub(600; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00601; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00602; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul nnan float [[X]], [[SCALED_X]]603; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]604;605  %x.is.zero = fcmp oeq float %x, 0.0606  %scaled.x = fmul nnan ninf float %x, %y607  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x608  ret float %scaled.if.denormal609}610 611define float @fmul_by_var_if_0_oeq_zero_f32_known_never_nan_inf_select_nsz(float %x, float nofpclass(nan inf) %y) {612; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_known_never_nan_inf_select_nsz(613; CHECK-NEXT:    ret float [[X:%.*]]614;615  %x.is.zero = fcmp oeq float %x, 0.0616  %scaled.x = fmul float %x, %y617  %scaled.if.denormal = select nsz i1 %x.is.zero, float %scaled.x, float %x618  ret float %scaled.if.denormal619}620 621; Infer everything from incoming multiplied value622define float @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_negzero(float %x, float nofpclass(nan inf nzero) %y) {623; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_negzero(624; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00625; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00626; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]627; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]628;629  %x.is.zero = fcmp oeq float %x, 0.0630  %scaled.x = fmul float %x, %y631  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x632  ret float %scaled.if.denormal633}634 635define float @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_negzero_nsub(float %x, float nofpclass(nan inf nzero nsub) %y) {636; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_negzero_nsub(637; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00638; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[Y:%.*]], float 1.000000e+00639; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]640; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]641;642  %x.is.zero = fcmp oeq float %x, 0.0643  %scaled.x = fmul float %x, %y644  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x645  ret float %scaled.if.denormal646}647 648define float @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_neg(float %x, float nofpclass(nan inf nzero nsub nnorm) %y) {649; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_fmul_known_never_nan_inf_neg(650; CHECK-NEXT:    ret float [[X:%.*]]651;652  %x.is.zero = fcmp oeq float %x, 0.0653  %scaled.x = fmul float %x, %y654  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x655  ret float %scaled.if.denormal656}657 658; Test assume of y works659define float @fmul_by_var_if_0_oeq_zero_f32_assume_finite_fmul_nsz(float %x, float %y) {660; CHECK-LABEL: @fmul_by_var_if_0_oeq_zero_f32_assume_finite_fmul_nsz(661; CHECK-NEXT:    [[FABS_Y:%.*]] = call float @llvm.fabs.f32(float [[Y:%.*]])662; CHECK-NEXT:    [[IS_FINITE:%.*]] = fcmp one float [[FABS_Y]], 0x7FF0000000000000663; CHECK-NEXT:    call void @llvm.assume(i1 [[IS_FINITE]])664; CHECK-NEXT:    ret float [[X:%.*]]665;666  %fabs.y = call float @llvm.fabs.f32(float %y)667  %is.finite = fcmp olt float %fabs.y, 0x7FF0000000000000668  call void @llvm.assume(i1 %is.finite)669  %x.is.zero = fcmp oeq float %x, 0.0670  %scaled.x = fmul float %x, %y671  %scaled.if.denormal = select nsz i1 %x.is.zero, float %scaled.x, float %x672  ret float %scaled.if.denormal673}674 675; Test assume of y works in inverted case676define float @fmul_by_var_if_not_one_0_zero_f32_assume_finite_fmul_nsz(float %x, float %y) {677; CHECK-LABEL: @fmul_by_var_if_not_one_0_zero_f32_assume_finite_fmul_nsz(678; CHECK-NEXT:    [[FABS_Y:%.*]] = call float @llvm.fabs.f32(float [[Y:%.*]])679; CHECK-NEXT:    [[IS_FINITE:%.*]] = fcmp one float [[FABS_Y]], 0x7FF0000000000000680; CHECK-NEXT:    call void @llvm.assume(i1 [[IS_FINITE]])681; CHECK-NEXT:    ret float [[X:%.*]]682;683  %fabs.y = call float @llvm.fabs.f32(float %y)684  %is.finite = fcmp olt float %fabs.y, 0x7FF0000000000000685  call void @llvm.assume(i1 %is.finite)686  %x.is.not.zero = fcmp one float %x, 0.0687  %scaled.x = fmul float %x, %y688  %scaled.if.denormal = select nsz i1 %x.is.not.zero, float %x, float %scaled.x689  ret float %scaled.if.denormal690}691 692define float @fmul_by_self_if_0_oeq_zero_f32(float %x) {693; CHECK-LABEL: @fmul_by_self_if_0_oeq_zero_f32(694; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00695; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan i1 [[X_IS_ZERO]], float [[X]], float 1.000000e+00696; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]697; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]698;699  %x.is.zero = fcmp oeq float %x, 0.0700  %scaled.x = fmul float %x, %x701  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x702  ret float %scaled.if.denormal703}704 705define float @fmul_by_self_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz(float %x) {706; CHECK-LABEL: @fmul_by_self_if_0_oeq_zero_f32_fmul_nnan_ninf_nsz(707; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00708; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf i1 [[X_IS_ZERO]], float [[X]], float 1.000000e+00709; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul nnan float [[X]], [[SCALED_X]]710; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]711;712  %x.is.zero = fcmp oeq float %x, 0.0713  %scaled.x = fmul nnan ninf nsz float %x, %x714  %scaled.if.denormal = select nnan i1 %x.is.zero, float %scaled.x, float %x715  ret float %scaled.if.denormal716}717 718define float @fmul_by_self_if_0_oeq_zero_f32_select_nnan_ninf_nsz(float %x) {719; CHECK-LABEL: @fmul_by_self_if_0_oeq_zero_f32_select_nnan_ninf_nsz(720; CHECK-NEXT:    [[X_IS_ZERO:%.*]] = fcmp oeq float [[X:%.*]], 0.000000e+00721; CHECK-NEXT:    [[SCALED_X:%.*]] = select nnan ninf nsz i1 [[X_IS_ZERO]], float [[X]], float 1.000000e+00722; CHECK-NEXT:    [[SCALED_IF_DENORMAL:%.*]] = fmul float [[X]], [[SCALED_X]]723; CHECK-NEXT:    ret float [[SCALED_IF_DENORMAL]]724;725  %x.is.zero = fcmp oeq float %x, 0.0726  %scaled.x = fmul float %x, %x727  %scaled.if.denormal = select nnan ninf nsz i1 %x.is.zero, float %scaled.x, float %x728  ret float %scaled.if.denormal729}730 731;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:732; DAPZ: {{.*}}733; DAZ: {{.*}}734; IEEE: {{.*}}735