| ; RUN: opt < %s -instcombine -S | FileCheck %s |
| |
| ; testing-case "float fold(float a) { return 1.2f * a * 2.3f; }" |
| ; 1.2f and 2.3f is supposed to be fold. |
| define float @fold(float %a) { |
| fold: |
| %mul = fmul fast float %a, 0x3FF3333340000000 |
| %mul1 = fmul fast float %mul, 0x4002666660000000 |
| ret float %mul1 |
| ; CHECK: fold |
| ; CHECK: fmul float %a, 0x4006147AE0000000 |
| } |
| |
| ; Same testing-case as the one used in fold() except that the operators have |
| ; fixed FP mode. |
| define float @notfold(float %a) { |
| notfold: |
| ; CHECK: notfold |
| ; CHECK: %mul = fmul fast float %a, 0x3FF3333340000000 |
| %mul = fmul fast float %a, 0x3FF3333340000000 |
| %mul1 = fmul float %mul, 0x4002666660000000 |
| ret float %mul1 |
| } |
| |
| define float @fold2(float %a) { |
| notfold2: |
| ; CHECK: fold2 |
| ; CHECK: fmul float %a, 0x4006147AE0000000 |
| %mul = fmul float %a, 0x3FF3333340000000 |
| %mul1 = fmul fast float %mul, 0x4002666660000000 |
| ret float %mul1 |
| } |