|  | ; RUN: llc %s -march=sparc -o - | FileCheck --check-prefix=CHECK --check-prefix=DEFAULT %s | 
|  | ; RUN: llc %s -march=sparc -mattr=no-fmuls -o - | FileCheck --check-prefix=CHECK --check-prefix=NO-FMULS %s | 
|  | ; RUN: llc %s -march=sparc -mattr=no-fsmuld -o - | FileCheck --check-prefix=CHECK --check-prefix=NO-FSMULD %s | 
|  | ; RUN: llc %s -march=sparc -mattr=no-fsmuld,no-fmuls -o - | FileCheck --check-prefix=CHECK --check-prefix=NO-BOTH %s | 
|  |  | 
|  | ;;; Test case ensures that the no-fsmuld and no-fmuls features disable | 
|  | ;;; the relevant instruction, and alternative sequences get emitted | 
|  | ;;; instead. | 
|  |  | 
|  | ; CHECK-LABEL: test_float_mul: | 
|  | ; DEFAULT:     fmuls | 
|  | ; NO-FSMULD:   fmuls | 
|  | ; NO-FMULS:    fsmuld | 
|  | ; NO-FMULS:    fdtos | 
|  | ; NO-BOTH:     fstod | 
|  | ; NO-BOTH:     fstod | 
|  | ; NO-BOTH:     fmuld | 
|  | ; NO-BOTH:     fdtos | 
|  | define float @test_float_mul(float %a, float %b) { | 
|  | entry: | 
|  | %mul = fmul float %a, %b | 
|  |  | 
|  | ret float %mul | 
|  | } | 
|  |  | 
|  | ; CHECK-LABEL: test_float_mul_double: | 
|  | ; DEFAULT:     fsmuld | 
|  | ; NO-FSMULD:   fstod | 
|  | ; NO-FSMULD:   fstod | 
|  | ; NO-FSMULD:   fmuld | 
|  | define double @test_float_mul_double(float %a, float %b) { | 
|  | entry: | 
|  | %a_double = fpext float %a to double | 
|  | %b_double = fpext float %b to double | 
|  | %mul = fmul double %a_double, %b_double | 
|  |  | 
|  | ret double %mul | 
|  | } |