1; RUN: llc -march=x86-64 -mcpu=corei7-avx -enable-unsafe-fp-math < %s | FileCheck %s 2 3; CHECK-LABEL: test1 4define float @test1(float %a) { 5; CHECK-NOT: addss 6; CHECK: mulss 7; CHECK-NOT: addss 8; CHECK: ret 9 %t1 = fadd float %a, %a 10 %r = fadd float %t1, %t1 11 ret float %r 12} 13 14; CHECK-LABEL: test2 15define float @test2(float %a) { 16; CHECK-NOT: addss 17; CHECK: mulss 18; CHECK-NOT: addss 19; CHECK: ret 20 %t1 = fmul float 4.0, %a 21 %t2 = fadd float %a, %a 22 %r = fadd float %t1, %t2 23 ret float %r 24} 25 26; CHECK-LABEL: test3 27define float @test3(float %a) { 28; CHECK-NOT: addss 29; CHECK: mulss 30; CHECK-NOT: addss 31; CHECK: ret 32 %t1 = fmul float %a, 4.0 33 %t2 = fadd float %a, %a 34 %r = fadd float %t1, %t2 35 ret float %r 36} 37 38; CHECK-LABEL: test4 39define float @test4(float %a) { 40; CHECK-NOT: addss 41; CHECK: mulss 42; CHECK-NOT: addss 43; CHECK: ret 44 %t1 = fadd float %a, %a 45 %t2 = fmul float 4.0, %a 46 %r = fadd float %t1, %t2 47 ret float %r 48} 49 50; CHECK-LABEL: test5 51define float @test5(float %a) { 52; CHECK-NOT: addss 53; CHECK: mulss 54; CHECK-NOT: addss 55; CHECK: ret 56 %t1 = fadd float %a, %a 57 %t2 = fmul float %a, 4.0 58 %r = fadd float %t1, %t2 59 ret float %r 60} 61 62; CHECK-LABEL: test6 63define float @test6(float %a) { 64; CHECK-NOT: addss 65; CHECK: xorps 66; CHECK-NOT: addss 67; CHECK: ret 68 %t1 = fmul float 2.0, %a 69 %t2 = fadd float %a, %a 70 %r = fsub float %t1, %t2 71 ret float %r 72} 73 74; CHECK-LABEL: test7 75define float @test7(float %a) { 76; CHECK-NOT: addss 77; CHECK: xorps 78; CHECK-NOT: addss 79; CHECK: ret 80 %t1 = fmul float %a, 2.0 81 %t2 = fadd float %a, %a 82 %r = fsub float %t1, %t2 83 ret float %r 84} 85 86; CHECK-LABEL: test8 87define float @test8(float %a) { 88; CHECK-NOT: fma 89; CHECK-NOT: mul 90; CHECK-NOT: add 91; CHECK: ret 92 %t1 = fmul float %a, 0.0 93 %t2 = fadd float %a, %t1 94 ret float %t2 95} 96 97; CHECK-LABEL: test9 98define float @test9(float %a) { 99; CHECK-NOT: fma 100; CHECK-NOT: mul 101; CHECK-NOT: add 102; CHECK: ret 103 %t1 = fmul float 0.0, %a 104 %t2 = fadd float %t1, %a 105 ret float %t2 106} 107 108; CHECK-LABEL: test10 109define float @test10(float %a) { 110; CHECK-NOT: add 111; CHECK: vxorps 112; CHECK: ret 113 %t1 = fsub float -0.0, %a 114 %t2 = fadd float %a, %t1 115 ret float %t2 116} 117 118; CHECK-LABEL: test11 119define float @test11(float %a) { 120; CHECK-NOT: add 121; CHECK: vxorps 122; CHECK: ret 123 %t1 = fsub float -0.0, %a 124 %t2 = fadd float %a, %t1 125 ret float %t2 126} 127