diff --git a/MicroBenchmarks/ImageProcessing/BilateralFiltering/CMakeLists.txt b/MicroBenchmarks/ImageProcessing/BilateralFiltering/CMakeLists.txt
index cc1de53..fd0fafa 100644
--- a/MicroBenchmarks/ImageProcessing/BilateralFiltering/CMakeLists.txt
+++ b/MicroBenchmarks/ImageProcessing/BilateralFiltering/CMakeLists.txt
@@ -2,10 +2,6 @@
 list(APPEND CPPFLAGS -I ${CMAKE_SOURCE_DIR}/${IMAGEPROC_UTILS})
 list(APPEND LDFLAGS -lm)
 
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_test_verify_hash_program_output(bilateralFilterOutput.txt)
 llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}
   ${FPCMP} bilateralFilter.reference_output bilateralFilterOutput.txt
diff --git a/MicroBenchmarks/ImageProcessing/Blur/CMakeLists.txt b/MicroBenchmarks/ImageProcessing/Blur/CMakeLists.txt
index d2d0e7e..291d240 100644
--- a/MicroBenchmarks/ImageProcessing/Blur/CMakeLists.txt
+++ b/MicroBenchmarks/ImageProcessing/Blur/CMakeLists.txt
@@ -3,10 +3,6 @@
 list(APPEND CPPFLAGS -I ${CMAKE_SOURCE_DIR}/${IMAGEPROC_UTILS})
 list(APPEND LDFLAGS -lm)
 
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_test_verify_hash_program_output(boxBlurOutput.txt)
 llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}
   ${FPCMP} boxBlur.reference_output boxBlurOutput.txt
diff --git a/MultiSource/Applications/oggenc/CMakeLists.txt b/MultiSource/Applications/oggenc/CMakeLists.txt
index 047d9a4..e40bd55 100644
--- a/MultiSource/Applications/oggenc/CMakeLists.txt
+++ b/MultiSource/Applications/oggenc/CMakeLists.txt
@@ -1,8 +1,4 @@
 list(APPEND CFLAGS -fno-strict-aliasing)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 list(APPEND LDFLAGS -lm)
 set(RUN_OPTIONS -Q -s 901820 - < tune)
 llvm_multisource(oggenc)
diff --git a/MultiSource/Benchmarks/DOE-ProxyApps-C++/CLAMR/CMakeLists.txt b/MultiSource/Benchmarks/DOE-ProxyApps-C++/CLAMR/CMakeLists.txt
index e8f00cd..1058fd4 100644
--- a/MultiSource/Benchmarks/DOE-ProxyApps-C++/CLAMR/CMakeLists.txt
+++ b/MultiSource/Benchmarks/DOE-ProxyApps-C++/CLAMR/CMakeLists.txt
@@ -1,6 +1,2 @@
 set(RUN_OPTIONS -n 64 -t 1000)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_multisource(CLAMR)
diff --git a/MultiSource/Benchmarks/DOE-ProxyApps-C++/HPCCG/CMakeLists.txt b/MultiSource/Benchmarks/DOE-ProxyApps-C++/HPCCG/CMakeLists.txt
index 8202c97..e11109e 100644
--- a/MultiSource/Benchmarks/DOE-ProxyApps-C++/HPCCG/CMakeLists.txt
+++ b/MultiSource/Benchmarks/DOE-ProxyApps-C++/HPCCG/CMakeLists.txt
@@ -1,8 +1,4 @@
 list(APPEND CXXFLAGS -DREDSTORM) # -DREDSTORM for mkdir
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 list(APPEND LDFLAGS -lm)
 set(RUN_OPTIONS 50 50 50)
 llvm_multisource(HPCCG)
diff --git a/MultiSource/Benchmarks/DOE-ProxyApps-C++/miniFE/CMakeLists.txt b/MultiSource/Benchmarks/DOE-ProxyApps-C++/miniFE/CMakeLists.txt
index ad61fef..f465718 100644
--- a/MultiSource/Benchmarks/DOE-ProxyApps-C++/miniFE/CMakeLists.txt
+++ b/MultiSource/Benchmarks/DOE-ProxyApps-C++/miniFE/CMakeLists.txt
@@ -6,10 +6,6 @@
 if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
   list(APPEND CXXFLAGS -D_XOPEN_SOURCE=700 -DUseTimes)
 endif()
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 list(APPEND LDFLAGS -lm)
 set(RUN_OPTIONS -nx 64 -ny 64 -nz 64)
 llvm_multisource(miniFE)
diff --git a/MultiSource/Benchmarks/Rodinia/srad/CMakeLists.txt b/MultiSource/Benchmarks/Rodinia/srad/CMakeLists.txt
index f954fe1..a3ffcdb 100644
--- a/MultiSource/Benchmarks/Rodinia/srad/CMakeLists.txt
+++ b/MultiSource/Benchmarks/Rodinia/srad/CMakeLists.txt
@@ -1,10 +1,6 @@
 list(APPEND LDFLAGS -lm)
 set(FP_ABSTOLERANCE 0.00001)
 list(APPEND CFLAGS -I${CMAKE_CURRENT_SOURCE_DIR}/../Common)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_multisource(srad
   main.c
   sradKernel.c
diff --git a/SingleSource/Benchmarks/Linpack/CMakeLists.txt b/SingleSource/Benchmarks/Linpack/CMakeLists.txt
index 7e348d3..ac4dd8e 100644
--- a/SingleSource/Benchmarks/Linpack/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Linpack/CMakeLists.txt
@@ -1,7 +1,3 @@
 list(APPEND LDFLAGS -lm)
 set(FP_TOLERANCE 0.0001)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Misc-C++/Large/CMakeLists.txt b/SingleSource/Benchmarks/Misc-C++/Large/CMakeLists.txt
index bc5d91e..e729985 100644
--- a/SingleSource/Benchmarks/Misc-C++/Large/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Misc-C++/Large/CMakeLists.txt
@@ -1,8 +1,4 @@
 list(APPEND LDFLAGS -lm)
 set(FP_ABSTOLERANCE 0.01)
 set(HASH_PROGRAM_OUTPUT 1)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/datamining/correlation/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/datamining/correlation/CMakeLists.txt
index 66ab016..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/datamining/correlation/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/datamining/correlation/CMakeLists.txt
@@ -3,10 +3,6 @@
 if(SMALL_PROBLEM_SIZE)
   list(APPEND CFLAGS -DSMALL_DATASET)
 endif()
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/datamining/correlation/correlation.c b/SingleSource/Benchmarks/Polybench/datamining/correlation/correlation.c
index 79d4251..f70fec0 100644
--- a/SingleSource/Benchmarks/Polybench/datamining/correlation/correlation.c
+++ b/SingleSource/Benchmarks/Polybench/datamining/correlation/correlation.c
@@ -121,10 +121,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_correlation_StrictFP(int m, int n,
                             DATA_TYPE float_n,
@@ -210,7 +206,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -222,9 +217,7 @@
   DATA_TYPE float_n;
   POLYBENCH_2D_ARRAY_DECL(data,DATA_TYPE,M,N,m,n);
   POLYBENCH_2D_ARRAY_DECL(symmat,DATA_TYPE,M,M,m,m);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(symmat_StrictFP,DATA_TYPE,M,M,m,m);
-#endif
   POLYBENCH_1D_ARRAY_DECL(mean,DATA_TYPE,M,m);
   POLYBENCH_1D_ARRAY_DECL(stddev,DATA_TYPE,M,m);
 
@@ -245,11 +238,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(symmat)));
-#else
   init_array (m, n, &float_n, POLYBENCH_ARRAY(data));
   kernel_correlation (m, n, float_n,
 		      POLYBENCH_ARRAY(data),
@@ -262,14 +250,11 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(symmat_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(data);
   POLYBENCH_FREE_ARRAY(symmat);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(symmat_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(mean);
   POLYBENCH_FREE_ARRAY(stddev);
 
diff --git a/SingleSource/Benchmarks/Polybench/datamining/covariance/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/datamining/covariance/CMakeLists.txt
index 66ab016..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/datamining/covariance/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/datamining/covariance/CMakeLists.txt
@@ -3,10 +3,6 @@
 if(SMALL_PROBLEM_SIZE)
   list(APPEND CFLAGS -DSMALL_DATASET)
 endif()
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/datamining/covariance/covariance.c b/SingleSource/Benchmarks/Polybench/datamining/covariance/covariance.c
index 01c3c9d..eca3e90 100644
--- a/SingleSource/Benchmarks/Polybench/datamining/covariance/covariance.c
+++ b/SingleSource/Benchmarks/Polybench/datamining/covariance/covariance.c
@@ -93,10 +93,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_covariance_StrictFP(int m, int n,
                            DATA_TYPE float_n,
@@ -156,7 +152,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -168,9 +163,7 @@
   DATA_TYPE float_n;
   POLYBENCH_2D_ARRAY_DECL(data,DATA_TYPE,M,N,m,n);
   POLYBENCH_2D_ARRAY_DECL(symmat,DATA_TYPE,M,M,m,m);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(symmat_StrictFP,DATA_TYPE,M,M,m,m);
-#endif
   POLYBENCH_1D_ARRAY_DECL(mean,DATA_TYPE,M,m);
 
 
@@ -190,11 +183,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(symmat)));
-#else
   init_array (m, n, &float_n, POLYBENCH_ARRAY(data));
   kernel_covariance (m, n, float_n,
 		     POLYBENCH_ARRAY(data),
@@ -206,14 +194,11 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(symmat_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(data);
   POLYBENCH_FREE_ARRAY(symmat);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(symmat_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(mean);
 
   return 0;
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/2mm/2mm.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/2mm/2mm.c
index de04216..1a1f833 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/2mm/2mm.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/2mm/2mm.c
@@ -26,11 +26,8 @@
 		DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nl),
 		DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj),
 		DATA_TYPE POLYBENCH_2D(C,NL,NJ,nl,nj),
-		DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)
-#if !FMA_DISABLED
-                , DATA_TYPE POLYBENCH_2D(D_StrictFP,NI,NL,ni,nl)
-#endif
-		)
+		DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl),
+                DATA_TYPE POLYBENCH_2D(D_StrictFP,NI,NL,ni,nl))
 {
 #pragma STDC FP_CONTRACT OFF
   int i, j;
@@ -46,11 +43,9 @@
   for (i = 0; i < nl; i++)
     for (j = 0; j < nj; j++)
       C[i][j] = ((DATA_TYPE) i*(j+3)) / nl;
-#if !FMA_DISABLED
   for (i = 0; i < ni; i++)
     for (j = 0; j < nl; j++)
       D_StrictFP[i][j] = D[i][j] = ((DATA_TYPE) i*(j+2)) / nk;
-#endif
 }
 
 
@@ -106,10 +101,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_2mm_StrictFP(int ni, int nj, int nk, int nl,
                          DATA_TYPE alpha,
@@ -164,7 +155,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -182,9 +172,7 @@
   POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj);
   POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NL,NJ,nl,nj);
   POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(D_StrictFP,DATA_TYPE,NI,NL,ni,nl);
-#endif
 
   /* Initialize array(s). */
   init_array (ni, nj, nk, nl, &alpha, &beta,
@@ -210,11 +198,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D)));
-#else
   kernel_2mm_StrictFP(ni, nj, nk, nl,
                       alpha, beta,
                       POLYBENCH_ARRAY(tmp),
@@ -229,7 +212,6 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(tmp);
@@ -237,9 +219,7 @@
   POLYBENCH_FREE_ARRAY(B);
   POLYBENCH_FREE_ARRAY(C);
   POLYBENCH_FREE_ARRAY(D);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(D_StrictFP);
-#endif
 
   return 0;
 }
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/2mm/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/2mm/CMakeLists.txt
index 5cff44c..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/2mm/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/2mm/CMakeLists.txt
@@ -5,7 +5,4 @@
 endif()
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm/3mm.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm/3mm.c
index a1c796e..41b11de 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm/3mm.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm/3mm.c
@@ -105,10 +105,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_3mm_StrictFP(int ni, int nj, int nk, int nl, int nm,
                          DATA_TYPE POLYBENCH_2D(E,NI,NJ,ni,nj),
@@ -171,7 +167,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -190,9 +185,7 @@
   POLYBENCH_2D_ARRAY_DECL(C, DATA_TYPE, NJ, NM, nj, nm);
   POLYBENCH_2D_ARRAY_DECL(D, DATA_TYPE, NM, NL, nm, nl);
   POLYBENCH_2D_ARRAY_DECL(G, DATA_TYPE, NI, NL, ni, nl);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(G_StrictFP, DATA_TYPE, NI, NL, ni, nl);
-#endif
 
   /* Initialize array(s). */
   init_array (ni, nj, nk, nl, nm,
@@ -218,11 +211,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(G)));
-#else
   kernel_3mm_StrictFP(ni, nj, nk, nl, nm,
                       POLYBENCH_ARRAY(E),
                       POLYBENCH_ARRAY(A),
@@ -237,7 +225,6 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(G_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(E);
@@ -247,9 +234,7 @@
   POLYBENCH_FREE_ARRAY(C);
   POLYBENCH_FREE_ARRAY(D);
   POLYBENCH_FREE_ARRAY(G);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(G_StrictFP);
-#endif
 
   return 0;
 }
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm/CMakeLists.txt
index 5cff44c..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/3mm/CMakeLists.txt
@@ -5,7 +5,4 @@
 endif()
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/atax/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/atax/CMakeLists.txt
index f1b82ec..9b102d9 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/atax/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/atax/CMakeLists.txt
@@ -2,8 +2,4 @@
 list(APPEND CFLAGS -I ${CMAKE_SOURCE_DIR}/${POLYBENCH_UTILS} -DPOLYBENCH_DUMP_ARRAYS)
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/atax/atax.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/atax/atax.c
index 323691d..de95391 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/atax/atax.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/atax/atax.c
@@ -77,10 +77,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_atax_StrictFP(int nx, int ny,
                           DATA_TYPE POLYBENCH_2D(A,NX,NY,nx,ny),
@@ -125,7 +121,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -137,9 +132,7 @@
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, NX, NY, nx, ny);
   POLYBENCH_1D_ARRAY_DECL(x, DATA_TYPE, NY, ny);
   POLYBENCH_1D_ARRAY_DECL(y, DATA_TYPE, NY, ny);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(y_StrictFP, DATA_TYPE, NY, ny);
-#endif
   POLYBENCH_1D_ARRAY_DECL(tmp, DATA_TYPE, NX, nx);
 
   /* Initialize array(s). */
@@ -159,11 +152,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(nx, POLYBENCH_ARRAY(y)));
-#else
   kernel_atax_StrictFP (nx, ny,
                         POLYBENCH_ARRAY(A),
                         POLYBENCH_ARRAY(x),
@@ -175,15 +163,12 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(nx, POLYBENCH_ARRAY(y_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(x);
   POLYBENCH_FREE_ARRAY(y);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(y_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(tmp);
 
   return 0;
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/bicg/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/bicg/CMakeLists.txt
index f1b82ec..9b102d9 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/bicg/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/bicg/CMakeLists.txt
@@ -2,8 +2,4 @@
 list(APPEND CFLAGS -I ${CMAKE_SOURCE_DIR}/${POLYBENCH_UTILS} -DPOLYBENCH_DUMP_ARRAYS)
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/bicg/bicg.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/bicg/bicg.c
index c8357d0..decfea9 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/bicg/bicg.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/bicg/bicg.c
@@ -90,10 +90,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_bicg_StrictFP(int nx, int ny,
                           DATA_TYPE POLYBENCH_2D(A,NX,NY,nx,ny),
@@ -141,7 +137,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -155,10 +150,8 @@
   POLYBENCH_1D_ARRAY_DECL(q, DATA_TYPE, NX, nx);
   POLYBENCH_1D_ARRAY_DECL(p, DATA_TYPE, NY, ny);
   POLYBENCH_1D_ARRAY_DECL(r, DATA_TYPE, NX, nx);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(s_StrictFP, DATA_TYPE, NY, ny);
   POLYBENCH_1D_ARRAY_DECL(q_StrictFP, DATA_TYPE, NX, nx);
-#endif
 
   /* Initialize array(s). */
   init_array (nx, ny,
@@ -181,12 +174,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(nx, ny, POLYBENCH_ARRAY(s),
-                                    POLYBENCH_ARRAY(q)));
-#else
   kernel_bicg_StrictFP(nx, ny,
                        POLYBENCH_ARRAY(A),
                        POLYBENCH_ARRAY(s_StrictFP),
@@ -203,7 +190,6 @@
      by the function call in argument. */
   polybench_prevent_dce(print_array(nx, ny, POLYBENCH_ARRAY(s_StrictFP),
                                     POLYBENCH_ARRAY(q_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
@@ -211,10 +197,8 @@
   POLYBENCH_FREE_ARRAY(q);
   POLYBENCH_FREE_ARRAY(p);
   POLYBENCH_FREE_ARRAY(r);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(s_StrictFP);
   POLYBENCH_FREE_ARRAY(q_StrictFP);
-#endif
 
   return 0;
 }
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/cholesky/cholesky.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/cholesky/cholesky.c
index 27e59ac..f1a8c2f 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/cholesky/cholesky.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/cholesky/cholesky.c
@@ -22,11 +22,8 @@
 static
 void init_array(int n,
 		DATA_TYPE POLYBENCH_1D(p,N,n),
-		DATA_TYPE POLYBENCH_2D(A,N,N,n,n)
-#if !FMA_DISABLED
-                , DATA_TYPE POLYBENCH_2D(A_StrictFP,N,N,n,n)
-#endif
-		)
+		DATA_TYPE POLYBENCH_2D(A,N,N,n,n),
+                DATA_TYPE POLYBENCH_2D(A_StrictFP,N,N,n,n))
 {
 #pragma STDC FP_CONTRACT OFF
   int i, j;
@@ -46,10 +43,7 @@
     {
       p[i] = i + n;
       for (j = 0; j < n; j++)
-#if !FMA_DISABLED
-        A_StrictFP[i][j] = 
-#endif
-		A[i][j] = j + n;
+        A_StrictFP[i][j] = A[i][j] = j + n;
     }
 }
 
@@ -110,10 +104,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_cholesky_StrictFP(int n,
                               DATA_TYPE POLYBENCH_1D(p,N,n),
@@ -170,7 +160,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -180,17 +169,12 @@
   /* Variable declaration/allocation. */
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, N, N, n, n);
   POLYBENCH_1D_ARRAY_DECL(p, DATA_TYPE, N, n);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(A_StrictFP, DATA_TYPE, N, N, n, n);
-#endif
 
 
   /* Initialize array(s). */
   init_array (n, POLYBENCH_ARRAY(p), POLYBENCH_ARRAY(A),
-#if !FMA_DISABLED
-              POLYBENCH_ARRAY(A_StrictFP)
-#endif
-	      );
+              POLYBENCH_ARRAY(A_StrictFP));
 
   /* Start timer. */
   polybench_start_instruments;
@@ -202,11 +186,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A)));
-#else
   kernel_cholesky_StrictFP(n, POLYBENCH_ARRAY(p), POLYBENCH_ARRAY(A_StrictFP));
   if (!check_FP(n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(A_StrictFP)))
     return 1;
@@ -214,13 +193,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(A_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(p);
 
   return 0;
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/doitgen/doitgen.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/doitgen/doitgen.c
index 1e746e1..2ec5317 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/doitgen/doitgen.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/doitgen/doitgen.c
@@ -21,10 +21,8 @@
 /* Array initialization. */
 static
 void init_array(int nr, int nq, int np,
-		DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np)
-#if !FMA_DISABLED
-		, DATA_TYPE POLYBENCH_3D(A_StrictFP,NR,NQ,NP,nr,nq,np),
-#endif
+		DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np),
+		DATA_TYPE POLYBENCH_3D(A_StrictFP,NR,NQ,NP,nr,nq,np),
 		DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np))
 {
 #pragma STDC FP_CONTRACT OFF
@@ -33,10 +31,7 @@
   for (i = 0; i < nr; i++)
     for (j = 0; j < nq; j++)
       for (k = 0; k < np; k++)
-#if !FMA_DISABLED
-	A_StrictFP[i][j][k] =
-#endif
-	       	A[i][j][k] = ((DATA_TYPE) i*j + k) / np;
+	A_StrictFP[i][j][k] = A[i][j][k] = ((DATA_TYPE) i*j + k) / np;
   for (i = 0; i < np; i++)
     for (j = 0; j < np; j++)
       C4[i][j] = ((DATA_TYPE) i*j) / np;
@@ -87,10 +82,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_doitgen_StrictFP(int nr, int nq, int np,
                              DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np),
@@ -136,7 +127,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -147,18 +137,14 @@
 
   /* Variable declaration/allocation. */
   POLYBENCH_3D_ARRAY_DECL(A,DATA_TYPE,NR,NQ,NP,nr,nq,np);
-#if !FMA_DISABLED
   POLYBENCH_3D_ARRAY_DECL(A_StrictFP,DATA_TYPE,NR,NQ,NP,nr,nq,np);
-#endif
   POLYBENCH_3D_ARRAY_DECL(sum,DATA_TYPE,NR,NQ,NP,nr,nq,np);
   POLYBENCH_2D_ARRAY_DECL(C4,DATA_TYPE,NP,NP,np,np);
 
   /* Initialize array(s). */
   init_array (nr, nq, np,
 	      POLYBENCH_ARRAY(A),
-#if !FMA_DISABLED
 	      POLYBENCH_ARRAY(A_StrictFP),
-#endif
 	      POLYBENCH_ARRAY(C4));
 
   /* Start timer. */
@@ -174,11 +160,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(nr, nq, np, POLYBENCH_ARRAY(A)));
-#else
   kernel_doitgen_StrictFP(nr, nq, np,
                           POLYBENCH_ARRAY(A_StrictFP),
                           POLYBENCH_ARRAY(C4),
@@ -190,13 +171,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(nr, nq, np, POLYBENCH_ARRAY(A_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(A_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(sum);
   POLYBENCH_FREE_ARRAY(C4);
 
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemm/gemm.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemm/gemm.c
index 5af2ebf..04020fa 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemm/gemm.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemm/gemm.c
@@ -24,9 +24,7 @@
 		DATA_TYPE *alpha,
 		DATA_TYPE *beta,
 		DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj),
-#if !FMA_DISABLED
 		DATA_TYPE POLYBENCH_2D(C_StrictFP,NI,NJ,ni,nj),
-#endif
 		DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk),
 		DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj))
 {
@@ -37,10 +35,7 @@
   *beta = 2123;
   for (i = 0; i < ni; i++)
     for (j = 0; j < nj; j++)
-#if !FMA_DISABLED
-      C_StrictFP[i][j] =
-#endif
-	      C[i][j] = ((DATA_TYPE) i*j) / ni;
+      C_StrictFP[i][j] = C[i][j] = ((DATA_TYPE) i*j) / ni;
   for (i = 0; i < ni; i++)
     for (j = 0; j < nk; j++)
       A[i][j] = ((DATA_TYPE) i*j) / ni;
@@ -93,10 +88,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_gemm_StrictFP(int ni, int nj, int nk,
                           DATA_TYPE alpha,
@@ -142,7 +133,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -155,18 +145,14 @@
   DATA_TYPE alpha;
   DATA_TYPE beta;
   POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NI,NJ,ni,nj);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(C_StrictFP,DATA_TYPE,NI,NJ,ni,nj);
-#endif
   POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk);
   POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj);
 
   /* Initialize array(s). */
   init_array (ni, nj, nk, &alpha, &beta,
 	      POLYBENCH_ARRAY(C),
-#if !FMA_DISABLED
 	      POLYBENCH_ARRAY(C_StrictFP),
-#endif
 	      POLYBENCH_ARRAY(A),
 	      POLYBENCH_ARRAY(B));
 
@@ -184,11 +170,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(ni, nj,  POLYBENCH_ARRAY(C)));
-#else
   kernel_gemm_StrictFP(ni, nj, nk,
                        alpha, beta,
                        POLYBENCH_ARRAY(C_StrictFP),
@@ -200,13 +181,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(ni, nj,  POLYBENCH_ARRAY(C_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(C);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(C_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(B);
 
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemver/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemver/CMakeLists.txt
index f1b82ec..9b102d9 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemver/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemver/CMakeLists.txt
@@ -2,8 +2,4 @@
 list(APPEND CFLAGS -I ${CMAKE_SOURCE_DIR}/${POLYBENCH_UTILS} -DPOLYBENCH_DUMP_ARRAYS)
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemver/gemver.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemver/gemver.c
index 7fd6b9d..c35ff4e 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemver/gemver.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gemver/gemver.c
@@ -29,9 +29,7 @@
 		 DATA_TYPE POLYBENCH_1D(u2,N,n),
 		 DATA_TYPE POLYBENCH_1D(v2,N,n),
 		 DATA_TYPE POLYBENCH_1D(w,N,n),
-#if !FMA_DISABLED
 		 DATA_TYPE POLYBENCH_1D(w_StrictFP,N,n),
-#endif
 		 DATA_TYPE POLYBENCH_1D(y,N,n),
 		 DATA_TYPE POLYBENCH_1D(z,N,n))
 {
@@ -49,9 +47,7 @@
       v2[i] = (i+1)/n/6.0;
       y[i] = (i+1)/n/8.0;
       z[i] = (i+1)/n/9.0;
-#if !FMA_DISABLED
       w_StrictFP[i] = w[i] = 0.0;
-#endif
       for (j = 0; j < n; j++)
 	A[i][j] = ((DATA_TYPE) i*j) / n;
     }
@@ -113,10 +109,6 @@
 #pragma endscop
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_gemver_StrictFP(int n,
                             DATA_TYPE alpha,
@@ -175,7 +167,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -192,9 +183,7 @@
   POLYBENCH_1D_ARRAY_DECL(u2, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(v2, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(w, DATA_TYPE, N, n);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(w_StrictFP, DATA_TYPE, N, n);
-#endif
   POLYBENCH_1D_ARRAY_DECL(x, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(y, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(z, DATA_TYPE, N, n);
@@ -208,9 +197,7 @@
 	      POLYBENCH_ARRAY(u2),
 	      POLYBENCH_ARRAY(v2),
 	      POLYBENCH_ARRAY(w),
-#if !FMA_DISABLED
 	      POLYBENCH_ARRAY(w_StrictFP),
-#endif
 	      POLYBENCH_ARRAY(y),
 	      POLYBENCH_ARRAY(z));
 
@@ -234,11 +221,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(w)));
-#else
   kernel_gemver_StrictFP(n, alpha, beta,
                          POLYBENCH_ARRAY(A),
                          POLYBENCH_ARRAY(A_tmp),
@@ -256,7 +238,6 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(w_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
@@ -266,9 +247,7 @@
   POLYBENCH_FREE_ARRAY(u2);
   POLYBENCH_FREE_ARRAY(v2);
   POLYBENCH_FREE_ARRAY(w);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(w_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(x);
   POLYBENCH_FREE_ARRAY(y);
   POLYBENCH_FREE_ARRAY(z);
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gesummv/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gesummv/CMakeLists.txt
index 66ab016..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gesummv/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gesummv/CMakeLists.txt
@@ -3,10 +3,6 @@
 if(SMALL_PROBLEM_SIZE)
   list(APPEND CFLAGS -DSMALL_DATASET)
 endif()
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gesummv/gesummv.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gesummv/gesummv.c
index 615c1c3..2c7744d 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gesummv/gesummv.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/gesummv/gesummv.c
@@ -90,10 +90,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_gesummv_StrictFP(int n,
                              DATA_TYPE alpha,
@@ -142,7 +138,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -157,9 +152,7 @@
   POLYBENCH_1D_ARRAY_DECL(tmp, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(x, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(y, DATA_TYPE, N, n);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(y_StrictFP, DATA_TYPE, N, n);
-#endif
 
 
   /* Initialize array(s). */
@@ -183,11 +176,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(y)));
-#else
   kernel_gesummv_StrictFP(n, alpha, beta,
                           POLYBENCH_ARRAY(A),
                           POLYBENCH_ARRAY(B),
@@ -200,7 +188,6 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(y_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/mvt/mvt.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/mvt/mvt.c
index 5b94be3..af0721f 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/mvt/mvt.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/mvt/mvt.c
@@ -23,10 +23,8 @@
 void init_array(int n,
 		DATA_TYPE POLYBENCH_1D(x1,N,n),
 		DATA_TYPE POLYBENCH_1D(x2,N,n),
-#if !FMA_DISABLED
 		DATA_TYPE POLYBENCH_1D(x1_StrictFP,N,n),
 		DATA_TYPE POLYBENCH_1D(x2_StrictFP,N,n),
-#endif
 		DATA_TYPE POLYBENCH_1D(y_1,N,n),
 		DATA_TYPE POLYBENCH_1D(y_2,N,n),
 		DATA_TYPE POLYBENCH_2D(A,N,N,n,n))
@@ -36,14 +34,8 @@
 
   for (i = 0; i < n; i++)
     {
-#if !FMA_DISABLED
-      x1_StrictFP[i] =
-#endif
-	      x1[i] = ((DATA_TYPE) i) / n;
-#if !FMA_DISABLED
-      x2_StrictFP[i] =
-#endif
-	      x2[i] = ((DATA_TYPE) i + 1) / n;
+      x1_StrictFP[i] = x1[i] = ((DATA_TYPE) i) / n;
+      x2_StrictFP[i] = x2[i] = ((DATA_TYPE) i + 1) / n;
       y_1[i] = ((DATA_TYPE) i + 3) / n;
       y_2[i] = ((DATA_TYPE) i + 4) / n;
       for (j = 0; j < n; j++)
@@ -96,10 +88,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_mvt_StrictFP(int n,
                          DATA_TYPE POLYBENCH_1D(x1,N,n),
@@ -141,7 +129,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -152,10 +139,8 @@
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, N, N, n, n);
   POLYBENCH_1D_ARRAY_DECL(x1, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(x2, DATA_TYPE, N, n);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(x1_StrictFP, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(x2_StrictFP, DATA_TYPE, N, n);
-#endif
   POLYBENCH_1D_ARRAY_DECL(y_1, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(y_2, DATA_TYPE, N, n);
 
@@ -164,10 +149,8 @@
   init_array (n,
 	      POLYBENCH_ARRAY(x1),
 	      POLYBENCH_ARRAY(x2),
-#if !FMA_DISABLED
 	      POLYBENCH_ARRAY(x1_StrictFP),
 	      POLYBENCH_ARRAY(x2_StrictFP),
-#endif
 	      POLYBENCH_ARRAY(y_1),
 	      POLYBENCH_ARRAY(y_2),
 	      POLYBENCH_ARRAY(A));
@@ -187,12 +170,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(x1),
-                                    POLYBENCH_ARRAY(x2)));
-#else
   kernel_mvt_StrictFP(n,
                       POLYBENCH_ARRAY(x1_StrictFP),
                       POLYBENCH_ARRAY(x2_StrictFP),
@@ -208,16 +185,13 @@
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(x1_StrictFP),
                                     POLYBENCH_ARRAY(x2_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(x1);
   POLYBENCH_FREE_ARRAY(x2);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(x1_StrictFP);
   POLYBENCH_FREE_ARRAY(x2_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(y_1);
   POLYBENCH_FREE_ARRAY(y_2);
 
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/symm/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/symm/CMakeLists.txt
index 66ab016..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/symm/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/symm/CMakeLists.txt
@@ -3,10 +3,6 @@
 if(SMALL_PROBLEM_SIZE)
   list(APPEND CFLAGS -DSMALL_DATASET)
 endif()
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/symm/symm.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/symm/symm.c
index 843fbb1..e5d9280 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/symm/symm.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/symm/symm.c
@@ -24,9 +24,7 @@
 		DATA_TYPE *alpha,
 		DATA_TYPE *beta,
 		DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj),
-#if !FMA_DISABLED
 		DATA_TYPE POLYBENCH_2D(C_StrictFP,NI,NJ,ni,nj),
-#endif
 		DATA_TYPE POLYBENCH_2D(A,NJ,NJ,nj,nj),
 		DATA_TYPE POLYBENCH_2D(B,NI,NJ,ni,nj))
 {
@@ -37,10 +35,7 @@
   *beta = 2123;
   for (i = 0; i < ni; i++)
     for (j = 0; j < nj; j++) {
-#if !FMA_DISABLED
-      C_StrictFP[i][j] =
-#endif
-	      C[i][j] = ((DATA_TYPE) i*j) / ni;
+      C_StrictFP[i][j] = C[i][j] = ((DATA_TYPE) i*j) / ni;
       B[i][j] = ((DATA_TYPE) i*j) / ni;
     }
   for (i = 0; i < nj; i++)
@@ -97,10 +92,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_symm_StrictFP(int ni, int nj,
                           DATA_TYPE alpha,
@@ -151,7 +142,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -163,18 +153,14 @@
   DATA_TYPE alpha;
   DATA_TYPE beta;
   POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NI,NJ,ni,nj);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(C_StrictFP,DATA_TYPE,NI,NJ,ni,nj);
-#endif
   POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NJ,NJ,nj,nj);
   POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NI,NJ,ni,nj);
 
   /* Initialize array(s). */
   init_array (ni, nj, &alpha, &beta,
 	      POLYBENCH_ARRAY(C),
-#if !FMA_DISABLED
 	      POLYBENCH_ARRAY(C_StrictFP),
-#endif
 	      POLYBENCH_ARRAY(A),
 	      POLYBENCH_ARRAY(B));
 
@@ -192,11 +178,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(ni, nj, POLYBENCH_ARRAY(C)));
-#else
   kernel_symm_StrictFP(ni, nj,
                        alpha, beta,
                        POLYBENCH_ARRAY(C_StrictFP),
@@ -208,13 +189,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(ni, nj, POLYBENCH_ARRAY(C_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(C);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(C_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(B);
 
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/syr2k/syr2k.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/syr2k/syr2k.c
index 3f4004f..3e25e8f 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/syr2k/syr2k.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/syr2k/syr2k.c
@@ -24,9 +24,7 @@
 		DATA_TYPE *alpha,
 		DATA_TYPE *beta,
 		DATA_TYPE POLYBENCH_2D(C,NI,NI,ni,ni),
-#if !FMA_DISABLED
 		DATA_TYPE POLYBENCH_2D(C_StrictFP,NI,NI,ni,ni),
-#endif
 		DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj),
 		DATA_TYPE POLYBENCH_2D(B,NI,NJ,ni,nj))
 {
@@ -42,10 +40,7 @@
     }
   for (i = 0; i < ni; i++)
     for (j = 0; j < ni; j++)
-#if !FMA_DISABLED
-      C_StrictFP[i][j] =
-#endif
-	      C[i][j] = ((DATA_TYPE) i*j) / ni;
+      C_StrictFP[i][j] = C[i][j] = ((DATA_TYPE) i*j) / ni;
 }
 
 
@@ -95,10 +90,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_syr2k_StrictFP(int ni, int nj,
                       DATA_TYPE alpha,
@@ -147,7 +138,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -159,18 +149,14 @@
   DATA_TYPE alpha;
   DATA_TYPE beta;
   POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NI,NI,ni,ni);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(C_StrictFP,DATA_TYPE,NI,NI,ni,ni);
-#endif
   POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NJ,ni,nj);
   POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NI,NJ,ni,nj);
 
   /* Initialize array(s). */
   init_array (ni, nj, &alpha, &beta,
 	      POLYBENCH_ARRAY(C),
-#if !FMA_DISABLED
 	      POLYBENCH_ARRAY(C_StrictFP),
-#endif
 	      POLYBENCH_ARRAY(A),
 	      POLYBENCH_ARRAY(B));
 
@@ -188,11 +174,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(ni, POLYBENCH_ARRAY(C)));
-#else
   kernel_syr2k_StrictFP(ni, nj,
                         alpha, beta,
                         POLYBENCH_ARRAY(C_StrictFP),
@@ -205,13 +186,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(ni, POLYBENCH_ARRAY(C_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(C);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(C_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(B);
 
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/syrk/syrk.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/syrk/syrk.c
index fb81b00..cc8483a 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/syrk/syrk.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/syrk/syrk.c
@@ -24,9 +24,7 @@
 		DATA_TYPE *alpha,
 		DATA_TYPE *beta,
 		DATA_TYPE POLYBENCH_2D(C,NI,NI,ni,ni),
-#if !FMA_DISABLED
 		DATA_TYPE POLYBENCH_2D(C_StrictFP,NI,NI,ni,ni),
-#endif
 		DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj))
 {
 #pragma STDC FP_CONTRACT OFF
@@ -39,10 +37,7 @@
       A[i][j] = ((DATA_TYPE) i*j) / ni;
   for (i = 0; i < ni; i++)
     for (j = 0; j < ni; j++)
-#if !FMA_DISABLED
-      C_StrictFP[i][j] =
-#endif
-	      C[i][j] = ((DATA_TYPE) i*j) / ni;
+      C_StrictFP[i][j] = C[i][j] = ((DATA_TYPE) i*j) / ni;
 }
 
 
@@ -88,10 +83,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_syrk_StrictFP(int ni, int nj,
                           DATA_TYPE alpha,
@@ -136,7 +127,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -148,17 +138,12 @@
   DATA_TYPE alpha;
   DATA_TYPE beta;
   POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NI,NI,ni,ni);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(C_StrictFP,DATA_TYPE,NI,NI,ni,ni);
-#endif
   POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NJ,ni,nj);
 
   /* Initialize array(s). */
   init_array (ni, nj, &alpha, &beta, POLYBENCH_ARRAY(C),
-#if !FMA_DISABLED
-              POLYBENCH_ARRAY(C_StrictFP),
-#endif
-	      POLYBENCH_ARRAY(A));
+              POLYBENCH_ARRAY(C_StrictFP), POLYBENCH_ARRAY(A));
 
   /* Start timer. */
   polybench_start_instruments;
@@ -170,11 +155,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(ni, POLYBENCH_ARRAY(C)));
-#else
   kernel_syrk_StrictFP(ni, nj, alpha, beta, POLYBENCH_ARRAY(C_StrictFP),
                        POLYBENCH_ARRAY(A));
 
@@ -184,13 +164,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(ni, POLYBENCH_ARRAY(C_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(C);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(C_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(A);
 
   return 0;
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trisolv/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trisolv/CMakeLists.txt
index d6da32e..9b102d9 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trisolv/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trisolv/CMakeLists.txt
@@ -1,9 +1,5 @@
 set(POLYBENCH_UTILS SingleSource/Benchmarks/Polybench/utilities )
 list(APPEND CFLAGS -I ${CMAKE_SOURCE_DIR}/${POLYBENCH_UTILS} -DPOLYBENCH_DUMP_ARRAYS)
 set(HASH_PROGRAM_OUTPUT 1)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trisolv/trisolv.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trisolv/trisolv.c
index 9d434b5..cc684a9 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trisolv/trisolv.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trisolv/trisolv.c
@@ -23,9 +23,7 @@
 void init_array(int n,
 		DATA_TYPE POLYBENCH_2D(A,N,N,n,n),
 		DATA_TYPE POLYBENCH_1D(x,N,n),
-#if !FMA_DISABLED
 		DATA_TYPE POLYBENCH_1D(x_StrictFP,N,n),
-#endif
 		DATA_TYPE POLYBENCH_1D(c,N,n))
 {
 #pragma STDC FP_CONTRACT OFF
@@ -44,11 +42,7 @@
   */
   for (i = 0; i < n; i++)
     {
-      c[i] =
-#if !FMA_DISABLED
-	      x_StrictFP[i] = 
-#endif
-	      x[i] = ((DATA_TYPE) i+n) / n;
+      c[i] = x_StrictFP[i] = x[i] = ((DATA_TYPE) i+n) / n;
       for (j = 0; j < n; j++)
       	A[i][j] = ((DATA_TYPE) i*j+n) / n;
     }
@@ -94,10 +88,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_trisolv_StrictFP(int n,
                         DATA_TYPE POLYBENCH_2D(A,N,N,n,n),
@@ -138,7 +128,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -148,18 +137,13 @@
   /* Variable declaration/allocation. */
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, N, N, n, n);
   POLYBENCH_1D_ARRAY_DECL(x, DATA_TYPE, N, n);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(x_StrictFP, DATA_TYPE, N, n);
-#endif
   POLYBENCH_1D_ARRAY_DECL(c, DATA_TYPE, N, n);
 
 
   /* Initialize array(s). */
   init_array (n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(x),
-#if !FMA_DISABLED
-              POLYBENCH_ARRAY(x_StrictFP),
-#endif
-	      POLYBENCH_ARRAY(c));
+              POLYBENCH_ARRAY(x_StrictFP), POLYBENCH_ARRAY(c));
 
   /* Start timer. */
   polybench_start_instruments;
@@ -171,24 +155,16 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(x)));
-#else
   kernel_trisolv (n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(x_StrictFP), POLYBENCH_ARRAY(c));
 
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(x_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(x);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(x_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(c);
 
   return 0;
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trmm/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trmm/CMakeLists.txt
index 66ab016..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trmm/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trmm/CMakeLists.txt
@@ -3,10 +3,6 @@
 if(SMALL_PROBLEM_SIZE)
   list(APPEND CFLAGS -DSMALL_DATASET)
 endif()
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trmm/trmm.c b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trmm/trmm.c
index db775b1..5309af9 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trmm/trmm.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/kernels/trmm/trmm.c
@@ -23,11 +23,8 @@
 void init_array(int ni,
 		DATA_TYPE *alpha,
 		DATA_TYPE POLYBENCH_2D(A,NI,NI,ni,ni),
-		DATA_TYPE POLYBENCH_2D(B,NI,NI,ni,ni)
-#if !FMA_DISABLED
-                , DATA_TYPE POLYBENCH_2D(B_StrictFP,NI,NI,ni,ni)
-#endif
-		)
+		DATA_TYPE POLYBENCH_2D(B,NI,NI,ni,ni),
+                DATA_TYPE POLYBENCH_2D(B_StrictFP,NI,NI,ni,ni))
 {
 #pragma STDC FP_CONTRACT OFF
   int i, j;
@@ -36,10 +33,7 @@
   for (i = 0; i < ni; i++)
     for (j = 0; j < ni; j++) {
       A[i][j] = ((DATA_TYPE) i*j) / ni;
-#if !FMA_DISABLED
-      B_StrictFP[i][j] =
-#endif
-	      B[i][j] = ((DATA_TYPE) i*j) / ni;
+      B_StrictFP[i][j] = B[i][j] = ((DATA_TYPE) i*j) / ni;
     }
 }
 
@@ -82,10 +76,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_trmm_StrictFP(int ni,
                      DATA_TYPE alpha,
@@ -126,7 +116,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -137,16 +126,11 @@
   DATA_TYPE alpha;
   POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NI,ni,ni);
   POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NI,NI,ni,ni);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(B_StrictFP,DATA_TYPE,NI,NI,ni,ni);
-#endif
 
   /* Initialize array(s). */
-  init_array (ni, &alpha, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B)
-#if !FMA_DISABLED
-              , POLYBENCH_ARRAY(B_StrictFP)
-#endif
-	      );
+  init_array (ni, &alpha, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B),
+              POLYBENCH_ARRAY(B_StrictFP));
 
   /* Start timer. */
   polybench_start_instruments;
@@ -158,11 +142,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(ni, POLYBENCH_ARRAY(B)));
-#else
   kernel_trmm_StrictFP(ni, alpha, POLYBENCH_ARRAY(A),
                        POLYBENCH_ARRAY(B_StrictFP));
 
@@ -172,7 +151,6 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(ni, POLYBENCH_ARRAY(B_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/durbin/durbin.c b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/durbin/durbin.c
index 294f4bf..3cc6880 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/durbin/durbin.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/durbin/durbin.c
@@ -92,10 +92,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static
 void kernel_durbin_StrictFP(int n,
                             DATA_TYPE POLYBENCH_2D(y,N,N,n,n),
@@ -148,7 +144,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -162,9 +157,7 @@
   POLYBENCH_1D_ARRAY_DECL(beta, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(r, DATA_TYPE, N, n);
   POLYBENCH_1D_ARRAY_DECL(out, DATA_TYPE, N, n);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(out_StrictFP, DATA_TYPE, N, n);
-#endif
 
 
   /* Initialize array(s). */
@@ -191,11 +184,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(out)));
-#else
   init_array (n,
 	      POLYBENCH_ARRAY(y),
 	      POLYBENCH_ARRAY(sum),
@@ -217,7 +205,6 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(out_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(y);
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/dynprog/dynprog.c b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/dynprog/dynprog.c
index 30b40c3..c94db51 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/dynprog/dynprog.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/dynprog/dynprog.c
@@ -81,10 +81,6 @@
   *out = out_l;
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_dynprog_StrictFP(int tsteps, int length,
                         DATA_TYPE POLYBENCH_2D(c,LENGTH,LENGTH,length,length),
@@ -135,7 +131,6 @@
   }
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -144,10 +139,7 @@
   int tsteps = TSTEPS;
 
   /* Variable declaration/allocation. */
-  DATA_TYPE out;
-#if !FMA_DISABLED
-  DATA_TYPE out_StrictFP;
-#endif
+  DATA_TYPE out, out_StrictFP;
   POLYBENCH_3D_ARRAY_DECL(sum_c,DATA_TYPE,LENGTH,LENGTH,LENGTH,length,length,length);
   POLYBENCH_2D_ARRAY_DECL(c,DATA_TYPE,LENGTH,LENGTH,length,length);
   POLYBENCH_2D_ARRAY_DECL(W,DATA_TYPE,LENGTH,LENGTH,length,length);
@@ -169,11 +161,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(out));
-#else
   init_array (length, POLYBENCH_ARRAY(c), POLYBENCH_ARRAY(W));
   kernel_dynprog (tsteps, length,
 		  POLYBENCH_ARRAY(c),
@@ -187,7 +174,6 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(out_StrictFP));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(sum_c);
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/gramschmidt/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/gramschmidt/CMakeLists.txt
index 66ab016..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/gramschmidt/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/gramschmidt/CMakeLists.txt
@@ -3,10 +3,6 @@
 if(SMALL_PROBLEM_SIZE)
   list(APPEND CFLAGS -DSMALL_DATASET)
 endif()
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/gramschmidt/gramschmidt.c b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/gramschmidt/gramschmidt.c
index 253e722..4240b01 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/gramschmidt/gramschmidt.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/gramschmidt/gramschmidt.c
@@ -120,10 +120,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_gramschmidt_StrictFP(int ni, int nj,
                             DATA_TYPE POLYBENCH_2D(A,NI,NJ,ni,nj),
@@ -178,7 +174,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -190,11 +185,9 @@
   POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NJ,ni,nj);
   POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,NJ,NJ,nj,nj);
   POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,NI,NJ,ni,nj);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(A_StrictFP,DATA_TYPE,NI,NJ,ni,nj);
   POLYBENCH_2D_ARRAY_DECL(R_StrictFP,DATA_TYPE,NJ,NJ,nj,nj);
   POLYBENCH_2D_ARRAY_DECL(Q_StrictFP,DATA_TYPE,NI,NJ,ni,nj);
-#endif
 
   /* Initialize array(s). */
   init_array (ni, nj,
@@ -215,14 +208,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(ni, nj,
-                                    POLYBENCH_ARRAY(A),
-                                    POLYBENCH_ARRAY(R),
-                                    POLYBENCH_ARRAY(Q)));
-#else
   init_array (ni, nj,
 	      POLYBENCH_ARRAY(A_StrictFP),
 	      POLYBENCH_ARRAY(R_StrictFP),
@@ -245,17 +230,14 @@
                                     POLYBENCH_ARRAY(A_StrictFP),
                                     POLYBENCH_ARRAY(R_StrictFP),
                                     POLYBENCH_ARRAY(Q_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(R);
   POLYBENCH_FREE_ARRAY(Q);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(A_StrictFP);
   POLYBENCH_FREE_ARRAY(R_StrictFP);
   POLYBENCH_FREE_ARRAY(Q_StrictFP);
-#endif
 
   return 0;
 }
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/lu/lu.c b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/lu/lu.c
index 538faf5..dad2f71 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/lu/lu.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/lu/lu.c
@@ -80,10 +80,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_lu_StrictFP(int n,
                    DATA_TYPE POLYBENCH_2D(A,N,N,n,n))
@@ -131,7 +127,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -140,9 +135,7 @@
 
   /* Variable declaration/allocation. */
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, N, N, n, n);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(A_StrictFP, DATA_TYPE, N, N, n, n);
-#endif
 
   /* Initialize array(s). */
   init_array (n, POLYBENCH_ARRAY(A));
@@ -157,11 +150,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A)));
-#else
   init_array (n, POLYBENCH_ARRAY(A_StrictFP));
   kernel_lu (n, POLYBENCH_ARRAY(A_StrictFP));
   if (!check_FP(n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(A_StrictFP)))
@@ -170,13 +158,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(A_StrictFP);
-#endif
 
   return 0;
 }
diff --git a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/ludcmp/ludcmp.c b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/ludcmp/ludcmp.c
index 0055335..1bfbebc 100644
--- a/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/ludcmp/ludcmp.c
+++ b/SingleSource/Benchmarks/Polybench/linear-algebra/solvers/ludcmp/ludcmp.c
@@ -109,10 +109,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_ludcmp_StrictFP(int n,
                        DATA_TYPE POLYBENCH_2D(A,N+1,N+1,n+1,n+1),
@@ -183,7 +179,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -194,9 +189,7 @@
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, N+1, N+1, n+1, n+1);
   POLYBENCH_1D_ARRAY_DECL(b, DATA_TYPE, N+1, n+1);
   POLYBENCH_1D_ARRAY_DECL(x, DATA_TYPE, N+1, n+1);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(x_StrictFP, DATA_TYPE, N+1, n+1);
-#endif
   POLYBENCH_1D_ARRAY_DECL(y, DATA_TYPE, N+1, n+1);
 
 
@@ -221,11 +214,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(X)));
-#else
   init_array (n,
 	      POLYBENCH_ARRAY(A),
 	      POLYBENCH_ARRAY(b),
@@ -242,15 +230,12 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(x_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(b);
   POLYBENCH_FREE_ARRAY(x);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(x_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(y);
 
   return 0;
diff --git a/SingleSource/Benchmarks/Polybench/medley/floyd-warshall/floyd-warshall.c b/SingleSource/Benchmarks/Polybench/medley/floyd-warshall/floyd-warshall.c
index 4668a69..9d1d991 100644
--- a/SingleSource/Benchmarks/Polybench/medley/floyd-warshall/floyd-warshall.c
+++ b/SingleSource/Benchmarks/Polybench/medley/floyd-warshall/floyd-warshall.c
@@ -71,10 +71,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_floyd_warshall_StrictFP(int n, DATA_TYPE POLYBENCH_2D(path,N,N,n,n))
 {
@@ -114,7 +110,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -123,9 +118,7 @@
 
   /* Variable declaration/allocation. */
   POLYBENCH_2D_ARRAY_DECL(path, DATA_TYPE, N, N, n, n);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(path_StrictFP, DATA_TYPE, N, N, n, n);
-#endif
 
   /* Initialize array(s). */
   init_array (n, POLYBENCH_ARRAY(path));
@@ -140,11 +133,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(path)));
-#else
   init_array (n, POLYBENCH_ARRAY(path_StrictFP));
   kernel_floyd_warshall_StrictFP(n, POLYBENCH_ARRAY(path_StrictFP));
   if (!check_FP(n, POLYBENCH_ARRAY(path), POLYBENCH_ARRAY(path_StrictFP)))
@@ -153,13 +141,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(path_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(path);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(path_StrictFP);
-#endif
 
   return 0;
 }
diff --git a/SingleSource/Benchmarks/Polybench/medley/reg_detect/reg_detect.c b/SingleSource/Benchmarks/Polybench/medley/reg_detect/reg_detect.c
index a0aa10b..b183d2d 100644
--- a/SingleSource/Benchmarks/Polybench/medley/reg_detect/reg_detect.c
+++ b/SingleSource/Benchmarks/Polybench/medley/reg_detect/reg_detect.c
@@ -100,10 +100,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_reg_detect_StrictFP(int niter, int maxgrid, int length,
                            DATA_TYPE POLYBENCH_2D(sum_tang,MAXGRID,MAXGRID,maxgrid,maxgrid),
@@ -166,7 +162,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -179,9 +174,7 @@
   POLYBENCH_2D_ARRAY_DECL(sum_tang, DATA_TYPE, MAXGRID, MAXGRID, maxgrid, maxgrid);
   POLYBENCH_2D_ARRAY_DECL(mean, DATA_TYPE, MAXGRID, MAXGRID, maxgrid, maxgrid);
   POLYBENCH_2D_ARRAY_DECL(path, DATA_TYPE, MAXGRID, MAXGRID, maxgrid, maxgrid);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(path_StrictFP, DATA_TYPE, MAXGRID, MAXGRID, maxgrid, maxgrid);
-#endif
   POLYBENCH_3D_ARRAY_DECL(diff, DATA_TYPE, MAXGRID, MAXGRID, LENGTH, maxgrid, maxgrid, length);
   POLYBENCH_3D_ARRAY_DECL(sum_diff, DATA_TYPE, MAXGRID, MAXGRID, LENGTH, maxgrid, maxgrid, length);
 
@@ -206,11 +199,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(maxgrid, POLYBENCH_ARRAY(path)));
-#else
   init_array (maxgrid,
 	      POLYBENCH_ARRAY(sum_tang),
 	      POLYBENCH_ARRAY(mean),
@@ -227,15 +215,12 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(maxgrid, POLYBENCH_ARRAY(path_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(sum_tang);
   POLYBENCH_FREE_ARRAY(mean);
   POLYBENCH_FREE_ARRAY(path);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(path_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(diff);
   POLYBENCH_FREE_ARRAY(sum_diff);
 
diff --git a/SingleSource/Benchmarks/Polybench/stencils/adi/CMakeLists.txt b/SingleSource/Benchmarks/Polybench/stencils/adi/CMakeLists.txt
index 66ab016..cc33024 100644
--- a/SingleSource/Benchmarks/Polybench/stencils/adi/CMakeLists.txt
+++ b/SingleSource/Benchmarks/Polybench/stencils/adi/CMakeLists.txt
@@ -3,10 +3,6 @@
 if(SMALL_PROBLEM_SIZE)
   list(APPEND CFLAGS -DSMALL_DATASET)
 endif()
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-
 set(HASH_PROGRAM_OUTPUT 1)
 add_definitions(-DFP_ABSTOLERANCE=1e-5)
 llvm_singlesource()
diff --git a/SingleSource/Benchmarks/Polybench/stencils/adi/adi.c b/SingleSource/Benchmarks/Polybench/stencils/adi/adi.c
index 402e461..962ad1b 100644
--- a/SingleSource/Benchmarks/Polybench/stencils/adi/adi.c
+++ b/SingleSource/Benchmarks/Polybench/stencils/adi/adi.c
@@ -102,10 +102,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_adi_StrictFP(int tsteps,
                     int n,
@@ -171,7 +167,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -181,9 +176,7 @@
 
   /* Variable declaration/allocation. */
   POLYBENCH_2D_ARRAY_DECL(X, DATA_TYPE, N, N, n, n);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(X_StrictFP, DATA_TYPE, N, N, n, n);
-#endif
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, N, N, n, n);
   POLYBENCH_2D_ARRAY_DECL(B, DATA_TYPE, N, N, n, n);
 
@@ -202,11 +195,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(X)));
-#else
   init_array (n, POLYBENCH_ARRAY(X_StrictFP), POLYBENCH_ARRAY(A),
               POLYBENCH_ARRAY(B));
   kernel_adi (tsteps, n, POLYBENCH_ARRAY(X_StrictFP),
@@ -217,13 +205,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(X_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(X);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(X_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(A);
   POLYBENCH_FREE_ARRAY(B);
 
diff --git a/SingleSource/Benchmarks/Polybench/stencils/fdtd-2d/fdtd-2d.c b/SingleSource/Benchmarks/Polybench/stencils/fdtd-2d/fdtd-2d.c
index bb9e954..89531e8 100644
--- a/SingleSource/Benchmarks/Polybench/stencils/fdtd-2d/fdtd-2d.c
+++ b/SingleSource/Benchmarks/Polybench/stencils/fdtd-2d/fdtd-2d.c
@@ -104,10 +104,6 @@
 #pragma endscop
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_fdtd_2d_StrictFP(int tmax,
                         int nx,
@@ -161,7 +157,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -174,11 +169,9 @@
   POLYBENCH_2D_ARRAY_DECL(ex,DATA_TYPE,NX,NY,nx,ny);
   POLYBENCH_2D_ARRAY_DECL(ey,DATA_TYPE,NX,NY,nx,ny);
   POLYBENCH_2D_ARRAY_DECL(hz,DATA_TYPE,NX,NY,nx,ny);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(ex_StrictFP,DATA_TYPE,NX,NY,nx,ny);
   POLYBENCH_2D_ARRAY_DECL(ey_StrictFP,DATA_TYPE,NX,NY,nx,ny);
   POLYBENCH_2D_ARRAY_DECL(hz_StrictFP,DATA_TYPE,NX,NY,nx,ny);
-#endif
   POLYBENCH_1D_ARRAY_DECL(_fict_,DATA_TYPE,TMAX,tmax);
 
   /* Initialize array(s). */
@@ -203,13 +196,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(nx, ny, POLYBENCH_ARRAY(ex),
-				    POLYBENCH_ARRAY(ey),
-				    POLYBENCH_ARRAY(hz)));
-#else
   init_array (tmax, nx, ny,
 	      POLYBENCH_ARRAY(ex_StrictFP),
 	      POLYBENCH_ARRAY(ey_StrictFP),
@@ -226,17 +212,14 @@
   polybench_prevent_dce(print_array(nx, ny, POLYBENCH_ARRAY(ex_StrictFP),
 				    POLYBENCH_ARRAY(ey_StrictFP),
 				    POLYBENCH_ARRAY(hz_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(ex);
   POLYBENCH_FREE_ARRAY(ey);
   POLYBENCH_FREE_ARRAY(hz);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(ex_StrictFP);
   POLYBENCH_FREE_ARRAY(ey_StrictFP);
   POLYBENCH_FREE_ARRAY(hz_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(_fict_);
 
   return 0;
diff --git a/SingleSource/Benchmarks/Polybench/stencils/fdtd-apml/fdtd-apml.c b/SingleSource/Benchmarks/Polybench/stencils/fdtd-apml/fdtd-apml.c
index 63bccad..1fc0ce0 100644
--- a/SingleSource/Benchmarks/Polybench/stencils/fdtd-apml/fdtd-apml.c
+++ b/SingleSource/Benchmarks/Polybench/stencils/fdtd-apml/fdtd-apml.c
@@ -166,10 +166,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_fdtd_apml_StrictFP(int cz,
                           int cxm,
@@ -257,7 +253,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -277,12 +272,10 @@
   POLYBENCH_3D_ARRAY_DECL(Ex,DATA_TYPE,CZ+1,CYM+1,CXM+1,cz+1,cym+1,cxm+1);
   POLYBENCH_3D_ARRAY_DECL(Ey,DATA_TYPE,CZ+1,CYM+1,CXM+1,cz+1,cym+1,cxm+1);
   POLYBENCH_3D_ARRAY_DECL(Hz,DATA_TYPE,CZ+1,CYM+1,CXM+1,cz+1,cym+1,cxm+1);
-#if !FMA_DISABLED
   POLYBENCH_3D_ARRAY_DECL(Bza_StrictFP,DATA_TYPE,CZ+1,CYM+1,CXM+1,cz+1,cym+1,cxm+1);
   POLYBENCH_3D_ARRAY_DECL(Ex_StrictFP,DATA_TYPE,CZ+1,CYM+1,CXM+1,cz+1,cym+1,cxm+1);
   POLYBENCH_3D_ARRAY_DECL(Ey_StrictFP,DATA_TYPE,CZ+1,CYM+1,CXM+1,cz+1,cym+1,cxm+1);
   POLYBENCH_3D_ARRAY_DECL(Hz_StrictFP,DATA_TYPE,CZ+1,CYM+1,CXM+1,cz+1,cym+1,cxm+1);
-#endif
   POLYBENCH_1D_ARRAY_DECL(czm,DATA_TYPE,CZ+1,cz+1);
   POLYBENCH_1D_ARRAY_DECL(czp,DATA_TYPE,CZ+1,cz+1);
   POLYBENCH_1D_ARRAY_DECL(cxmh,DATA_TYPE,CXM+1,cxm+1);
@@ -328,15 +321,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(cz, cxm, cym,
-  				    POLYBENCH_ARRAY(Bza),
-  				    POLYBENCH_ARRAY(Ex),
-  				    POLYBENCH_ARRAY(Ey),
-  				    POLYBENCH_ARRAY(Hz)));
-#else
   init_array (cz, cxm, cym, &mui, &ch,
   	      POLYBENCH_ARRAY(Ax),
   	      POLYBENCH_ARRAY(Ry),
@@ -380,7 +364,6 @@
   				    POLYBENCH_ARRAY(Ex_StrictFP),
   				    POLYBENCH_ARRAY(Ey_StrictFP),
   				    POLYBENCH_ARRAY(Hz_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(Ax);
@@ -391,12 +374,10 @@
   POLYBENCH_FREE_ARRAY(Ex);
   POLYBENCH_FREE_ARRAY(Ey);
   POLYBENCH_FREE_ARRAY(Hz);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(Bza_StrictFP);
   POLYBENCH_FREE_ARRAY(Ex_StrictFP);
   POLYBENCH_FREE_ARRAY(Ey_StrictFP);
   POLYBENCH_FREE_ARRAY(Hz_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(czm);
   POLYBENCH_FREE_ARRAY(czp);
   POLYBENCH_FREE_ARRAY(cxmh);
diff --git a/SingleSource/Benchmarks/Polybench/stencils/jacobi-1d-imper/jacobi-1d-imper.c b/SingleSource/Benchmarks/Polybench/stencils/jacobi-1d-imper/jacobi-1d-imper.c
index ec544d4..df5ab1a 100644
--- a/SingleSource/Benchmarks/Polybench/stencils/jacobi-1d-imper/jacobi-1d-imper.c
+++ b/SingleSource/Benchmarks/Polybench/stencils/jacobi-1d-imper/jacobi-1d-imper.c
@@ -74,10 +74,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_jacobi_1d_imper_StrictFP(int tsteps,
                                 int n,
@@ -118,7 +114,6 @@
 
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -128,9 +123,7 @@
 
   /* Variable declaration/allocation. */
   POLYBENCH_1D_ARRAY_DECL(A, DATA_TYPE, N, n);
-#if !FMA_DISABLED
   POLYBENCH_1D_ARRAY_DECL(A_StrictFP, DATA_TYPE, N, n);
-#endif
   POLYBENCH_1D_ARRAY_DECL(B, DATA_TYPE, N, n);
 
 
@@ -147,11 +140,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A)));
-#else
   init_array (n, POLYBENCH_ARRAY(A_StrictFP), POLYBENCH_ARRAY(B));
   kernel_jacobi_1d_imper (tsteps, n, POLYBENCH_ARRAY(A_StrictFP),
                           POLYBENCH_ARRAY(B));
@@ -161,7 +149,6 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
diff --git a/SingleSource/Benchmarks/Polybench/stencils/jacobi-2d-imper/jacobi-2d-imper.c b/SingleSource/Benchmarks/Polybench/stencils/jacobi-2d-imper/jacobi-2d-imper.c
index 9d03392..bc52807 100644
--- a/SingleSource/Benchmarks/Polybench/stencils/jacobi-2d-imper/jacobi-2d-imper.c
+++ b/SingleSource/Benchmarks/Polybench/stencils/jacobi-2d-imper/jacobi-2d-imper.c
@@ -79,10 +79,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_jacobi_2d_imper_StrictFP(int tsteps,
                                 int n,
@@ -127,7 +123,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -137,9 +132,7 @@
 
   /* Variable declaration/allocation. */
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, N, N, n, n);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(A_StrictFP, DATA_TYPE, N, N, n, n);
-#endif
   POLYBENCH_2D_ARRAY_DECL(B, DATA_TYPE, N, N, n, n);
 
 
@@ -156,11 +149,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A)));
-#else
   init_array (n, POLYBENCH_ARRAY(A_StrictFP), POLYBENCH_ARRAY(B));
   kernel_jacobi_2d_imper_StrictFP(tsteps, n, POLYBENCH_ARRAY(A_StrictFP),
                                   POLYBENCH_ARRAY(B));
@@ -170,13 +158,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(A_StrictFP);
-#endif
   POLYBENCH_FREE_ARRAY(B);
 
   return 0;
diff --git a/SingleSource/Benchmarks/Polybench/stencils/seidel-2d/seidel-2d.c b/SingleSource/Benchmarks/Polybench/stencils/seidel-2d/seidel-2d.c
index 89e65ae..189122a 100644
--- a/SingleSource/Benchmarks/Polybench/stencils/seidel-2d/seidel-2d.c
+++ b/SingleSource/Benchmarks/Polybench/stencils/seidel-2d/seidel-2d.c
@@ -71,10 +71,6 @@
 
 }
 
-#if !FMA_DISABLED
-// NOTE: FMA_DISABLED is true for targets where FMA contraction causes
-// discrepancies which cause the accuracy checks to fail.
-// In this case, the test runs with the option -ffp-contract=off
 static void
 kernel_seidel_2d_StrictFP(int tsteps,
                           int n,
@@ -115,7 +111,6 @@
   /* All elements are within the allowed FP_ABSTOLERANCE error margin.  */
   return 1;
 }
-#endif
 
 int main(int argc, char** argv)
 {
@@ -125,9 +120,7 @@
 
   /* Variable declaration/allocation. */
   POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, N, N, n, n);
-#if !FMA_DISABLED
   POLYBENCH_2D_ARRAY_DECL(A_StrictFP, DATA_TYPE, N, N, n, n);
-#endif
 
 
   /* Initialize array(s). */
@@ -143,11 +136,6 @@
   polybench_stop_instruments;
   polybench_print_instruments;
 
-#if FMA_DISABLED
-  /* Prevent dead-code elimination. All live-out data must be printed
-     by the function call in argument. */
-  polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A)));
-#else
   init_array (n, POLYBENCH_ARRAY(A_StrictFP));
   kernel_seidel_2d (tsteps, n, POLYBENCH_ARRAY(A_StrictFP));
 
@@ -157,13 +145,10 @@
   /* Prevent dead-code elimination. All live-out data must be printed
      by the function call in argument. */
   polybench_prevent_dce(print_array(n, POLYBENCH_ARRAY(A_StrictFP)));
-#endif
 
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(A);
-#if !FMA_DISABLED
   POLYBENCH_FREE_ARRAY(A_StrictFP);
-#endif
 
   return 0;
 }
diff --git a/SingleSource/UnitTests/Vector/SSE/CMakeLists.txt b/SingleSource/UnitTests/Vector/SSE/CMakeLists.txt
index eda39ed..cc008b1 100644
--- a/SingleSource/UnitTests/Vector/SSE/CMakeLists.txt
+++ b/SingleSource/UnitTests/Vector/SSE/CMakeLists.txt
@@ -2,7 +2,4 @@
 list(APPEND LDFLAGS -lm)
 list(APPEND TARGET_FLAGS -msse2)
 list(APPEND LCCFLAGS -msse2)
-# Floating point contraction must be suppressed due to accuracy issues
-list(APPEND CXXFLAGS -ffp-contract=off -DFMA_DISABLED=1)
-list(APPEND CFLAGS -ffp-contract=off -DFMA_DISABLED=1)
 llvm_singlesource(PREFIX "Vector-")
