80 lines · cpp
1// RUN: %clang_cc1 -fexperimental-strict-floating-point -DEXCEPT=1 \2// RUN: -fcxx-exceptions -triple x86_64-linux-gnu -emit-llvm -o - %s \3// RUN: | FileCheck -check-prefix=CHECK-SRC %s4 5// RUN: %clang_cc1 -fexperimental-strict-floating-point \6// RUN: -triple x86_64-linux-gnu -emit-llvm -o - %s -ffp-eval-method=source \7// RUN: | FileCheck -check-prefix=CHECK-SRC %s8 9// RUN: %clang_cc1 -fexperimental-strict-floating-point \10// RUN: -triple x86_64-linux-gnu -emit-llvm -o - %s -ffp-eval-method=double \11// RUN: | FileCheck -check-prefixes=CHECK-DBL %s12 13// RUN: %clang_cc1 -fexperimental-strict-floating-point \14// RUN: -triple x86_64-linux-gnu -emit-llvm -o - %s -ffp-eval-method=extended \15// RUN: | FileCheck -check-prefixes=CHECK-EXT-FLT %s16 17// RUN: %clang_cc1 -triple powerpc-unknown-aix -emit-llvm -o - %s \18// RUN: | FileCheck %s -check-prefix=CHECK-DBL-PPC19 20// RUN: %clang_cc1 -fexperimental-strict-floating-point -triple i386-linux-gnu \21// RUN: -emit-llvm -o - %s -ffp-eval-method=extended -mlong-double-80 \22// RUN: | FileCheck %s -check-prefix=CHECK-EXT-FLT23 24int getFEM() {25 // LABEL: define {{.*}}getFEM{{.*}}26 return __FLT_EVAL_METHOD__;27 // CHECK-SRC: ret {{.*}} 028 // CHECK-DBL: ret {{.*}} 129 // CHECK-DBL-PPC: ret {{.*}} 130 // CHECK-EXT-FLT: ret {{.*}} 231}32 33float func() {34 // LABEL: define {{.*}}@_Z4func{{.*}}35 float X = 100.0f;36 float Y = -45.3f;37 float Z = 393.78f;38 float temp;39#if __FLT_EVAL_METHOD__ == 040 temp = X + Y + Z;41#elif __FLT_EVAL_METHOD__ == 142 temp = X * Y * Z;43#elif __FLT_EVAL_METHOD__ == 244 temp = X * Y - Z;45#endif46 // CHECK-SRC: load float, ptr47 // CHECK-SRC: load float, ptr48 // CHECK-SRC: fadd float49 // CHECK-SRC: load float, ptr50 // CHECK-SRC: fadd float51 52 // CHECK-DBL: load float, ptr53 // CHECK-DBL: fpext float54 // CHECK-DBL: load float, ptr55 // CHECK-DBL: fpext float56 // CHECK-DBL: fmul double57 // CHECK-DBL: load float, ptr58 // CHECK-DBL: fpext float59 // CHECK-DBL: fmul double60 // CHECK-DBL: fptrunc double61 62 // CHECK-EXT-FLT: load float, ptr63 // CHECK-EXT-FLT: fpext float64 // CHECK-EXT-FLT: load float, ptr65 // CHECK-EXT-FLT: fpext float66 // CHECK-EXT-FLT: fmul x86_fp8067 // CHECK-EXT-FLT: load float, ptr68 // CHECK-EXT-FLT: fpext float69 // CHECK-EXT-FLT: fsub x86_fp8070 // CHECK-EXT-FLT: fptrunc x86_fp8071 72 // CHECK-DBL-PPC: load float, ptr73 // CHECK-DBL-PPC: load float, ptr74 // CHECK-DBL-PPC: fmul float75 // CHECK-DBL-PPC: load float, ptr76 // CHECK-DBL-PPC: fmul float77 78 return temp;79}80