| ; RUN: opt < %s -passes=instcombine -mtriple=x86_64-apple-macosx -S | FileCheck %s |
| target triple = "x86_64-apple-macosx" |
| |
| define double @test1(double %a, double %b) nounwind { |
| %wa = fpext double %a to x86_fp80 |
| %wb = fpext double %b to x86_fp80 |
| %wr = fadd x86_fp80 %wa, %wb |
| %r = fptrunc x86_fp80 %wr to double |
| ret double %r |
| ; CHECK: test1 |
| ; CHECK: fadd x86_fp80 |
| ; CHECK: ret |
| } |
| |
| define double @test2(double %a, double %b) nounwind { |
| %wa = fpext double %a to x86_fp80 |
| %wb = fpext double %b to x86_fp80 |
| %wr = fsub x86_fp80 %wa, %wb |
| %r = fptrunc x86_fp80 %wr to double |
| ret double %r |
| ; CHECK: test2 |
| ; CHECK: fsub x86_fp80 |
| ; CHECK: ret |
| } |
| |
| define double @test3(double %a, double %b) nounwind { |
| %wa = fpext double %a to x86_fp80 |
| %wb = fpext double %b to x86_fp80 |
| %wr = fmul x86_fp80 %wa, %wb |
| %r = fptrunc x86_fp80 %wr to double |
| ret double %r |
| ; CHECK: test3 |
| ; CHECK: fmul x86_fp80 |
| ; CHECK: ret |
| } |
| |
| define double @test4(double %a, half %b) nounwind { |
| %wa = fpext double %a to x86_fp80 |
| %wb = fpext half %b to x86_fp80 |
| %wr = fmul x86_fp80 %wa, %wb |
| %r = fptrunc x86_fp80 %wr to double |
| ret double %r |
| ; CHECK: test4 |
| ; CHECK: fmul double |
| ; CHECK: ret |
| } |
| |
| define double @test5(double %a, double %b) nounwind { |
| %wa = fpext double %a to x86_fp80 |
| %wb = fpext double %b to x86_fp80 |
| %wr = fdiv x86_fp80 %wa, %wb |
| %r = fptrunc x86_fp80 %wr to double |
| ret double %r |
| ; CHECK: test5 |
| ; CHECK: fdiv x86_fp80 |
| ; CHECK: ret |
| } |