Skip to content

Commit 63a9197

Browse files
committed
Remove v1f64
If we set v1f64 as legal, FMINNUM/FMAXNUM will have some problem: both of them use `if (isOperationLegalOrCustom(FMAXNUM_IEEE, VT))`. AArch64 depends on `expandFMINNUM_FMAXNUM` returning `SDValue()` for FMAXNUM and FMINNUM. We should fix this problem, while it will be in future patch.
1 parent 85d0e5d commit 63a9197

File tree

3 files changed

+5
-31
lines changed

3 files changed

+5
-31
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,6 +1196,7 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
11961196
ISD::FEXP10, ISD::FRINT, ISD::FROUND,
11971197
ISD::FROUNDEVEN, ISD::FTRUNC, ISD::FMINNUM,
11981198
ISD::FMAXNUM, ISD::FMINIMUM, ISD::FMAXIMUM,
1199+
ISD::FMAXNUM_IEEE, ISD::FMINNUM_IEEE,
11991200
ISD::STRICT_FADD, ISD::STRICT_FSUB, ISD::STRICT_FMUL,
12001201
ISD::STRICT_FDIV, ISD::STRICT_FMA, ISD::STRICT_FCEIL,
12011202
ISD::STRICT_FFLOOR, ISD::STRICT_FSQRT, ISD::STRICT_FRINT,
@@ -1205,9 +1206,6 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
12051206
setOperationAction(Op, MVT::v1f64, Expand);
12061207
// clang-format on
12071208

1208-
for (auto Op : {ISD::FMAXNUM_IEEE, ISD::FMINNUM_IEEE})
1209-
setOperationAction(Op, MVT::v1f64, Legal);
1210-
12111209
for (auto Op :
12121210
{ISD::FP_TO_SINT, ISD::FP_TO_UINT, ISD::SINT_TO_FP, ISD::UINT_TO_FP,
12131211
ISD::FP_ROUND, ISD::FP_TO_SINT_SAT, ISD::FP_TO_UINT_SAT, ISD::MUL,
@@ -1938,10 +1936,10 @@ void AArch64TargetLowering::addTypeForNEON(MVT VT) {
19381936
(VT.getVectorElementType() != MVT::f16 || Subtarget->hasFullFP16()))
19391937
for (unsigned Opcode :
19401938
{ISD::FMINIMUM, ISD::FMAXIMUM, ISD::FMINNUM, ISD::FMAXNUM,
1941-
ISD::STRICT_FMINIMUM, ISD::STRICT_FMAXIMUM, ISD::STRICT_FMINNUM,
1942-
ISD::STRICT_FMAXNUM, ISD::STRICT_FADD, ISD::STRICT_FSUB,
1943-
ISD::STRICT_FMUL, ISD::STRICT_FDIV, ISD::STRICT_FMA,
1944-
ISD::STRICT_FSQRT})
1939+
ISD::FMINNUM_IEEE, ISD::FMAXNUM_IEEE, ISD::STRICT_FMINIMUM,
1940+
ISD::STRICT_FMAXIMUM, ISD::STRICT_FMINNUM, ISD::STRICT_FMAXNUM,
1941+
ISD::STRICT_FADD, ISD::STRICT_FSUB, ISD::STRICT_FMUL,
1942+
ISD::STRICT_FDIV, ISD::STRICT_FMA, ISD::STRICT_FSQRT})
19451943
setOperationAction(Opcode, VT, Legal);
19461944

19471945
// Strict fp extend and trunc are legal

llvm/lib/Target/AArch64/AArch64InstrInfo.td

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5071,10 +5071,6 @@ def : Pat<(v1f64 (fmaxnum (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
50715071
def : Pat<(v1f64 (fminnum (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
50725072
(FMINNMDrr FPR64:$Rn, FPR64:$Rm)>;
50735073

5074-
def : Pat<(v1f64 (fmaxnum_ieee (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
5075-
(FMAXNMDrr FPR64:$Rn, FPR64:$Rm)>;
5076-
def : Pat<(v1f64 (fminnum_ieee (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
5077-
(FMINNMDrr FPR64:$Rn, FPR64:$Rm)>;
50785074
def : Pat<(fminnum_ieee (f64 FPR64:$a), (f64 FPR64:$b)),
50795075
(FMINNMDrr FPR64:$a, FPR64:$b)>;
50805076
def : Pat<(fminnum_ieee (f32 FPR32:$a), (f32 FPR32:$b)),

llvm/test/CodeGen/AArch64/fp-maximumnum-minimumnum.ll

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,6 @@ entry:
3232
ret <8 x half> %c
3333
}
3434

35-
define <1 x double> @max_v1f64(<1 x double> %a, <1 x double> %b) {
36-
; AARCH64-LABEL: max_v1f64:
37-
; AARCH64: // %bb.0: // %entry
38-
; AARCH64-NEXT: fmaxnm d0, d0, d1
39-
; AARCH64-NEXT: ret
40-
entry:
41-
%c = call nnan <1 x double> @llvm.maximumnum.v1f64(<1 x double> %a, <1 x double> %b)
42-
ret <1 x double> %c
43-
}
44-
4535
define double @max_f64(double %a, double %b) {
4636
; AARCH64-LABEL: max_f64:
4737
; AARCH64: // %bb.0: // %entry
@@ -103,16 +93,6 @@ entry:
10393
ret <8 x half> %c
10494
}
10595

106-
define <1 x double> @min_v1f64(<1 x double> %a, <1 x double> %b) {
107-
; AARCH64-LABEL: min_v1f64:
108-
; AARCH64: // %bb.0: // %entry
109-
; AARCH64-NEXT: fminnm d0, d0, d1
110-
; AARCH64-NEXT: ret
111-
entry:
112-
%c = call nnan <1 x double> @llvm.minimumnum.v1f64(<1 x double> %a, <1 x double> %b)
113-
ret <1 x double> %c
114-
}
115-
11696
define double @min_f64(double %a, double %b) {
11797
; AARCH64-LABEL: min_f64:
11898
; AARCH64: // %bb.0: // %entry

0 commit comments

Comments
 (0)