// RUN: %clang_cc1 -fexperimental-strict-floating-point -ffp-exception-behavior=strict -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck %s #pragma STDC FENV_ACCESS ON float func_01(float x, float y) { return x + y; } // CHECK-LABEL: @func_01 // CHECK: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict") float func_02(float x, float y) { #pragma float_control(except, off) #pragma STDC FENV_ACCESS OFF return x + y; } // CHECK-LABEL: @func_02 // CHECK: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.ignore") float func_03(float x, float y) { return x + y; } // CHECK-LABEL: @func_03 // CHECK: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict") #pragma STDC FENV_ACCESS OFF float func_04(float x, float y) { #pragma float_control(except, off) return x + y; } // CHECK-LABEL: @func_04 // CHECK: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.ignore") float func_05(float x, float y) { #pragma STDC FENV_ACCESS ON return x + y; } // CHECK-LABEL: @func_05 // CHECK: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict") float func_06(float x, float y) { #pragma float_control(except, off) return x + y; } // CHECK-LABEL: @func_06 // CHECK: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.ignore") float func_07(float x, float y) { x -= y; if (x) { #pragma STDC FENV_ACCESS ON y *= 2; } return y + 4; } // CHECK-LABEL: @func_07 // CHECK: call float @llvm.experimental.constrained.fsub.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict") // CHECK: call float @llvm.experimental.constrained.fmul.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict") // CHECK: call float @llvm.experimental.constrained.fadd.f32(float {{.*}}, float {{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict")