brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · a44671c Raw
279 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s3 4define float @fadd_zero_f32(float %x) #0 {5; CHECK-LABEL: fadd_zero_f32:6; CHECK:       # %bb.0:7; CHECK-NEXT:    retq8  %y = fadd nsz float %x, 0.09  ret float %y10}11 12define <4 x float> @fadd_zero_4f32(<4 x float> %x) #0 {13; CHECK-LABEL: fadd_zero_4f32:14; CHECK:       # %bb.0:15; CHECK-NEXT:    retq16  %y = fadd nsz <4 x float> %x, zeroinitializer17  ret <4 x float> %y18}19 20define <4 x float> @fadd_zero_4f32_undef(<4 x float> %x) {21; CHECK-LABEL: fadd_zero_4f32_undef:22; CHECK:       # %bb.0:23; CHECK-NEXT:    retq24  %y = fadd nsz <4 x float> %x, <float 0.0, float undef, float 0.0, float undef>25  ret <4 x float> %y26}27 28; CHECK: float 329define float @fadd_2const_f32(float %x) #0 {30; CHECK-LABEL: fadd_2const_f32:31; CHECK:       # %bb.0:32; CHECK-NEXT:    addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm033; CHECK-NEXT:    retq34  %y = fadd reassoc nsz float %x, 1.035  %z = fadd reassoc nsz float %y, 2.036  ret float %z37}38 39; CHECK: float 540; CHECK: float 541; CHECK: float 542; CHECK: float 543define <4 x float> @fadd_2const_4f32(<4 x float> %x) #0 {44; CHECK-LABEL: fadd_2const_4f32:45; CHECK:       # %bb.0:46; CHECK-NEXT:    addps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm047; CHECK-NEXT:    retq48  %y = fadd reassoc nsz <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>49  %z = fadd reassoc nsz <4 x float> %y, <float 4.0, float 3.0, float 2.0, float 1.0>50  ret <4 x float> %z51}52 53; CHECK: float 354define float @fadd_x_fmul_x_c_f32(float %x) #0 {55; CHECK-LABEL: fadd_x_fmul_x_c_f32:56; CHECK:       # %bb.0:57; CHECK-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm058; CHECK-NEXT:    retq59  %y = fmul reassoc nsz float %x, 2.060  %z = fadd reassoc nsz float %x, %y61  ret float %z62}63 64; CHECK: float 265; CHECK: float 366; CHECK: float 467; CHECK: float 568define <4 x float> @fadd_x_fmul_x_c_4f32(<4 x float> %x) #0 {69; CHECK-LABEL: fadd_x_fmul_x_c_4f32:70; CHECK:       # %bb.0:71; CHECK-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm072; CHECK-NEXT:    retq73  %y = fmul reassoc nsz <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>74  %z = fadd reassoc nsz <4 x float> %x, %y75  ret <4 x float> %z76}77 78; CHECK: float 379define float @fadd_fmul_x_c_x_f32(float %x) #0 {80; CHECK-LABEL: fadd_fmul_x_c_x_f32:81; CHECK:       # %bb.0:82; CHECK-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm083; CHECK-NEXT:    retq84  %y = fmul reassoc nsz float %x, 2.085  %z = fadd reassoc nsz float %y, %x86  ret float %z87}88 89; CHECK: float 290; CHECK: float 391; CHECK: float 492; CHECK: float 593define <4 x float> @fadd_fmul_x_c_x_4f32(<4 x float> %x) #0 {94; CHECK-LABEL: fadd_fmul_x_c_x_4f32:95; CHECK:       # %bb.0:96; CHECK-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm097; CHECK-NEXT:    retq98  %y = fmul reassoc nsz <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>99  %z = fadd reassoc nsz <4 x float> %y, %x100  ret <4 x float> %z101}102 103; CHECK: float 4104define float @fadd_fadd_x_x_fmul_x_c_f32(float %x) #0 {105; CHECK-LABEL: fadd_fadd_x_x_fmul_x_c_f32:106; CHECK:       # %bb.0:107; CHECK-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0108; CHECK-NEXT:    retq109  %y = fadd reassoc nsz float %x, %x110  %z = fmul reassoc nsz float %x, 2.0111  %w = fadd reassoc nsz float %y, %z112  ret float %w113}114 115; CHECK: float 3116; CHECK: float 4117; CHECK: float 5118; CHECK: float 6119define <4 x float> @fadd_fadd_x_x_fmul_x_c_4f32(<4 x float> %x) #0 {120; CHECK-LABEL: fadd_fadd_x_x_fmul_x_c_4f32:121; CHECK:       # %bb.0:122; CHECK-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0123; CHECK-NEXT:    retq124  %y = fadd reassoc nsz <4 x float> %x, %x125  %z = fmul reassoc nsz <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>126  %w = fadd reassoc nsz <4 x float> %y, %z127  ret <4 x float> %w128}129 130; CHECK: float 4131define float @fadd_fmul_x_c_fadd_x_x_f32(float %x) #0 {132; CHECK-LABEL: fadd_fmul_x_c_fadd_x_x_f32:133; CHECK:       # %bb.0:134; CHECK-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0135; CHECK-NEXT:    retq136  %y = fadd reassoc nsz float %x, %x137  %z = fmul reassoc nsz float %x, 2.0138  %w = fadd reassoc nsz float %z, %y139  ret float %w140}141 142; CHECK: float 3143; CHECK: float 4144; CHECK: float 5145; CHECK: float 6146define <4 x float> @fadd_fmul_x_c_fadd_x_x_4f32(<4 x float> %x) #0 {147; CHECK-LABEL: fadd_fmul_x_c_fadd_x_x_4f32:148; CHECK:       # %bb.0:149; CHECK-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0150; CHECK-NEXT:    retq151  %y = fadd reassoc nsz <4 x float> %x, %x152  %z = fmul reassoc nsz <4 x float> %x, <float 1.0, float 2.0, float 3.0, float 4.0>153  %w = fadd reassoc nsz <4 x float> %z, %y154  ret <4 x float> %w155}156 157; CHECK: float 3158define float @fadd_x_fadd_x_x_f32(float %x) #0 {159; CHECK-LABEL: fadd_x_fadd_x_x_f32:160; CHECK:       # %bb.0:161; CHECK-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0162; CHECK-NEXT:    retq163  %y = fadd reassoc nsz float %x, %x164  %z = fadd reassoc nsz float %x, %y165  ret float %z166}167 168; CHECK: float 3169; CHECK: float 3170; CHECK: float 3171; CHECK: float 3172define <4 x float> @fadd_x_fadd_x_x_4f32(<4 x float> %x) #0 {173; CHECK-LABEL: fadd_x_fadd_x_x_4f32:174; CHECK:       # %bb.0:175; CHECK-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0176; CHECK-NEXT:    retq177  %y = fadd reassoc nsz <4 x float> %x, %x178  %z = fadd reassoc nsz <4 x float> %x, %y179  ret <4 x float> %z180}181 182; CHECK: float 3183define float @fadd_fadd_x_x_x_f32(float %x) #0 {184; CHECK-LABEL: fadd_fadd_x_x_x_f32:185; CHECK:       # %bb.0:186; CHECK-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0187; CHECK-NEXT:    retq188  %y = fadd reassoc nsz float %x, %x189  %z = fadd reassoc nsz float %y, %x190  ret float %z191}192 193; CHECK: float 3194; CHECK: float 3195; CHECK: float 3196; CHECK: float 3197define <4 x float> @fadd_fadd_x_x_x_4f32(<4 x float> %x) #0 {198; CHECK-LABEL: fadd_fadd_x_x_x_4f32:199; CHECK:       # %bb.0:200; CHECK-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0201; CHECK-NEXT:    retq202  %y = fadd reassoc nsz <4 x float> %x, %x203  %z = fadd reassoc nsz <4 x float> %y, %x204  ret <4 x float> %z205}206 207; CHECK: float 4208define float @fadd_fadd_x_x_fadd_x_x_f32(float %x) #0 {209; CHECK-LABEL: fadd_fadd_x_x_fadd_x_x_f32:210; CHECK:       # %bb.0:211; CHECK-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0212; CHECK-NEXT:    retq213  %y = fadd reassoc nsz float %x, %x214  %z = fadd reassoc nsz float %y, %y215  ret float %z216}217 218; CHECK: float 4219; CHECK: float 4220; CHECK: float 4221; CHECK: float 4222define <4 x float> @fadd_fadd_x_x_fadd_x_x_4f32(<4 x float> %x) #0 {223; CHECK-LABEL: fadd_fadd_x_x_fadd_x_x_4f32:224; CHECK:       # %bb.0:225; CHECK-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0226; CHECK-NEXT:    retq227  %y = fadd reassoc nsz <4 x float> %x, %x228  %z = fadd reassoc nsz <4 x float> %y, %y229  ret <4 x float> %z230}231 232; ((x + 42.0) + 17.0) + (x + 42.0) --> (x + 59.0) + (x + 17.0)233; It's still 3 adds, but the first 2 are independent.234; More reassocation could get this to 2 adds or 1 FMA (that's done in IR, but not in the DAG).235 236define float @fadd_const_multiuse_attr(float %x) #0 {237; CHECK-LABEL: fadd_const_multiuse_attr:238; CHECK:       # %bb.0:239; CHECK-NEXT:    movss {{.*#+}} xmm1 = [4.2E+1,0.0E+0,0.0E+0,0.0E+0]240; CHECK-NEXT:    addss %xmm0, %xmm1241; CHECK-NEXT:    addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0242; CHECK-NEXT:    addss %xmm1, %xmm0243; CHECK-NEXT:    retq244  %a1 = fadd reassoc nsz float %x, 42.0245  %a2 = fadd reassoc nsz float %a1, 17.0246  %a3 = fadd reassoc nsz float %a1, %a2247  ret float %a3248}249 250; PR32939 - https://bugs.llvm.org/show_bug.cgi?id=32939251 252define double @fmul2_negated(double %a, double %b, double %c) {253; CHECK-LABEL: fmul2_negated:254; CHECK:       # %bb.0:255; CHECK-NEXT:    addsd %xmm1, %xmm1256; CHECK-NEXT:    mulsd %xmm2, %xmm1257; CHECK-NEXT:    subsd %xmm1, %xmm0258; CHECK-NEXT:    retq259  %mul = fmul double %b, 2.0260  %mul1 = fmul double %mul, %c261  %sub = fsub double %a, %mul1262  ret double %sub263}264 265define <2 x double> @fmul2_negated_vec(<2 x double> %a, <2 x double> %b, <2 x double> %c) {266; CHECK-LABEL: fmul2_negated_vec:267; CHECK:       # %bb.0:268; CHECK-NEXT:    addpd %xmm1, %xmm1269; CHECK-NEXT:    mulpd %xmm2, %xmm1270; CHECK-NEXT:    subpd %xmm1, %xmm0271; CHECK-NEXT:    retq272  %mul = fmul <2 x double> %b, <double 2.0, double 2.0>273  %mul1 = fmul <2 x double> %mul, %c274  %sub = fsub <2 x double> %a, %mul1275  ret <2 x double> %sub276}277 278attributes #0 = { "less-precise-fpmad"="true" "no-infs-fp-math"="true" "no-nans-fp-math"="true" }279