Skip to content

Commit 9143981

Browse files
authored
ARM: Avoid using isTarget wrappers around Triple predicates (#144705)
These are module level properties, and querying them through a function-level subtarget context is confusing. Plus we don't need an aliased name. This doesn't avoid all the uses, just the ones in the TargetLowering constructor.
1 parent 6001a8b commit 9143981

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,9 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
515515
setBooleanContents(ZeroOrOneBooleanContent);
516516
setBooleanVectorContents(ZeroOrNegativeOneBooleanContent);
517517

518-
if (Subtarget->isTargetMachO()) {
518+
const Triple &TT = TM.getTargetTriple();
519+
520+
if (TT.isOSBinFormatMachO()) {
519521
// Uses VFP for Thumb libfuncs if available.
520522
if (Subtarget->isThumb() && Subtarget->hasVFP2Base() &&
521523
Subtarget->hasARMOps() && !Subtarget->useSoftFloat()) {
@@ -588,9 +590,8 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
588590
}
589591

590592
// RTLIB
591-
if (TM.isAAPCS_ABI() &&
592-
(Subtarget->isTargetAEABI() || Subtarget->isTargetGNUAEABI() ||
593-
Subtarget->isTargetMuslAEABI() || Subtarget->isTargetAndroid())) {
593+
if (TM.isAAPCS_ABI() && (TT.isTargetAEABI() || TT.isTargetGNUAEABI() ||
594+
TT.isTargetMuslAEABI() || TT.isAndroid())) {
594595
// clang-format off
595596
static const struct {
596597
const RTLIB::Libcall Op;
@@ -712,7 +713,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
712713
// The half <-> float conversion functions are always soft-float on
713714
// non-watchos platforms, but are needed for some targets which use a
714715
// hard-float calling convention by default.
715-
if (!Subtarget->isTargetWatchABI()) {
716+
if (!TT.isWatchABI()) {
716717
if (TM.isAAPCS_ABI()) {
717718
setLibcallCallingConv(RTLIB::FPROUND_F32_F16, CallingConv::ARM_AAPCS);
718719
setLibcallCallingConv(RTLIB::FPROUND_F64_F16, CallingConv::ARM_AAPCS);
@@ -726,7 +727,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
726727

727728
// In EABI, these functions have an __aeabi_ prefix, but in GNUEABI they have
728729
// a __gnu_ prefix (which is the default).
729-
if (Subtarget->isTargetAEABI()) {
730+
if (TT.isTargetAEABI()) {
730731
static const struct {
731732
const RTLIB::Libcall Op;
732733
const char * const Name;
@@ -741,7 +742,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
741742
setLibcallName(LC.Op, LC.Name);
742743
setLibcallCallingConv(LC.Op, LC.CC);
743744
}
744-
} else if (!Subtarget->isTargetMachO()) {
745+
} else if (!TT.isOSBinFormatMachO()) {
745746
setLibcallName(RTLIB::FPROUND_F32_F16, "__gnu_f2h_ieee");
746747
setLibcallName(RTLIB::FPEXT_F16_F32, "__gnu_h2f_ieee");
747748
}
@@ -1227,7 +1228,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
12271228
setOperationAction(ISD::UDIV, MVT::i32, LibCall);
12281229
}
12291230

1230-
if (Subtarget->isTargetWindows() && !Subtarget->hasDivideInThumbMode()) {
1231+
if (TT.isOSWindows() && !Subtarget->hasDivideInThumbMode()) {
12311232
setOperationAction(ISD::SDIV, MVT::i32, Custom);
12321233
setOperationAction(ISD::UDIV, MVT::i32, Custom);
12331234

@@ -1239,9 +1240,8 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
12391240
setOperationAction(ISD::UREM, MVT::i32, Expand);
12401241

12411242
// Register based DivRem for AEABI (RTABI 4.2)
1242-
if (Subtarget->isTargetAEABI() || Subtarget->isTargetAndroid() ||
1243-
Subtarget->isTargetGNUAEABI() || Subtarget->isTargetMuslAEABI() ||
1244-
Subtarget->isTargetWindows()) {
1243+
if (TT.isTargetAEABI() || TT.isAndroid() || TT.isTargetGNUAEABI() ||
1244+
TT.isTargetMuslAEABI() || TT.isOSWindows()) {
12451245
setOperationAction(ISD::SREM, MVT::i64, Custom);
12461246
setOperationAction(ISD::UREM, MVT::i64, Custom);
12471247
HasStandaloneRem = false;
@@ -1271,7 +1271,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
12711271
setOperationAction(ISD::STACKSAVE, MVT::Other, Expand);
12721272
setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
12731273

1274-
if (Subtarget->isTargetWindows())
1274+
if (TT.isOSWindows())
12751275
setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i32, Custom);
12761276
else
12771277
setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i32, Expand);
@@ -1326,8 +1326,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
13261326
}
13271327

13281328
// Compute supported atomic widths.
1329-
if (Subtarget->isTargetLinux() ||
1330-
(!Subtarget->isMClass() && Subtarget->hasV6Ops())) {
1329+
if (TT.isOSLinux() || (!Subtarget->isMClass() && Subtarget->hasV6Ops())) {
13311330
// For targets where __sync_* routines are reliably available, we use them
13321331
// if necessary.
13331332
//
@@ -1538,7 +1537,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
15381537

15391538
// On MSVC, both 32-bit and 64-bit, ldexpf(f32) is not defined. MinGW has
15401539
// it, but it's just a wrapper around ldexp.
1541-
if (Subtarget->isTargetWindows()) {
1540+
if (TT.isOSWindows()) {
15421541
for (ISD::NodeType Op : {ISD::FLDEXP, ISD::STRICT_FLDEXP, ISD::FFREXP})
15431542
if (isOperationExpand(Op, MVT::f32))
15441543
setOperationAction(Op, MVT::f32, Promote);

llvm/lib/Target/ARM/ARMSubtarget.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,9 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
334334

335335
const Triple &getTargetTriple() const { return TargetTriple; }
336336

337+
/// @{
338+
/// These properties are per-module, please use the TargetMachine
339+
/// TargetTriple.
337340
bool isTargetDarwin() const { return TargetTriple.isOSDarwin(); }
338341
bool isTargetIOS() const { return TargetTriple.isiOS(); }
339342
bool isTargetWatchOS() const { return TargetTriple.isWatchOS(); }
@@ -359,6 +362,7 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
359362
bool isTargetEHABICompatible() const {
360363
return TargetTriple.isTargetEHABICompatible();
361364
}
365+
/// @}
362366

363367
bool isReadTPSoft() const {
364368
return !(isReadTPTPIDRURW() || isReadTPTPIDRURO() || isReadTPTPIDRPRW());

0 commit comments

Comments
 (0)