2015-06-30 07:51:55 +08:00
|
|
|
// WebAssemblyTargetMachine.h - Define TargetMachine for WebAssembly -*- C++ -*-
|
|
|
|
//
|
2019-01-19 16:50:56 +08:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2015-06-30 07:51:55 +08:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
///
|
|
|
|
/// \file
|
2018-05-01 23:54:18 +08:00
|
|
|
/// This file declares the WebAssembly-specific subclass of
|
2015-06-30 07:51:55 +08:00
|
|
|
/// TargetMachine.
|
|
|
|
///
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
|
|
|
|
#define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETMACHINE_H
|
|
|
|
|
|
|
|
#include "WebAssemblySubtarget.h"
|
|
|
|
#include "llvm/Target/TargetMachine.h"
|
|
|
|
|
|
|
|
namespace llvm {
|
|
|
|
|
2017-10-13 06:57:28 +08:00
|
|
|
class WebAssemblyTargetMachine final : public LLVMTargetMachine {
|
2015-06-30 07:51:55 +08:00
|
|
|
std::unique_ptr<TargetLoweringObjectFile> TLOF;
|
|
|
|
mutable StringMap<std::unique_ptr<WebAssemblySubtarget>> SubtargetMap;
|
|
|
|
|
|
|
|
public:
|
|
|
|
WebAssemblyTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
|
|
|
|
StringRef FS, const TargetOptions &Options,
|
2017-08-03 13:15:53 +08:00
|
|
|
Optional<Reloc::Model> RM,
|
|
|
|
Optional<CodeModel::Model> CM, CodeGenOpt::Level OL,
|
|
|
|
bool JIT);
|
2015-06-30 07:51:55 +08:00
|
|
|
|
|
|
|
~WebAssemblyTargetMachine() override;
|
[WebAssembly] Remove uses of ThreadModel
Summary:
In the clang UI, replaces -mthread-model posix with -matomics as the
source of truth on threading. In the backend, replaces
-thread-model=posix with the atomics target feature, which is now
collected on the WebAssemblyTargetMachine along with all other used
features. These collected features will also be used to emit the
target features section in the future.
The default configuration for the backend is thread-model=posix and no
atomics, which was previously an invalid configuration. This change
makes the default valid because the thread model is ignored.
A side effect of this change is that objects are never emitted with
passive segments. It will instead be up to the linker to decide
whether sections should be active or passive based on whether atomics
are used in the final link.
Reviewers: aheejin, sbc100, dschuff
Subscribers: mehdi_amini, jgravelle-google, hiraditya, sunfish, steven_wu, dexonsmith, rupprecht, jfb, jdoerfert, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision: https://reviews.llvm.org/D58742
llvm-svn: 355112
2019-03-01 02:39:08 +08:00
|
|
|
|
|
|
|
const WebAssemblySubtarget *getSubtargetImpl(std::string CPU,
|
|
|
|
std::string FS) const;
|
2015-06-30 07:51:55 +08:00
|
|
|
const WebAssemblySubtarget *
|
|
|
|
getSubtargetImpl(const Function &F) const override;
|
|
|
|
|
|
|
|
// Pass Pipeline Configuration
|
|
|
|
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
|
|
|
|
|
|
|
|
TargetLoweringObjectFile *getObjFileLowering() const override {
|
|
|
|
return TLOF.get();
|
|
|
|
}
|
|
|
|
|
(Re-landing) Expose a TargetMachine::getTargetTransformInfo function
Re-land r321234. It had to be reverted because it broke the shared
library build. The shared library build broke because there was a
missing LLVMBuild dependency from lib/Passes (which calls
TargetMachine::getTargetIRAnalysis) to lib/Target. As far as I can
tell, this problem was always there but was somehow masked
before (perhaps because TargetMachine::getTargetIRAnalysis was a
virtual function).
Original commit message:
This makes the TargetMachine interface a bit simpler. We still need
the std::function in TargetIRAnalysis to avoid having to add a
dependency from Analysis to Target.
See discussion:
http://lists.llvm.org/pipermail/llvm-dev/2017-December/119749.html
I avoided adding all of the backend owners to this review since the
change is simple, but let me know if you feel differently about this.
Reviewers: echristo, MatzeB, hfinkel
Reviewed By: hfinkel
Subscribers: jholewinski, jfb, arsenm, dschuff, mcrosier, sdardis, nemanjai, nhaehnle, javed.absar, sbc100, jgravelle-google, aheejin, kbarton, llvm-commits
Differential Revision: https://reviews.llvm.org/D41464
llvm-svn: 321375
2017-12-23 02:21:59 +08:00
|
|
|
TargetTransformInfo getTargetTransformInfo(const Function &F) override;
|
2016-05-17 16:49:59 +08:00
|
|
|
|
|
|
|
bool usesPhysRegsForPEI() const override { return false; }
|
2019-03-27 01:35:35 +08:00
|
|
|
|
|
|
|
yaml::MachineFunctionInfo *createDefaultFuncInfoYAML() const override;
|
|
|
|
yaml::MachineFunctionInfo *
|
|
|
|
convertFuncInfoToYAML(const MachineFunction &MF) const override;
|
|
|
|
bool parseMachineFunctionInfo(const yaml::MachineFunctionInfo &,
|
|
|
|
PerFunctionMIParsingState &PFS,
|
|
|
|
SMDiagnostic &Error,
|
|
|
|
SMRange &SourceRange) const override;
|
2015-06-30 07:51:55 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
} // end namespace llvm
|
|
|
|
|
|
|
|
#endif
|