1 ; RUN: llc -march=x86-64 -mcpu=corei7-avx -enable-unsafe-fp-math < %s | FileCheck %s 2 3 ; CHECK-LABEL: test1 4 define 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 15 define 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 27 define 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 39 define 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 51 define 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 63 define 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 75 define 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 87 define 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 98 define 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 109 define 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 119 define 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