Home | History | Annotate | Download | only in X86
      1 ; RUN: llc -march=x86-64 -mattr=+avx,-fma4 -mtriple=x86_64-apple-darwin -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