| ; RUN: llc -mtriple=hexagon -O2 < %s | FileCheck %s | |
| ; Test coverage for HexagonConstPropagation: exercise floating-point | |
| ; constant propagation paths by using FP comparisons and operations | |
| ; with known constants. | |
| ; CHECK-LABEL: test_fp_const_fold: | |
| ; CHECK: jumpr r31 | |
| define i32 @test_fp_const_fold() { | |
| entry: | |
| %cmp = fcmp ogt float 2.0, 1.0 | |
| %val = select i1 %cmp, i32 42, i32 0 | |
| ret i32 %val | |
| } | |
| ; CHECK-LABEL: test_fp_zero_cmp: | |
| ; CHECK: jumpr r31 | |
| define i32 @test_fp_zero_cmp() { | |
| entry: | |
| %cmp = fcmp oeq float 0.0, 0.0 | |
| %val = select i1 %cmp, i32 1, i32 0 | |
| ret i32 %val | |
| } | |
| ; CHECK-LABEL: test_fp_nan_cmp: | |
| ; CHECK: jumpr r31 | |
| define i32 @test_fp_nan_cmp() { | |
| entry: | |
| %nan = fdiv float 0.0, 0.0 | |
| %cmp = fcmp uno float %nan, 1.0 | |
| %val = select i1 %cmp, i32 1, i32 0 | |
| ret i32 %val | |
| } | |
| ; Exercise the negative FP constant path. | |
| ; CHECK-LABEL: test_fp_neg: | |
| ; CHECK: jumpr r31 | |
| define i32 @test_fp_neg(float %x) { | |
| entry: | |
| %neg = fneg float %x | |
| %cmp = fcmp olt float %neg, 0.0 | |
| %val = select i1 %cmp, i32 1, i32 0 | |
| ret i32 %val | |
| } | |