mirror of https://github.com/microsoft/clang.git
Don't pass FPOpFusion::Strict to the backend
This restores the behavior prior to D31167 where the code-gen default was FPC_On which mapped to FPOpFusion::Standard. After merging the FE state (on/off) and the code-gen state (on/fast/off), the default became off to match the front-end. In other words, the front-end controls when to fuse along the language standards and the backend shouldn't override this by splitting fused intrinsics as FPOpFusion::Strict would imply. Differential Revision: https://reviews.llvm.org/D32301 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@300858 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3e6188d584
commit
c4727f2079
|
@ -369,7 +369,9 @@ static void initTargetOptions(llvm::TargetOptions &Options,
|
|||
// Set FP fusion mode.
|
||||
switch (LangOpts.getDefaultFPContractMode()) {
|
||||
case LangOptions::FPC_Off:
|
||||
Options.AllowFPOpFusion = llvm::FPOpFusion::Strict;
|
||||
// Preserve any contraction performed by the front-end. (Strict performs
|
||||
// splitting of the muladd instrinsic in the backend.)
|
||||
Options.AllowFPOpFusion = llvm::FPOpFusion::Standard;
|
||||
break;
|
||||
case LangOptions::FPC_On:
|
||||
Options.AllowFPOpFusion = llvm::FPOpFusion::Standard;
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// RUN: %clang_cc1 -O3 -triple=aarch64-apple-ios -S -o - %s | FileCheck %s
|
||||
// REQUIRES: aarch64-registered-target
|
||||
|
||||
float fma_test1(float a, float b, float c) {
|
||||
#pragma STDC FP_CONTRACT ON
|
||||
// CHECK-LABEL: fma_test1:
|
||||
// CHECK: fmadd
|
||||
float x = a * b + c;
|
||||
return x;
|
||||
}
|
||||
|
||||
float fma_test2(float a, float b, float c) {
|
||||
// CHECK-LABEL: fma_test2:
|
||||
// CHECK: fmul
|
||||
// CHECK: fadd
|
||||
float x = a * b + c;
|
||||
return x;
|
||||
}
|
Loading…
Reference in New Issue