Update rust to build with newer llvm versions.

This commit is contained in:
Rafael Ávila de Espíndola 2011-05-24 13:47:27 -04:00
parent d360c481e8
commit 698022d351
5 changed files with 27 additions and 16 deletions

View File

@ -153,7 +153,6 @@ mod write {
True, // unit-at-a-time True, // unit-at-a-time
True, // unroll loops True, // unroll loops
True, // simplify lib calls True, // simplify lib calls
True, // have exceptions
threshold); // inline threshold threshold); // inline threshold
} }

View File

@ -88,6 +88,7 @@ const uint LLVMNoImplicitFloatAttribute = 8388608u;
const uint LLVMNakedAttribute = 16777216u; const uint LLVMNakedAttribute = 16777216u;
const uint LLVMInlineHintAttribute = 33554432u; const uint LLVMInlineHintAttribute = 33554432u;
const uint LLVMStackAttribute = 469762048u; // 7 << 26 const uint LLVMStackAttribute = 469762048u; // 7 << 26
const uint LLVMUWTableAttribute = 1073741824u; // 1 << 30
// Consts for the LLVM IntPredicate type, pre-cast to uint. // Consts for the LLVM IntPredicate type, pre-cast to uint.
@ -813,7 +814,6 @@ native mod llvm = llvm_lib {
Bool UnitAtATime, Bool UnitAtATime,
Bool UnrollLoops, Bool UnrollLoops,
Bool SimplifyLibCalls, Bool SimplifyLibCalls,
Bool HaveExceptions,
uint InliningThreshold); uint InliningThreshold);
/** Destroys a memory buffer. */ /** Destroys a memory buffer. */

View File

@ -1820,6 +1820,11 @@ fn set_no_inline(ValueRef f) {
lib::llvm::llvm::Attribute); lib::llvm::llvm::Attribute);
} }
fn set_uwtable(ValueRef f) {
llvm::LLVMAddFunctionAttr(f, lib::llvm::LLVMUWTableAttribute as
lib::llvm::llvm::Attribute);
}
fn set_always_inline(ValueRef f) { fn set_always_inline(ValueRef f) {
llvm::LLVMAddFunctionAttr(f, lib::llvm::LLVMAlwaysInlineAttribute as llvm::LLVMAddFunctionAttr(f, lib::llvm::LLVMAlwaysInlineAttribute as
lib::llvm::llvm::Attribute); lib::llvm::llvm::Attribute);
@ -6962,6 +6967,7 @@ fn trans_fn(@local_ctxt cx, &span sp, &ast::_fn f, ast::def_id fid,
option::t[ty_self_pair] ty_self, option::t[ty_self_pair] ty_self,
&vec[ast::ty_param] ty_params, &ast::ann ann) { &vec[ast::ty_param] ty_params, &ast::ann ann) {
auto llfndecl = cx.ccx.item_ids.get(fid); auto llfndecl = cx.ccx.item_ids.get(fid);
set_uwtable(llfndecl);
// Set up arguments to the function. // Set up arguments to the function.
auto fcx = new_fn_ctxt(cx, sp, llfndecl); auto fcx = new_fn_ctxt(cx, sp, llfndecl);

View File

@ -1,5 +1,5 @@
#include "llvm/Analysis/Passes.h" #include "llvm/Analysis/Passes.h"
#include "llvm/Support/StandardPasses.h" #include "llvm/Support/PassManagerBuilder.h"
#include "llvm/PassManager.h" #include "llvm/PassManager.h"
#include "llvm-c/Core.h" #include "llvm-c/Core.h"
#include <cstdlib> #include <cstdlib>
@ -8,22 +8,29 @@ using namespace llvm;
extern "C" void LLVMAddStandardFunctionPasses(LLVMPassManagerRef PM, extern "C" void LLVMAddStandardFunctionPasses(LLVMPassManagerRef PM,
unsigned int OptimizationLevel) { unsigned int OptimizationLevel) {
createStandardFunctionPasses(unwrap(PM), OptimizationLevel); PassManagerBuilder PMBuilder;
PMBuilder.OptLevel = OptimizationLevel;
FunctionPassManager *FPM = (FunctionPassManager*) unwrap(PM);
PMBuilder.populateFunctionPassManager(*FPM);
} }
extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM, extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM,
unsigned int OptimizationLevel, LLVMBool OptimizeSize, unsigned int OptimizationLevel, LLVMBool OptimizeSize,
LLVMBool UnitAtATime, LLVMBool UnrollLoops, LLVMBool SimplifyLibCalls, LLVMBool UnitAtATime, LLVMBool UnrollLoops, LLVMBool SimplifyLibCalls,
LLVMBool HaveExceptions, unsigned int InliningThreshold) { unsigned int InliningThreshold) {
Pass *InliningPass;
if (InliningThreshold)
InliningPass = createFunctionInliningPass(InliningThreshold);
else
InliningPass = NULL;
createStandardModulePasses(unwrap(PM), OptimizationLevel, OptimizeSize, PassManagerBuilder PMBuilder;
UnitAtATime, UnrollLoops, SimplifyLibCalls, PMBuilder.OptLevel = OptimizationLevel;
HaveExceptions, InliningPass); PMBuilder.SizeLevel = OptimizeSize;
PMBuilder.DisableUnitAtATime = !UnitAtATime;
PMBuilder.DisableUnrollLoops = !UnrollLoops;
PMBuilder.DisableSimplifyLibCalls = !SimplifyLibCalls;
if (InliningThreshold)
PMBuilder.Inliner = createFunctionInliningPass(InliningThreshold);
PassManager *MPM = (PassManager*) unwrap(PM);
PMBuilder.populateModulePassManager(*MPM);
} }

View File

@ -47,7 +47,7 @@ extern "C" const char *LLVMRustGetLastError(void) {
extern "C" void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM); extern "C" void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM, extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM,
unsigned int OptimizationLevel, bool OptimizeSize, bool UnitAtATime, unsigned int OptimizationLevel, bool OptimizeSize, bool UnitAtATime,
bool UnrollLoops, bool SimplifyLibCalls, bool HaveExceptions, bool UnrollLoops, bool SimplifyLibCalls,
unsigned int InliningThreshold); unsigned int InliningThreshold);
int *RustHackToFetchPassesO = (int*)LLVMAddBasicAliasAnalysisPass; int *RustHackToFetchPassesO = (int*)LLVMAddBasicAliasAnalysisPass;
@ -80,7 +80,6 @@ extern "C" void LLVMRustWriteOutputFile(LLVMPassManagerRef PMR,
LLVMCodeGenFileType FileType) { LLVMCodeGenFileType FileType) {
// Set compilation options. // Set compilation options.
llvm::UnwindTablesMandatory = true;
llvm::NoFramePointerElim = true; llvm::NoFramePointerElim = true;
InitializeAllTargets(); InitializeAllTargets();