70 lines · c
1// RUN: %clang_cc1 -triple x86_64-pc-linux -ast-print %s -o - | FileCheck %s2 3float func_1(float x, float y) {4#pragma STDC FENV_ACCESS ON5 if (x != 0) {6 return y;7 }8 return x + y;9}10 11// CHECK-LABEL: float func_1(float x, float y) {12// CHECK-NEXT: #pragma STDC FENV_ACCESS ON13// CHECK-NEXT: if (x != 0) {14// CHECK-NEXT: return y;15// CHECK-NEXT: }16// CHECK-NEXT: return x + y;17// CHECK-NEXT: }18 19float func_2(float x, float y) {20#pragma STDC FENV_ACCESS ON21 if (x != 0) {22 #pragma STDC FENV_ACCESS OFF23 return y;24 }25 return x + y;26}27 28// CHECK-LABEL: float func_2(float x, float y) {29// CHECK-NEXT: #pragma STDC FENV_ACCESS ON30// CHECK-NEXT: if (x != 0) {31// CHECK-NEXT: #pragma STDC FENV_ACCESS OFF32// CHECK-NEXT: return y;33// CHECK-NEXT: }34// CHECK-NEXT: return x + y;35// CHECK-NEXT: }36 37float func_3(float x, float y) {38#pragma STDC FENV_ROUND FE_DOWNWARD39 return x + y;40}41 42// CHECK-LABEL: float func_3(float x, float y) {43// CHECK-NEXT: #pragma STDC FENV_ROUND FE_DOWNWARD44// CHECK-NEXT: return x + y;45// CHECK-NEXT: }46 47float func_4(float x, float y, float z) {48#pragma STDC FENV_ACCESS ON49#pragma clang fp exceptions(maytrap)50#pragma STDC FENV_ROUND FE_UPWARD51 if (z != 0) {52 #pragma STDC FENV_ACCESS OFF53 #pragma STDC FENV_ROUND FE_TOWARDZERO54 return z + x;55 }56 return x + y;57}58 59// CHECK-LABEL: float func_4(float x, float y, float z) {60// CHECK-NEXT: #pragma STDC FENV_ACCESS ON61// CHECK-NEXT: #pragma clang fp exceptions(maytrap)62// CHECK-NEXT: #pragma STDC FENV_ROUND FE_UPWARD63// CHECK-NEXT: if (z != 0) {64// CHECK-NEXT: #pragma STDC FENV_ACCESS OFF65// CHECK-NEXT: #pragma STDC FENV_ROUND FE_TOWARDZERO66// CHECK-NEXT: return z + x;67// CHECK-NEXT: }68// CHECK-NEXT: return x + y;69// CHECK-NEXT: }70