32
32
#include " llvm/Target/TargetSubtargetInfo.h"
33
33
#endif
34
34
35
- #if LLVM_VERSION_GE(4, 0)
36
35
#include " llvm/Transforms/IPO/AlwaysInliner.h"
37
36
#include " llvm/Transforms/IPO/FunctionImport.h"
38
37
#include " llvm/Transforms/Utils/FunctionImportUtils.h"
39
38
#include " llvm/LTO/LTO.h"
40
39
#if LLVM_VERSION_LE(4, 0)
41
40
#include " llvm/Object/ModuleSummaryIndexObjectFile.h"
42
41
#endif
43
- #endif
44
42
45
43
#include " llvm-c/Transforms/PassManagerBuilder.h"
46
44
47
- #if LLVM_VERSION_GE(4, 0)
48
- #define PGO_AVAILABLE
49
- #endif
50
-
51
45
using namespace llvm ;
52
46
using namespace llvm ::legacy;
53
47
@@ -121,12 +115,8 @@ bool LLVMRustPassManagerBuilderPopulateThinLTOPassManager(
121
115
LLVMPassManagerBuilderRef PMBR,
122
116
LLVMPassManagerRef PMR
123
117
) {
124
- #if LLVM_VERSION_GE(4, 0)
125
118
unwrap (PMBR)->populateThinLTOPassManager (*unwrap (PMR));
126
119
return true ;
127
- #else
128
- return false ;
129
- #endif
130
120
}
131
121
132
122
#ifdef LLVM_COMPONENT_X86
@@ -288,17 +278,12 @@ static Optional<Reloc::Model> fromRust(LLVMRustRelocMode RustReloc) {
288
278
return Reloc::PIC_;
289
279
case LLVMRustRelocMode::DynamicNoPic:
290
280
return Reloc::DynamicNoPIC;
291
- #if LLVM_VERSION_GE(4, 0)
292
281
case LLVMRustRelocMode::ROPI:
293
282
return Reloc::ROPI;
294
283
case LLVMRustRelocMode::RWPI:
295
284
return Reloc::RWPI;
296
285
case LLVMRustRelocMode::ROPIRWPI:
297
286
return Reloc::ROPI_RWPI;
298
- #else
299
- default :
300
- break ;
301
- #endif
302
287
}
303
288
report_fatal_error (" Bad RelocModel." );
304
289
}
@@ -450,11 +435,8 @@ extern "C" void LLVMRustConfigurePassManagerBuilder(
450
435
unwrap (PMBR)->SLPVectorize = SLPVectorize;
451
436
unwrap (PMBR)->OptLevel = fromRust (OptLevel);
452
437
unwrap (PMBR)->LoopVectorize = LoopVectorize;
453
- #if LLVM_VERSION_GE(4, 0)
454
438
unwrap (PMBR)->PrepareForThinLTO = PrepareForThinLTO;
455
- #endif
456
439
457
- #ifdef PGO_AVAILABLE
458
440
if (PGOGenPath) {
459
441
assert (!PGOUsePath);
460
442
unwrap (PMBR)->EnablePGOInstrGen = true ;
@@ -464,9 +446,6 @@ extern "C" void LLVMRustConfigurePassManagerBuilder(
464
446
assert (!PGOGenPath);
465
447
unwrap (PMBR)->PGOInstrUse = PGOUsePath;
466
448
}
467
- #else
468
- assert (!PGOGenPath && !PGOUsePath && " Should've caught earlier" );
469
- #endif
470
449
}
471
450
472
451
// Unfortunately, the LLVM C API doesn't provide a way to set the `LibraryInfo`
@@ -716,7 +695,6 @@ extern "C" void LLVMRustPrintPasses() {
716
695
LLVMInitializePasses ();
717
696
struct MyListener : PassRegistrationListener {
718
697
void passEnumerate (const PassInfo *Info) {
719
- #if LLVM_VERSION_GE(4, 0)
720
698
StringRef PassArg = Info->getPassArgument ();
721
699
StringRef PassName = Info->getPassName ();
722
700
if (!PassArg.empty ()) {
@@ -726,11 +704,6 @@ extern "C" void LLVMRustPrintPasses() {
726
704
printf (" %15.*s - %.*s\n " , (int )PassArg.size (), PassArg.data (),
727
705
(int )PassName.size (), PassName.data ());
728
706
}
729
- #else
730
- if (Info->getPassArgument () && *Info->getPassArgument ()) {
731
- printf (" %15s - %s\n " , Info->getPassArgument (), Info->getPassName ());
732
- }
733
- #endif
734
707
}
735
708
} Listener;
736
709
@@ -740,11 +713,7 @@ extern "C" void LLVMRustPrintPasses() {
740
713
741
714
extern " C" void LLVMRustAddAlwaysInlinePass (LLVMPassManagerBuilderRef PMBR,
742
715
bool AddLifetimes) {
743
- #if LLVM_VERSION_GE(4, 0)
744
716
unwrap (PMBR)->Inliner = llvm::createAlwaysInlinerLegacyPass (AddLifetimes);
745
- #else
746
- unwrap (PMBR)->Inliner = createAlwaysInlinerPass (AddLifetimes);
747
- #endif
748
717
}
749
718
750
719
extern " C" void LLVMRustRunRestrictionPass (LLVMModuleRef M, char **Symbols,
@@ -795,26 +764,6 @@ extern "C" void LLVMRustSetModulePIELevel(LLVMModuleRef M) {
795
764
unwrap (M)->setPIELevel (PIELevel::Level::Large);
796
765
}
797
766
798
- extern " C" bool
799
- LLVMRustThinLTOAvailable () {
800
- #if LLVM_VERSION_GE(4, 0)
801
- return true ;
802
- #else
803
- return false ;
804
- #endif
805
- }
806
-
807
- extern " C" bool
808
- LLVMRustPGOAvailable () {
809
- #ifdef PGO_AVAILABLE
810
- return true ;
811
- #else
812
- return false ;
813
- #endif
814
- }
815
-
816
- #if LLVM_VERSION_GE(4, 0)
817
-
818
767
// Here you'll find an implementation of ThinLTO as used by the Rust compiler
819
768
// right now. This ThinLTO support is only enabled on "recent ish" versions of
820
769
// LLVM, and otherwise it's just blanket rejected from other compilers.
@@ -1276,94 +1225,3 @@ LLVMRustThinLTOPatchDICompileUnit(LLVMModuleRef Mod, DICompileUnit *Unit) {
1276
1225
MD->clearOperands ();
1277
1226
MD->addOperand (Unit);
1278
1227
}
1279
-
1280
- #else
1281
-
1282
- struct LLVMRustThinLTOData {
1283
- };
1284
-
1285
- struct LLVMRustThinLTOModule {
1286
- };
1287
-
1288
- extern " C" LLVMRustThinLTOData*
1289
- LLVMRustCreateThinLTOData (LLVMRustThinLTOModule *modules,
1290
- int num_modules,
1291
- const char **preserved_symbols,
1292
- int num_symbols) {
1293
- report_fatal_error (" ThinLTO not available" );
1294
- }
1295
-
1296
- extern " C" bool
1297
- LLVMRustPrepareThinLTORename (const LLVMRustThinLTOData *Data, LLVMModuleRef M) {
1298
- report_fatal_error (" ThinLTO not available" );
1299
- }
1300
-
1301
- extern " C" bool
1302
- LLVMRustPrepareThinLTOResolveWeak (const LLVMRustThinLTOData *Data, LLVMModuleRef M) {
1303
- report_fatal_error (" ThinLTO not available" );
1304
- }
1305
-
1306
- extern " C" bool
1307
- LLVMRustPrepareThinLTOInternalize (const LLVMRustThinLTOData *Data, LLVMModuleRef M) {
1308
- report_fatal_error (" ThinLTO not available" );
1309
- }
1310
-
1311
- extern " C" bool
1312
- LLVMRustPrepareThinLTOImport (const LLVMRustThinLTOData *Data, LLVMModuleRef M) {
1313
- report_fatal_error (" ThinLTO not available" );
1314
- }
1315
-
1316
- extern " C" LLVMRustThinLTOModuleImports
1317
- LLVMRustGetLLVMRustThinLTOModuleImports (const LLVMRustThinLTOData *Data) {
1318
- report_fatal_error (" ThinLTO not available" );
1319
- }
1320
-
1321
- extern " C" void
1322
- LLVMRustFreeThinLTOData (LLVMRustThinLTOData *Data) {
1323
- report_fatal_error (" ThinLTO not available" );
1324
- }
1325
-
1326
- struct LLVMRustThinLTOBuffer {
1327
- };
1328
-
1329
- extern " C" LLVMRustThinLTOBuffer*
1330
- LLVMRustThinLTOBufferCreate (LLVMModuleRef M) {
1331
- report_fatal_error (" ThinLTO not available" );
1332
- }
1333
-
1334
- extern " C" void
1335
- LLVMRustThinLTOBufferFree (LLVMRustThinLTOBuffer *Buffer) {
1336
- report_fatal_error (" ThinLTO not available" );
1337
- }
1338
-
1339
- extern " C" const void *
1340
- LLVMRustThinLTOBufferPtr (const LLVMRustThinLTOBuffer *Buffer) {
1341
- report_fatal_error (" ThinLTO not available" );
1342
- }
1343
-
1344
- extern " C" size_t
1345
- LLVMRustThinLTOBufferLen (const LLVMRustThinLTOBuffer *Buffer) {
1346
- report_fatal_error (" ThinLTO not available" );
1347
- }
1348
-
1349
- extern " C" LLVMModuleRef
1350
- LLVMRustParseBitcodeForThinLTO (LLVMContextRef Context,
1351
- const char *data,
1352
- size_t len,
1353
- const char *identifier) {
1354
- report_fatal_error (" ThinLTO not available" );
1355
- }
1356
-
1357
- extern " C" void
1358
- LLVMRustThinLTOGetDICompileUnit (LLVMModuleRef Mod,
1359
- DICompileUnit **A,
1360
- DICompileUnit **B) {
1361
- report_fatal_error (" ThinLTO not available" );
1362
- }
1363
-
1364
- extern " C" void
1365
- LLVMRustThinLTOPatchDICompileUnit (LLVMModuleRef Mod) {
1366
- report_fatal_error (" ThinLTO not available" );
1367
- }
1368
-
1369
- #endif // LLVM_VERSION_GE(4, 0)
0 commit comments