1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple x86_64 < %s | FileCheck %s 3 4; To ensure unused floating point constant is correctly removed 5define float @test(float %src, ptr %p) { 6; CHECK-LABEL: test: 7; CHECK: # %bb.0: # %entry 8; CHECK-NEXT: movq $0, (%rdi) 9; CHECK-NEXT: xorps %xmm0, %xmm0 10; CHECK-NEXT: retq 11entry: 12 %a1 = getelementptr inbounds float, ptr %p, i32 1 13 store float 0.000000e+00, ptr %p 14 store float 0.000000e+00, ptr %a1 15 %zero = load float, ptr %p 16 %fmul1 = fmul fast float %zero, %src 17 %fadd1 = fadd fast float %fmul1, %zero 18 %fmul2 = fmul fast float %fadd1, 2.000000e+00 19 %fmul3 = fmul fast float %fmul2, %fmul2 20 %fmul4 = fmul fast float %fmul2, 2.000000e+00 21 %fadd2 = fadd fast float %fmul4, -3.000000e+00 22 %fmul5 = fmul fast float %fadd2, %fmul2 23 %fadd3 = fadd fast float %fmul2, %src 24 %fadd4 = fadd fast float %fadd3, %fmul5 25 %fmul6 = fmul fast float %fmul3, %fadd4 26 ret float %fmul6 27} 28 29; To ensure negated result will not be removed when NegX=NegY and 30; NegX is needed 31define float @test2(float %x, float %y) { 32; CHECK-LABEL: test2: 33; CHECK: # %bb.0: 34; CHECK-NEXT: movaps %xmm1, %xmm0 35; CHECK-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 36; CHECK-NEXT: retq 37 %add = fadd fast float %x, 750.0 38 %sub = fsub fast float %x, %add 39 %mul = fmul fast float %sub, %sub 40 %mul2 = fmul fast float %mul, %sub 41 %add2 = fadd fast float %mul2, 1.0 42 %add3 = fadd fast float %mul2, %add2 43 %mul3 = fmul fast float %y, %add3 44 ret float %mul3 45} 46