3232#include " llvm/Target/TargetSubtargetInfo.h"
3333#endif
3434
35- #if LLVM_VERSION_GE(4, 0)
3635#include " llvm/Transforms/IPO/AlwaysInliner.h"
3736#include " llvm/Transforms/IPO/FunctionImport.h"
3837#include " llvm/Transforms/Utils/FunctionImportUtils.h"
3938#include " llvm/LTO/LTO.h"
4039#if LLVM_VERSION_LE(4, 0)
4140#include " llvm/Object/ModuleSummaryIndexObjectFile.h"
4241#endif
43- #endif
4442
4543#include " llvm-c/Transforms/PassManagerBuilder.h"
4644
47- #if LLVM_VERSION_GE(4, 0)
48- #define PGO_AVAILABLE
49- #endif
50-
5145using namespace llvm ;
5246using namespace llvm ::legacy;
5347
@@ -121,12 +115,8 @@ bool LLVMRustPassManagerBuilderPopulateThinLTOPassManager(
121115 LLVMPassManagerBuilderRef PMBR,
122116 LLVMPassManagerRef PMR
123117) {
124- #if LLVM_VERSION_GE(4, 0)
125118 unwrap (PMBR)->populateThinLTOPassManager (*unwrap (PMR));
126119 return true ;
127- #else
128- return false ;
129- #endif
130120}
131121
132122#ifdef LLVM_COMPONENT_X86
@@ -288,17 +278,12 @@ static Optional<Reloc::Model> fromRust(LLVMRustRelocMode RustReloc) {
288278 return Reloc::PIC_;
289279 case LLVMRustRelocMode::DynamicNoPic:
290280 return Reloc::DynamicNoPIC;
291- #if LLVM_VERSION_GE(4, 0)
292281 case LLVMRustRelocMode::ROPI:
293282 return Reloc::ROPI;
294283 case LLVMRustRelocMode::RWPI:
295284 return Reloc::RWPI;
296285 case LLVMRustRelocMode::ROPIRWPI:
297286 return Reloc::ROPI_RWPI;
298- #else
299- default :
300- break ;
301- #endif
302287 }
303288 report_fatal_error (" Bad RelocModel." );
304289}
@@ -450,11 +435,8 @@ extern "C" void LLVMRustConfigurePassManagerBuilder(
450435 unwrap (PMBR)->SLPVectorize = SLPVectorize;
451436 unwrap (PMBR)->OptLevel = fromRust (OptLevel);
452437 unwrap (PMBR)->LoopVectorize = LoopVectorize;
453- #if LLVM_VERSION_GE(4, 0)
454438 unwrap (PMBR)->PrepareForThinLTO = PrepareForThinLTO;
455- #endif
456439
457- #ifdef PGO_AVAILABLE
458440 if (PGOGenPath) {
459441 assert (!PGOUsePath);
460442 unwrap (PMBR)->EnablePGOInstrGen = true ;
@@ -464,9 +446,6 @@ extern "C" void LLVMRustConfigurePassManagerBuilder(
464446 assert (!PGOGenPath);
465447 unwrap (PMBR)->PGOInstrUse = PGOUsePath;
466448 }
467- #else
468- assert (!PGOGenPath && !PGOUsePath && " Should've caught earlier" );
469- #endif
470449}
471450
472451// Unfortunately, the LLVM C API doesn't provide a way to set the `LibraryInfo`
@@ -716,7 +695,6 @@ extern "C" void LLVMRustPrintPasses() {
716695 LLVMInitializePasses ();
717696 struct MyListener : PassRegistrationListener {
718697 void passEnumerate (const PassInfo *Info) {
719- #if LLVM_VERSION_GE(4, 0)
720698 StringRef PassArg = Info->getPassArgument ();
721699 StringRef PassName = Info->getPassName ();
722700 if (!PassArg.empty ()) {
@@ -726,11 +704,6 @@ extern "C" void LLVMRustPrintPasses() {
726704 printf (" %15.*s - %.*s\n " , (int )PassArg.size (), PassArg.data (),
727705 (int )PassName.size (), PassName.data ());
728706 }
729- #else
730- if (Info->getPassArgument () && *Info->getPassArgument ()) {
731- printf (" %15s - %s\n " , Info->getPassArgument (), Info->getPassName ());
732- }
733- #endif
734707 }
735708 } Listener;
736709
@@ -740,11 +713,7 @@ extern "C" void LLVMRustPrintPasses() {
740713
741714extern " C" void LLVMRustAddAlwaysInlinePass (LLVMPassManagerBuilderRef PMBR,
742715 bool AddLifetimes) {
743- #if LLVM_VERSION_GE(4, 0)
744716 unwrap (PMBR)->Inliner = llvm::createAlwaysInlinerLegacyPass (AddLifetimes);
745- #else
746- unwrap (PMBR)->Inliner = createAlwaysInlinerPass (AddLifetimes);
747- #endif
748717}
749718
750719extern " C" void LLVMRustRunRestrictionPass (LLVMModuleRef M, char **Symbols,
@@ -795,26 +764,6 @@ extern "C" void LLVMRustSetModulePIELevel(LLVMModuleRef M) {
795764 unwrap (M)->setPIELevel (PIELevel::Level::Large);
796765}
797766
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-
818767// Here you'll find an implementation of ThinLTO as used by the Rust compiler
819768// right now. This ThinLTO support is only enabled on "recent ish" versions of
820769// LLVM, and otherwise it's just blanket rejected from other compilers.
@@ -1276,94 +1225,3 @@ LLVMRustThinLTOPatchDICompileUnit(LLVMModuleRef Mod, DICompileUnit *Unit) {
12761225 MD->clearOperands ();
12771226 MD->addOperand (Unit);
12781227}
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