mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-31 10:34:17 +00:00
Reset some of the target options which affect code generation.
This doesn't reset all of the target options within the TargetOptions object. This is because some of those are ABI-specific and must be determined if it's okay to change those on the fly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176986 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
33905b2a34
commit
4cb1f5f406
@ -95,7 +95,10 @@ public:
|
||||
/// a reference to that target's TargetSubtargetInfo-derived member variable.
|
||||
virtual const TargetSubtargetInfo *getSubtargetImpl() const { return 0; }
|
||||
|
||||
TargetOptions Options;
|
||||
mutable TargetOptions Options;
|
||||
|
||||
/// \brief Reset the target options based on the function's attributes.
|
||||
void resetTargetOptions(const MachineFunction *MF) const;
|
||||
|
||||
// Interfaces to the major aspects of target machine information:
|
||||
// -- Instruction opcode and operand information
|
||||
|
@ -362,6 +362,7 @@ bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
|
||||
TargetSubtargetInfo &ST =
|
||||
const_cast<TargetSubtargetInfo&>(TM.getSubtarget<TargetSubtargetInfo>());
|
||||
ST.resetSubtargetFeatures(MF);
|
||||
TM.resetTargetOptions(MF);
|
||||
|
||||
DEBUG(dbgs() << "\n\n\n=== " << Fn.getName() << "\n");
|
||||
|
||||
|
@ -12,6 +12,8 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/GlobalAlias.h"
|
||||
#include "llvm/IR/GlobalValue.h"
|
||||
#include "llvm/IR/GlobalVariable.h"
|
||||
@ -61,6 +63,30 @@ TargetMachine::~TargetMachine() {
|
||||
delete AsmInfo;
|
||||
}
|
||||
|
||||
/// \brief Reset the target options based on the function's attributes.
|
||||
void TargetMachine::resetTargetOptions(const MachineFunction *MF) const {
|
||||
const Function *F = MF->getFunction();
|
||||
TargetOptions &TO = MF->getTarget().Options;
|
||||
|
||||
#define RESET_OPTION(X, Y) \
|
||||
do { \
|
||||
if (F->hasFnAttribute(Y)) \
|
||||
TO.X = \
|
||||
(F->getAttributes(). \
|
||||
getAttribute(AttributeSet::FunctionIndex, \
|
||||
Y).getValueAsString() == "true"); \
|
||||
} while (0)
|
||||
|
||||
RESET_OPTION(NoFramePointerElim, "no-frame-pointer-elim");
|
||||
RESET_OPTION(NoFramePointerElimNonLeaf, "no-frame-pointer-elim-non-leaf");
|
||||
RESET_OPTION(LessPreciseFPMADOption, "less-precise-fpmad");
|
||||
RESET_OPTION(UnsafeFPMath, "unsafe-fp-math");
|
||||
RESET_OPTION(NoInfsFPMath, "no-infs-fp-math");
|
||||
RESET_OPTION(NoNaNsFPMath, "no-nans-fp-math");
|
||||
RESET_OPTION(UseSoftFloat, "use-soft-float");
|
||||
RESET_OPTION(DisableTailCalls, "disable-tail-calls");
|
||||
}
|
||||
|
||||
/// getRelocationModel - Returns the code generation relocation model. The
|
||||
/// choices are static, PIC, and dynamic-no-pic, and target default.
|
||||
Reloc::Model TargetMachine::getRelocationModel() const {
|
||||
|
Loading…
x
Reference in New Issue
Block a user