1*39db5e1eSNikita Popov // RUN: %clang_cc1 -fexperimental-strict-floating-point -DEXCEPT=1 \
21592d88aSZahira Ammarguellat // RUN: -fcxx-exceptions -triple x86_64-linux-gnu -emit-llvm -o - %s \
31592d88aSZahira Ammarguellat // RUN: | FileCheck -check-prefix=CHECK-SRC %s
41592d88aSZahira Ammarguellat
5*39db5e1eSNikita Popov // RUN: %clang_cc1 -fexperimental-strict-floating-point \
61592d88aSZahira Ammarguellat // RUN: -triple x86_64-linux-gnu -emit-llvm -o - %s -ffp-eval-method=source \
71592d88aSZahira Ammarguellat // RUN: | FileCheck -check-prefix=CHECK-SRC %s
81592d88aSZahira Ammarguellat
9*39db5e1eSNikita Popov // RUN: %clang_cc1 -fexperimental-strict-floating-point \
101592d88aSZahira Ammarguellat // RUN: -triple x86_64-linux-gnu -emit-llvm -o - %s -ffp-eval-method=double \
111592d88aSZahira Ammarguellat // RUN: | FileCheck -check-prefixes=CHECK-DBL %s
121592d88aSZahira Ammarguellat
13*39db5e1eSNikita Popov // RUN: %clang_cc1 -fexperimental-strict-floating-point \
141592d88aSZahira Ammarguellat // RUN: -triple x86_64-linux-gnu -emit-llvm -o - %s -ffp-eval-method=extended \
151592d88aSZahira Ammarguellat // RUN: | FileCheck -check-prefixes=CHECK-EXT-FLT %s
161592d88aSZahira Ammarguellat
17*39db5e1eSNikita Popov // RUN: %clang_cc1 -triple powerpc-unknown-aix -emit-llvm -o - %s \
181592d88aSZahira Ammarguellat // RUN: | FileCheck %s -check-prefix=CHECK-DBL-PPC
191592d88aSZahira Ammarguellat
20*39db5e1eSNikita Popov // RUN: %clang_cc1 -fexperimental-strict-floating-point -triple i386-linux-gnu \
211592d88aSZahira Ammarguellat // RUN: -emit-llvm -o - %s -ffp-eval-method=extended -mlong-double-80 \
221592d88aSZahira Ammarguellat // RUN: | FileCheck %s -check-prefix=CHECK-EXT-FLT
231592d88aSZahira Ammarguellat
getFEM()241592d88aSZahira Ammarguellat int getFEM() {
251592d88aSZahira Ammarguellat // LABEL: define {{.*}}getFEM{{.*}}
261592d88aSZahira Ammarguellat return __FLT_EVAL_METHOD__;
271592d88aSZahira Ammarguellat // CHECK-SRC: ret {{.*}} 0
281592d88aSZahira Ammarguellat // CHECK-DBL: ret {{.*}} 1
291592d88aSZahira Ammarguellat // CHECK-DBL-PPC: ret {{.*}} 1
301592d88aSZahira Ammarguellat // CHECK-EXT-FLT: ret {{.*}} 2
311592d88aSZahira Ammarguellat }
321592d88aSZahira Ammarguellat
func()331592d88aSZahira Ammarguellat float func() {
341592d88aSZahira Ammarguellat // LABEL: define {{.*}}@_Z4func{{.*}}
351592d88aSZahira Ammarguellat float X = 100.0f;
361592d88aSZahira Ammarguellat float Y = -45.3f;
371592d88aSZahira Ammarguellat float Z = 393.78f;
381592d88aSZahira Ammarguellat float temp;
391592d88aSZahira Ammarguellat #if __FLT_EVAL_METHOD__ == 0
401592d88aSZahira Ammarguellat temp = X + Y + Z;
411592d88aSZahira Ammarguellat #elif __FLT_EVAL_METHOD__ == 1
421592d88aSZahira Ammarguellat temp = X * Y * Z;
431592d88aSZahira Ammarguellat #elif __FLT_EVAL_METHOD__ == 2
441592d88aSZahira Ammarguellat temp = X * Y - Z;
451592d88aSZahira Ammarguellat #endif
46*39db5e1eSNikita Popov // CHECK-SRC: load float, ptr
47*39db5e1eSNikita Popov // CHECK-SRC: load float, ptr
481592d88aSZahira Ammarguellat // CHECK-SRC: fadd float
49*39db5e1eSNikita Popov // CHECK-SRC: load float, ptr
501592d88aSZahira Ammarguellat // CHECK-SRC: fadd float
511592d88aSZahira Ammarguellat
52*39db5e1eSNikita Popov // CHECK-DBL: load float, ptr
531592d88aSZahira Ammarguellat // CHECK-DBL: fpext float
54*39db5e1eSNikita Popov // CHECK-DBL: load float, ptr
551592d88aSZahira Ammarguellat // CHECK-DBL: fpext float
561592d88aSZahira Ammarguellat // CHECK-DBL: fmul double
57*39db5e1eSNikita Popov // CHECK-DBL: load float, ptr
581592d88aSZahira Ammarguellat // CHECK-DBL: fpext float
591592d88aSZahira Ammarguellat // CHECK-DBL: fmul double
601592d88aSZahira Ammarguellat // CHECK-DBL: fptrunc double
611592d88aSZahira Ammarguellat
62*39db5e1eSNikita Popov // CHECK-EXT-FLT: load float, ptr
631592d88aSZahira Ammarguellat // CHECK-EXT-FLT: fpext float
64*39db5e1eSNikita Popov // CHECK-EXT-FLT: load float, ptr
651592d88aSZahira Ammarguellat // CHECK-EXT-FLT: fpext float
661592d88aSZahira Ammarguellat // CHECK-EXT-FLT: fmul x86_fp80
67*39db5e1eSNikita Popov // CHECK-EXT-FLT: load float, ptr
681592d88aSZahira Ammarguellat // CHECK-EXT-FLT: fpext float
691592d88aSZahira Ammarguellat // CHECK-EXT-FLT: fsub x86_fp80
701592d88aSZahira Ammarguellat // CHECK-EXT-FLT: fptrunc x86_fp80
711592d88aSZahira Ammarguellat
72*39db5e1eSNikita Popov // CHECK-DBL-PPC: load float, ptr
73*39db5e1eSNikita Popov // CHECK-DBL-PPC: load float, ptr
741592d88aSZahira Ammarguellat // CHECK-DBL-PPC: fmul float
75*39db5e1eSNikita Popov // CHECK-DBL-PPC: load float, ptr
761592d88aSZahira Ammarguellat // CHECK-DBL-PPC: fmul float
771592d88aSZahira Ammarguellat
781592d88aSZahira Ammarguellat return temp;
791592d88aSZahira Ammarguellat }
80