Skip to content

Commit 3257dc3

Browse files
authored
[ARM] Remove UnsafeFPMath uses in code generation part (#160801)
Factor out from #151275 Remove all UnsafeFPMath uses but ABI tags related part.
1 parent 8cd917b commit 3257dc3

File tree

4 files changed

+45
-21
lines changed

4 files changed

+45
-21
lines changed

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5573,7 +5573,7 @@ static void expandf64Toi32(SDValue Op, SelectionDAG &DAG,
55735573
llvm_unreachable("Unknown VFP cmp argument!");
55745574
}
55755575

5576-
/// OptimizeVFPBrcond - With nnan, it's legal to optimize some
5576+
/// OptimizeVFPBrcond - With nnan and without daz, it's legal to optimize some
55775577
/// f32 and even f64 comparisons to integer ones.
55785578
SDValue
55795579
ARMTargetLowering::OptimizeVFPBrcond(SDValue Op, SelectionDAG &DAG) const {
@@ -5729,9 +5729,9 @@ SDValue ARMTargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
57295729
}
57305730

57315731
SDNodeFlags Flags = Op->getFlags();
5732-
if ((getTargetMachine().Options.UnsafeFPMath || Flags.hasNoNaNs()) &&
5733-
(DAG.getDenormalMode(MVT::f32) == DenormalMode::getIEEE() &&
5734-
DAG.getDenormalMode(MVT::f64) == DenormalMode::getIEEE()) &&
5732+
if (Flags.hasNoNaNs() &&
5733+
DAG.getDenormalMode(MVT::f32) == DenormalMode::getIEEE() &&
5734+
DAG.getDenormalMode(MVT::f64) == DenormalMode::getIEEE() &&
57355735
(CC == ISD::SETEQ || CC == ISD::SETOEQ || CC == ISD::SETNE ||
57365736
CC == ISD::SETUNE)) {
57375737
if (SDValue Result = OptimizeVFPBrcond(Op, DAG))

llvm/lib/Target/ARM/ARMSubtarget.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,7 @@ void ARMSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
222222
// NEON f32 ops are non-IEEE 754 compliant. Darwin is ok with it by default.
223223
const FeatureBitset &Bits = getFeatureBits();
224224
if ((Bits[ARM::ProcA5] || Bits[ARM::ProcA8]) && // Where this matters
225-
(Options.UnsafeFPMath || isTargetDarwin() ||
226-
DM == DenormalMode::getPreserveSign()))
225+
(isTargetDarwin() || DM == DenormalMode::getPreserveSign()))
227226
HasNEONForFP = true;
228227

229228
if (isRWPI())

llvm/test/CodeGen/ARM/fnegs.ll

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 %s -o - \
1111
; RUN: | FileCheck %s -check-prefix=CORTEXA8
1212

13-
; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 --enable-unsafe-fp-math %s -o - \
13+
; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 --denormal-fp-math=preserve-sign %s -o - \
1414
; RUN: | FileCheck %s -check-prefix=CORTEXA8U
1515

1616
; RUN: llc -mtriple=arm-darwin -mcpu=cortex-a8 %s -o - \
17-
; RUN: | FileCheck %s -check-prefix=CORTEXA8U
17+
; RUN: | FileCheck %s -check-prefix=CORTEXA8U-DARWIN
1818

1919
; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a9 %s -o - \
2020
; RUN: | FileCheck %s -check-prefix=CORTEXA9
@@ -41,7 +41,10 @@ entry:
4141
; CORTEXA8: vneg.f32 s{{.*}}, s{{.*}}
4242

4343
; CORTEXA8U-LABEL: test1:
44-
; CORTEXA8U: vneg.f32 d{{.*}}, d{{.*}}
44+
; CORTEXA8U: vsub.f32 d{{.*}}, d{{.*}}, d{{.*}}
45+
46+
; CORTEXA8U-DARWIN-LABEL: test1:
47+
; CORTEXA8U-DARWIN: vneg.f32 d{{.*}}, d{{.*}}
4548

4649
; CORTEXA9-LABEL: test1:
4750
; CORTEXA9: vneg.f32 s{{.*}}, s{{.*}}
@@ -110,9 +113,13 @@ define <2 x float> @fneg_bitcast(i64 %i) {
110113
; CORTEXA8-NOT: vneg.f32
111114

112115
; CORTEXA8U-LABEL: fneg_bitcast:
113-
; CORTEXA8U-DAG: eor r0, r0, #-2147483648
114-
; CORTEXA8U-DAG: eor r1, r1, #-2147483648
115-
; CORTEXA8U-NOT: vneg.f32
116+
; CORTEXA8U-DAG: vmov.i32 d{{.*}}, #0x80000000
117+
; CORTEXA8U-DAG: vsub.f32 d{{.*}}, d{{.*}}, d{{.*}}
118+
119+
; CORTEXA8U-DARWIN-LABEL: fneg_bitcast:
120+
; CORTEXA8U-DARWIN-DAG: eor r0, r0, #-2147483648
121+
; CORTEXA8U-DARWIN-DAG: eor r1, r1, #-2147483648
122+
; CORTEXA8U-DARWIN-NOT: vneg.f32
116123

117124
; CORTEXA9-LABEL: fneg_bitcast:
118125
; CORTEXA9-DAG: eor r0, r0, #-2147483648

llvm/test/CodeGen/ARM/fnmscs.ll

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 -regalloc=basic %s -o - \
1414
; RUN: | FileCheck %s -check-prefix=A8
1515

16-
; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 --enable-unsafe-fp-math %s -o - \
16+
; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 --denormal-fp-math=preserve-sign %s -o - \
1717
; RUN: | FileCheck %s -check-prefix=A8U
1818

1919
; RUN: llc -mtriple=arm-darwin -mcpu=cortex-a8 %s -o - \
20-
; RUN: | FileCheck %s -check-prefix=A8U
20+
; RUN: | FileCheck %s -check-prefix=A8U-DARWIN
2121

2222
define float @t1(float %acc, float %a, float %b) nounwind {
2323
entry:
@@ -31,15 +31,20 @@ entry:
3131
; NEON: vnmla.f32
3232

3333
; A8U-LABEL: t1:
34-
; A8U: vnmul.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}}
35-
; A8U: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}}
34+
; A8U: vmov.i32 d{{[0-9]+}}, #0x80000000
35+
; A8U: vsub.f32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}
36+
; A8U: vsub.f32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}
37+
38+
; A8U-DARWIN-LABEL: t1:
39+
; A8U-DARWIN: vnmul.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}}
40+
; A8U-DARWIN: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}}
3641

3742
; A8-LABEL: t1:
3843
; A8: vnmul.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}}
3944
; A8: vsub.f32 s{{[0-9]}}, s{{[0-9]}}, s{{[0-9]}}
4045
%0 = fmul float %a, %b
4146
%1 = fsub float -0.0, %0
42-
%2 = fsub float %1, %acc
47+
%2 = fsub float %1, %acc
4348
ret float %2
4449
}
4550

@@ -55,8 +60,13 @@ entry:
5560
; NEON: vnmla.f32
5661

5762
; A8U-LABEL: t2:
58-
; A8U: vnmul.f32 s{{[01234]}}, s{{[01234]}}, s{{[01234]}}
59-
; A8U: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}}
63+
; A8U: vmov.i32 d{{[0-9]+}}, #0x80000000
64+
; A8U: vsub.f32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}
65+
; A8U: vsub.f32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}
66+
67+
; A8U-DARWIN-LABEL: t2:
68+
; A8U-DARWIN: vnmul.f32 s{{[01234]}}, s{{[01234]}}, s{{[01234]}}
69+
; A8U-DARWIN: vsub.f32 d{{[0-9]}}, d{{[0-9]}}, d{{[0-9]}}
6070

6171
; A8-LABEL: t2:
6272
; A8: vnmul.f32 s{{[01234]}}, s{{[01234]}}, s{{[01234]}}
@@ -79,8 +89,12 @@ entry:
7989
; NEON: vnmla.f64
8090

8191
; A8U-LABEL: t3:
82-
; A8U: vnmul.f64 d
8392
; A8U: vsub.f64 d
93+
; A8U: vsub.f64 d
94+
95+
; A8U-DARWIN-LABEL: t3:
96+
; A8U-DARWIN: vnmul.f64 d
97+
; A8U-DARWIN: vsub.f64 d
8498

8599
; A8-LABEL: t3:
86100
; A8: vnmul.f64 d
@@ -103,8 +117,12 @@ entry:
103117
; NEON: vnmla.f64
104118

105119
; A8U-LABEL: t4:
106-
; A8U: vnmul.f64 d
107120
; A8U: vsub.f64 d
121+
; A8U: vsub.f64 d
122+
123+
; A8U-DARWIN-LABEL: t4:
124+
; A8U-DARWIN: vnmul.f64 d
125+
; A8U-DARWIN: vsub.f64 d
108126

109127
; A8-LABEL: t4:
110128
; A8: vnmul.f64 d

0 commit comments

Comments
 (0)