summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2017-10-05 16:19:18 +0000
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2017-10-05 16:19:18 +0000
commitaa0835a7abce9a7cbbf706539ef4712fa05c5a37 (patch)
tree3a2d93bfef7a3d5fe3ed5f571da7f91894c99f05 /llvm/lib/Target
parentc9e0f886e5c664cf819ec1507ff1cf0e3b3c3a18 (diff)
downloadbcm5719-llvm-aa0835a7abce9a7cbbf706539ef4712fa05c5a37.tar.gz
bcm5719-llvm-aa0835a7abce9a7cbbf706539ef4712fa05c5a37.zip
AMDGPU: Add and set AMDGPU-specific e_flags
Differential Revision: https://reviews.llvm.org/D38556 llvm-svn: 314987
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp36
-rw-r--r--llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h12
-rw-r--r--llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp5
3 files changed, 36 insertions, 17 deletions
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp
index 43338a5bebd..bfdb7d7cff7 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp
@@ -9,13 +9,37 @@
#include "AMDGPUELFStreamer.h"
#include "Utils/AMDGPUBaseInfo.h"
+#include "llvm/BinaryFormat/ELF.h"
using namespace llvm;
-MCELFStreamer *llvm::createAMDGPUELFStreamer(MCContext &Context,
- MCAsmBackend &MAB,
- raw_pwrite_stream &OS,
- MCCodeEmitter *Emitter,
- bool RelaxAll) {
- return new AMDGPUELFStreamer(Context, MAB, OS, Emitter);
+AMDGPUELFStreamer::AMDGPUELFStreamer(const Triple &T, MCContext &Context,
+ MCAsmBackend &MAB, raw_pwrite_stream &OS,
+ MCCodeEmitter *Emitter)
+ : MCELFStreamer(Context, MAB, OS, Emitter) {
+ unsigned Arch = ELF::EF_AMDGPU_ARCH_NONE;
+ switch (T.getArch()) {
+ case Triple::r600:
+ Arch = ELF::EF_AMDGPU_ARCH_R600;
+ break;
+ case Triple::amdgcn:
+ Arch = ELF::EF_AMDGPU_ARCH_GCN;
+ break;
+ default:
+ break;
+ }
+
+ MCAssembler &MCA = getAssembler();
+ unsigned EFlags = MCA.getELFHeaderEFlags();
+ EFlags &= ~ELF::EF_AMDGPU_ARCH;
+ EFlags |= Arch;
+ MCA.setELFHeaderEFlags(EFlags);
+}
+
+MCELFStreamer *llvm::createAMDGPUELFStreamer(const Triple &T, MCContext &Context,
+ MCAsmBackend &MAB,
+ raw_pwrite_stream &OS,
+ MCCodeEmitter *Emitter,
+ bool RelaxAll) {
+ return new AMDGPUELFStreamer(T, Context, MAB, OS, Emitter);
}
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h
index 5319b65d65f..386aa56c807 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h
@@ -25,15 +25,13 @@ class MCSubtargetInfo;
class AMDGPUELFStreamer : public MCELFStreamer {
public:
- AMDGPUELFStreamer(MCContext &Context, MCAsmBackend &MAB, raw_pwrite_stream &OS,
- MCCodeEmitter *Emitter)
- : MCELFStreamer(Context, MAB, OS, Emitter) { }
-
+ AMDGPUELFStreamer(const Triple &T, MCContext &Context, MCAsmBackend &MAB,
+ raw_pwrite_stream &OS, MCCodeEmitter *Emitter);
};
-MCELFStreamer *createAMDGPUELFStreamer(MCContext &Context, MCAsmBackend &MAB,
- raw_pwrite_stream &OS,
- MCCodeEmitter *Emitter, bool RelaxAll);
+MCELFStreamer *createAMDGPUELFStreamer(const Triple &T, MCContext &Context,
+ MCAsmBackend &MAB, raw_pwrite_stream &OS,
+ MCCodeEmitter *Emitter, bool RelaxAll);
} // namespace llvm.
#endif
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp
index 2968d834a5e..1682fc5e49b 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp
@@ -80,10 +80,7 @@ static MCTargetStreamer * createAMDGPUObjectTargetStreamer(
static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,
MCAsmBackend &MAB, raw_pwrite_stream &OS,
MCCodeEmitter *Emitter, bool RelaxAll) {
- if (T.getOS() == Triple::AMDHSA)
- return createAMDGPUELFStreamer(Context, MAB, OS, Emitter, RelaxAll);
-
- return createELFStreamer(Context, MAB, OS, Emitter, RelaxAll);
+ return createAMDGPUELFStreamer(T, Context, MAB, OS, Emitter, RelaxAll);
}
extern "C" void LLVMInitializeAMDGPUTargetMC() {
OpenPOWER on IntegriCloud