Skip to content

Commit 80c25da

Browse files
authored
[TargetParser] Expose Triple::getArchPointerBitWidth. (#82086)
The getArchPointerBitWidth method provides direct access to the pointer size for arithmetic or switch statements, instead of requiring clients to use the isArch16Bit / isArch32Bit / isArch64Bit predicates.
1 parent f81f7a5 commit 80c25da

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

llvm/include/llvm/TargetParser/Triple.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,14 @@ class Triple {
451451
/// @name Convenience Predicates
452452
/// @{
453453

454+
/// Returns the pointer width of this architecture.
455+
static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch);
456+
457+
/// Returns the pointer width of this architecture.
458+
unsigned getArchPointerBitWidth() const {
459+
return getArchPointerBitWidth(getArch());
460+
}
461+
454462
/// Test whether the architecture is 64-bit
455463
///
456464
/// Note that this tests for 64-bit pointer width, and nothing else. Note

llvm/lib/TargetParser/Triple.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@ void Triple::setOSAndEnvironmentName(StringRef Str) {
14581458
setTriple(getArchName() + "-" + getVendorName() + "-" + Str);
14591459
}
14601460

1461-
static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) {
1461+
unsigned Triple::getArchPointerBitWidth(llvm::Triple::ArchType Arch) {
14621462
switch (Arch) {
14631463
case llvm::Triple::UnknownArch:
14641464
return 0;

llvm/unittests/TargetParser/TripleTest.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1205,86 +1205,102 @@ TEST(TripleTest, MutateName) {
12051205
EXPECT_EQ("i386-pc-darwin", T.getTriple());
12061206
}
12071207

1208-
TEST(TripleTest, BitWidthPredicates) {
1208+
TEST(TripleTest, BitWidthChecks) {
12091209
Triple T;
12101210
EXPECT_FALSE(T.isArch16Bit());
12111211
EXPECT_FALSE(T.isArch32Bit());
12121212
EXPECT_FALSE(T.isArch64Bit());
1213+
EXPECT_EQ(T.getArchPointerBitWidth(), 0U);
12131214

12141215
T.setArch(Triple::arm);
12151216
EXPECT_FALSE(T.isArch16Bit());
12161217
EXPECT_TRUE(T.isArch32Bit());
12171218
EXPECT_FALSE(T.isArch64Bit());
1219+
EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
12181220

12191221
T.setArch(Triple::hexagon);
12201222
EXPECT_FALSE(T.isArch16Bit());
12211223
EXPECT_TRUE(T.isArch32Bit());
12221224
EXPECT_FALSE(T.isArch64Bit());
1225+
EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
12231226

12241227
T.setArch(Triple::mips);
12251228
EXPECT_FALSE(T.isArch16Bit());
12261229
EXPECT_TRUE(T.isArch32Bit());
12271230
EXPECT_FALSE(T.isArch64Bit());
1231+
EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
12281232

12291233
T.setArch(Triple::mips64);
12301234
EXPECT_FALSE(T.isArch16Bit());
12311235
EXPECT_FALSE(T.isArch32Bit());
12321236
EXPECT_TRUE(T.isArch64Bit());
1237+
EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
12331238

12341239
T.setArch(Triple::msp430);
12351240
EXPECT_TRUE(T.isArch16Bit());
12361241
EXPECT_FALSE(T.isArch32Bit());
12371242
EXPECT_FALSE(T.isArch64Bit());
1243+
EXPECT_EQ(T.getArchPointerBitWidth(), 16U);
12381244

12391245
T.setArch(Triple::ppc);
12401246
EXPECT_FALSE(T.isArch16Bit());
12411247
EXPECT_TRUE(T.isArch32Bit());
12421248
EXPECT_FALSE(T.isArch64Bit());
1249+
EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
12431250

12441251
T.setArch(Triple::ppc64);
12451252
EXPECT_FALSE(T.isArch16Bit());
12461253
EXPECT_FALSE(T.isArch32Bit());
12471254
EXPECT_TRUE(T.isArch64Bit());
1255+
EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
12481256

12491257
T.setArch(Triple::x86);
12501258
EXPECT_FALSE(T.isArch16Bit());
12511259
EXPECT_TRUE(T.isArch32Bit());
12521260
EXPECT_FALSE(T.isArch64Bit());
1261+
EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
12531262

12541263
T.setArch(Triple::x86_64);
12551264
EXPECT_FALSE(T.isArch16Bit());
12561265
EXPECT_FALSE(T.isArch32Bit());
12571266
EXPECT_TRUE(T.isArch64Bit());
1267+
EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
12581268

12591269
T.setArch(Triple::amdil);
12601270
EXPECT_FALSE(T.isArch16Bit());
12611271
EXPECT_TRUE(T.isArch32Bit());
12621272
EXPECT_FALSE(T.isArch64Bit());
1273+
EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
12631274

12641275
T.setArch(Triple::amdil64);
12651276
EXPECT_FALSE(T.isArch16Bit());
12661277
EXPECT_FALSE(T.isArch32Bit());
12671278
EXPECT_TRUE(T.isArch64Bit());
1279+
EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
12681280

12691281
T.setArch(Triple::hsail);
12701282
EXPECT_FALSE(T.isArch16Bit());
12711283
EXPECT_TRUE(T.isArch32Bit());
12721284
EXPECT_FALSE(T.isArch64Bit());
1285+
EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
12731286

12741287
T.setArch(Triple::hsail64);
12751288
EXPECT_FALSE(T.isArch16Bit());
12761289
EXPECT_FALSE(T.isArch32Bit());
12771290
EXPECT_TRUE(T.isArch64Bit());
1291+
EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
12781292

12791293
T.setArch(Triple::spir);
12801294
EXPECT_FALSE(T.isArch16Bit());
12811295
EXPECT_TRUE(T.isArch32Bit());
12821296
EXPECT_FALSE(T.isArch64Bit());
1297+
EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
12831298

12841299
T.setArch(Triple::spir64);
12851300
EXPECT_FALSE(T.isArch16Bit());
12861301
EXPECT_FALSE(T.isArch32Bit());
12871302
EXPECT_TRUE(T.isArch64Bit());
1303+
EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
12881304

12891305
T.setArch(Triple::spirv);
12901306
EXPECT_FALSE(T.isArch16Bit());

0 commit comments

Comments
 (0)