X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FTargetMachine.cpp;h=15164ca28dfc0a59f82bf593b9b74cc4670ff0f9;hb=e6be34a53ecbe8c2ff9f0793b13d847e94c0de91;hp=3ca64c44edba1099e640cb47069192ad41fdb208;hpb=a0f3d17daac73c9c71aad497b298cbe82848f726;p=oota-llvm.git diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp index 3ca64c44edb..15164ca28df 100644 --- a/lib/Target/TargetMachine.cpp +++ b/lib/Target/TargetMachine.cpp @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -27,8 +27,13 @@ namespace llvm { bool NoExcessFPPrecision; bool UnsafeFPMath; bool FiniteOnlyFPMathOption; + bool HonorSignDependentRoundingFPMathOption; + bool UseSoftFloat; + bool NoZerosInBSS; + bool ExceptionHandling; Reloc::Model RelocationModel; CodeModel::Model CMModel; + bool PerformTailCallOpt; } namespace { cl::opt PrintCode("print-machineinstrs", @@ -51,10 +56,33 @@ namespace { cl::location(UnsafeFPMath), cl::init(false)); cl::opt - EnableFiniteOnltFPMath("enable-finite-only-fp-math", + EnableFiniteOnlyFPMath("enable-finite-only-fp-math", cl::desc("Enable optimizations that assumes non- NaNs / +-Infs"), cl::location(FiniteOnlyFPMathOption), cl::init(false)); + cl::opt + EnableHonorSignDependentRoundingFPMath(cl::Hidden, + "enable-sign-dependent-rounding-fp-math", + cl::desc("Force codegen to assume rounding mode can change dynamically"), + cl::location(HonorSignDependentRoundingFPMathOption), + cl::init(false)); + + cl::opt + GenerateSoftFloatCalls("soft-float", + cl::desc("Generate software floating point library calls"), + cl::location(UseSoftFloat), + cl::init(false)); + cl::opt + DontPlaceZerosInBSS("nozero-initialized-in-bss", + cl::desc("Don't place zero-initialized symbols into bss section"), + cl::location(NoZerosInBSS), + cl::init(false)); + cl::opt + EnableExceptionHandling("enable-eh", + cl::desc("Exception handling should be emitted."), + cl::location(ExceptionHandling), + cl::init(false)); + cl::opt DefRelocationModel( "relocation-model", @@ -74,7 +102,7 @@ namespace { cl::opt DefCodeModel( "code-model", - cl::desc("Choose relocation model"), + cl::desc("Choose code model"), cl::location(CMModel), cl::init(CodeModel::Default), cl::values( @@ -89,6 +117,12 @@ namespace { clEnumValN(CodeModel::Large, "large", " Large code model"), clEnumValEnd)); + + cl::opt + EnablePerformTailCallOpt("tailcallopt", + cl::desc("Turn on tail call optimization."), + cl::location(PerformTailCallOpt), + cl::init(false)); } //--------------------------------------------------------------------------- @@ -96,7 +130,7 @@ namespace { // TargetMachine::~TargetMachine() { - if (AsmInfo) delete AsmInfo; + delete AsmInfo; } /// getRelocationModel - Returns the code generation relocation model. The @@ -127,5 +161,11 @@ namespace llvm { /// the code generator is not allowed to assume that FP arithmetic arguments /// and results are never NaNs or +-Infs. bool FiniteOnlyFPMath() { return UnsafeFPMath || FiniteOnlyFPMathOption; } + + /// HonorSignDependentRoundingFPMath - Return true if the codegen must assume + /// that the rounding mode of the FPU can change from its default. + bool HonorSignDependentRoundingFPMath() { + return !UnsafeFPMath && HonorSignDependentRoundingFPMathOption; + } }