269 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s3 4define float @fadd_zero_strict(float %x) {5; CHECK-LABEL: fadd_zero_strict:6; CHECK: # %bb.0:7; CHECK-NEXT: xorps %xmm1, %xmm18; CHECK-NEXT: addss %xmm1, %xmm09; CHECK-NEXT: retq10 %r = fadd float %x, 0.011 ret float %r12}13 14define float @fadd_negzero(float %x) {15; CHECK-LABEL: fadd_negzero:16; CHECK: # %bb.0:17; CHECK-NEXT: retq18 %r = fadd float %x, -0.019 ret float %r20}21 22define float @fadd_produce_zero(float %x) {23; CHECK-LABEL: fadd_produce_zero:24; CHECK: # %bb.0:25; CHECK-NEXT: xorps %xmm0, %xmm026; CHECK-NEXT: retq27 %neg = fsub nsz float 0.0, %x28 %r = fadd nnan float %neg, %x29 ret float %r30}31 32define float @fadd_reassociate(float %x) {33; CHECK-LABEL: fadd_reassociate:34; CHECK: # %bb.0:35; CHECK-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm036; CHECK-NEXT: retq37 %sum = fadd float %x, 8.038 %r = fadd reassoc nsz float %sum, 12.039 ret float %r40}41 42define float @fadd_negzero_nsz(float %x) {43; CHECK-LABEL: fadd_negzero_nsz:44; CHECK: # %bb.0:45; CHECK-NEXT: retq46 %r = fadd nsz float %x, -0.047 ret float %r48}49 50define float @fadd_zero_nsz(float %x) {51; CHECK-LABEL: fadd_zero_nsz:52; CHECK: # %bb.0:53; CHECK-NEXT: retq54 %r = fadd nsz float %x, 0.055 ret float %r56}57 58define float @fsub_zero(float %x) {59; CHECK-LABEL: fsub_zero:60; CHECK: # %bb.0:61; CHECK-NEXT: retq62 %r = fsub float %x, 0.063 ret float %r64}65 66define float @fsub_self(float %x) {67; CHECK-LABEL: fsub_self:68; CHECK: # %bb.0:69; CHECK-NEXT: xorps %xmm0, %xmm070; CHECK-NEXT: retq71 %r = fsub nnan float %x, %x72 ret float %r73}74 75define float @fsub_neg_x_y(float %x, float %y) {76; CHECK-LABEL: fsub_neg_x_y:77; CHECK: # %bb.0:78; CHECK-NEXT: subss %xmm0, %xmm179; CHECK-NEXT: movaps %xmm1, %xmm080; CHECK-NEXT: retq81 %neg = fsub nsz float 0.0, %x82 %r = fadd nsz float %neg, %y83 ret float %r84}85 86define float @fsub_neg_y(float %x, float %y) {87; CHECK-LABEL: fsub_neg_y:88; CHECK: # %bb.0:89; CHECK-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm090; CHECK-NEXT: retq91 %mul = fmul float %x, 5.092 %add = fadd float %mul, %y93 %r = fsub nsz reassoc float %y, %add94 ret float %r95}96 97define <4 x float> @fsub_neg_y_vector(<4 x float> %x, <4 x float> %y) {98; CHECK-LABEL: fsub_neg_y_vector:99; CHECK: # %bb.0:100; CHECK-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0101; CHECK-NEXT: retq102 %mul = fmul <4 x float> %x, <float 5.0, float 5.0, float 5.0, float 5.0>103 %add = fadd <4 x float> %mul, %y104 %r = fsub nsz reassoc <4 x float> %y, %add105 ret <4 x float> %r106}107 108define <4 x float> @fsub_neg_y_vector_nonuniform(<4 x float> %x, <4 x float> %y) {109; CHECK-LABEL: fsub_neg_y_vector_nonuniform:110; CHECK: # %bb.0:111; CHECK-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0112; CHECK-NEXT: retq113 %mul = fmul <4 x float> %x, <float 5.0, float 6.0, float 7.0, float 8.0>114 %add = fadd <4 x float> %mul, %y115 %r = fsub nsz reassoc <4 x float> %y, %add116 ret <4 x float> %r117}118 119define float @fsub_neg_y_commute(float %x, float %y) {120; CHECK-LABEL: fsub_neg_y_commute:121; CHECK: # %bb.0:122; CHECK-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0123; CHECK-NEXT: retq124 %mul = fmul float %x, 5.0125 %add = fadd float %y, %mul126 %r = fsub nsz reassoc float %y, %add127 ret float %r128}129 130define <4 x float> @fsub_neg_y_commute_vector(<4 x float> %x, <4 x float> %y) {131; CHECK-LABEL: fsub_neg_y_commute_vector:132; CHECK: # %bb.0:133; CHECK-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0134; CHECK-NEXT: retq135 %mul = fmul <4 x float> %x, <float 5.0, float 5.0, float 5.0, float 5.0>136 %add = fadd <4 x float> %y, %mul137 %r = fsub nsz reassoc <4 x float> %y, %add138 ret <4 x float> %r139}140 141; Y - (X + Y) --> -X142 143define float @fsub_fadd_common_op_fneg(float %x, float %y) {144; CHECK-LABEL: fsub_fadd_common_op_fneg:145; CHECK: # %bb.0:146; CHECK-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0147; CHECK-NEXT: retq148 %a = fadd float %x, %y149 %r = fsub reassoc nsz float %y, %a150 ret float %r151}152 153; Y - (X + Y) --> -X154 155define <4 x float> @fsub_fadd_common_op_fneg_vec(<4 x float> %x, <4 x float> %y) {156; CHECK-LABEL: fsub_fadd_common_op_fneg_vec:157; CHECK: # %bb.0:158; CHECK-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0159; CHECK-NEXT: retq160 %a = fadd <4 x float> %x, %y161 %r = fsub nsz reassoc <4 x float> %y, %a162 ret <4 x float> %r163}164 165; Y - (Y + X) --> -X166; Commute operands of the 'add'.167 168define float @fsub_fadd_common_op_fneg_commute(float %x, float %y) {169; CHECK-LABEL: fsub_fadd_common_op_fneg_commute:170; CHECK: # %bb.0:171; CHECK-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0172; CHECK-NEXT: retq173 %a = fadd float %y, %x174 %r = fsub reassoc nsz float %y, %a175 ret float %r176}177 178; Y - (Y + X) --> -X179 180define <4 x float> @fsub_fadd_common_op_fneg_commute_vec(<4 x float> %x, <4 x float> %y) {181; CHECK-LABEL: fsub_fadd_common_op_fneg_commute_vec:182; CHECK: # %bb.0:183; CHECK-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0184; CHECK-NEXT: retq185 %a = fadd <4 x float> %y, %x186 %r = fsub reassoc nsz <4 x float> %y, %a187 ret <4 x float> %r188}189 190define float @fsub_negzero_strict(float %x) {191; CHECK-LABEL: fsub_negzero_strict:192; CHECK: # %bb.0:193; CHECK-NEXT: xorps %xmm1, %xmm1194; CHECK-NEXT: addss %xmm1, %xmm0195; CHECK-NEXT: retq196 %r = fsub float %x, -0.0197 ret float %r198}199 200define float @fsub_negzero_nsz(float %x) {201; CHECK-LABEL: fsub_negzero_nsz:202; CHECK: # %bb.0:203; CHECK-NEXT: retq204 %r = fsub nsz float %x, -0.0205 ret float %r206}207 208define <4 x float> @fsub_negzero_strict_vector(<4 x float> %x) {209; CHECK-LABEL: fsub_negzero_strict_vector:210; CHECK: # %bb.0:211; CHECK-NEXT: xorps %xmm1, %xmm1212; CHECK-NEXT: addps %xmm1, %xmm0213; CHECK-NEXT: retq214 %r = fsub <4 x float> %x, <float -0.0, float -0.0, float -0.0, float -0.0>215 ret <4 x float> %r216}217 218define <4 x float> @fsub_negzero_nsz_vector(<4 x float> %x) {219; CHECK-LABEL: fsub_negzero_nsz_vector:220; CHECK: # %bb.0:221; CHECK-NEXT: retq222 %r = fsub nsz <4 x float> %x, <float -0.0, float -0.0, float -0.0, float -0.0>223 ret <4 x float> %r224}225 226define float @fsub_zero_nsz_1(float %x) {227; CHECK-LABEL: fsub_zero_nsz_1:228; CHECK: # %bb.0:229; CHECK-NEXT: retq230 %r = fsub nsz float %x, 0.0231 ret float %r232}233 234define float @fsub_zero_nsz_2(float %x) {235; CHECK-LABEL: fsub_zero_nsz_2:236; CHECK: # %bb.0:237; CHECK-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0238; CHECK-NEXT: retq239 %r = fsub nsz float 0.0, %x240 ret float %r241}242 243define float @fmul_zero(float %x) {244; CHECK-LABEL: fmul_zero:245; CHECK: # %bb.0:246; CHECK-NEXT: xorps %xmm0, %xmm0247; CHECK-NEXT: retq248 %r = fmul nnan nsz float %x, 0.0249 ret float %r250}251 252define float @fmul_one(float %x) {253; CHECK-LABEL: fmul_one:254; CHECK: # %bb.0:255; CHECK-NEXT: retq256 %r = fmul float %x, 1.0257 ret float %r258}259 260define float @fmul_x_const_const(float %x) {261; CHECK-LABEL: fmul_x_const_const:262; CHECK: # %bb.0:263; CHECK-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0264; CHECK-NEXT: retq265 %mul = fmul reassoc float %x, 9.0266 %r = fmul reassoc float %mul, 4.0267 ret float %r268}269