aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/AMDGPU/AMDGPU.h35
-rw-r--r--lib/Target/AMDGPU/AMDGPU.td21
-rw-r--r--lib/Target/AMDGPU/AMDGPUConvertToISA.cpp63
-rw-r--r--lib/Target/AMDGPU/AMDGPUISelLowering.cpp393
-rw-r--r--lib/Target/AMDGPU/AMDGPUISelLowering.h77
-rw-r--r--lib/Target/AMDGPU/AMDGPUInstrInfo.cpp46
-rw-r--r--lib/Target/AMDGPU/AMDGPUInstrInfo.h46
-rw-r--r--lib/Target/AMDGPU/AMDGPUInstrInfo.td69
-rw-r--r--lib/Target/AMDGPU/AMDGPUInstructions.td123
-rw-r--r--lib/Target/AMDGPU/AMDGPUIntrinsics.td64
-rw-r--r--lib/Target/AMDGPU/AMDGPURegisterInfo.cpp24
-rw-r--r--lib/Target/AMDGPU/AMDGPURegisterInfo.h42
-rw-r--r--lib/Target/AMDGPU/AMDGPURegisterInfo.td22
-rw-r--r--lib/Target/AMDGPU/AMDGPUSubtarget.h36
-rw-r--r--lib/Target/AMDGPU/AMDGPUTargetMachine.cpp162
-rw-r--r--lib/Target/AMDGPU/AMDGPUTargetMachine.h76
-rw-r--r--lib/Target/AMDGPU/AMDGPUUtil.cpp139
-rw-r--r--lib/Target/AMDGPU/AMDGPUUtil.h46
-rw-r--r--lib/Target/AMDGPU/AMDIL.h251
-rw-r--r--lib/Target/AMDGPU/AMDIL7XXDevice.cpp128
-rw-r--r--lib/Target/AMDGPU/AMDIL7XXDevice.h71
-rw-r--r--lib/Target/AMDGPU/AMDILAlgorithms.tpp93
-rw-r--r--lib/Target/AMDGPU/AMDILBase.td113
-rw-r--r--lib/Target/AMDGPU/AMDILCFGStructurizer.cpp3236
-rw-r--r--lib/Target/AMDGPU/AMDILCallingConv.td42
-rw-r--r--lib/Target/AMDGPU/AMDILCodeEmitter.h48
-rw-r--r--lib/Target/AMDGPU/AMDILDevice.cpp137
-rw-r--r--lib/Target/AMDGPU/AMDILDevice.h116
-rw-r--r--lib/Target/AMDGPU/AMDILDeviceInfo.cpp93
-rw-r--r--lib/Target/AMDGPU/AMDILDeviceInfo.h89
-rw-r--r--lib/Target/AMDGPU/AMDILDevices.h19
-rw-r--r--lib/Target/AMDGPU/AMDILEnumeratedTypes.td522
-rw-r--r--lib/Target/AMDGPU/AMDILEvergreenDevice.cpp183
-rw-r--r--lib/Target/AMDGPU/AMDILEvergreenDevice.h87
-rw-r--r--lib/Target/AMDGPU/AMDILFormats.td175
-rw-r--r--lib/Target/AMDGPU/AMDILFrameLowering.cpp53
-rw-r--r--lib/Target/AMDGPU/AMDILFrameLowering.h46
-rw-r--r--lib/Target/AMDGPU/AMDILISelDAGToDAG.cpp393
-rw-r--r--lib/Target/AMDGPU/AMDILISelLowering.cpp1850
-rw-r--r--lib/Target/AMDGPU/AMDILISelLowering.h203
-rw-r--r--lib/Target/AMDGPU/AMDILInstrInfo.cpp508
-rw-r--r--lib/Target/AMDGPU/AMDILInstrInfo.h160
-rw-r--r--lib/Target/AMDGPU/AMDILInstrInfo.td108
-rw-r--r--lib/Target/AMDGPU/AMDILInstructions.td143
-rw-r--r--lib/Target/AMDGPU/AMDILIntrinsicInfo.cpp93
-rw-r--r--lib/Target/AMDGPU/AMDILIntrinsicInfo.h47
-rw-r--r--lib/Target/AMDGPU/AMDILIntrinsics.td705
-rw-r--r--lib/Target/AMDGPU/AMDILMultiClass.td95
-rw-r--r--lib/Target/AMDGPU/AMDILNIDevice.cpp71
-rw-r--r--lib/Target/AMDGPU/AMDILNIDevice.h59
-rw-r--r--lib/Target/AMDGPU/AMDILNodes.td47
-rw-r--r--lib/Target/AMDGPU/AMDILOperands.td32
-rw-r--r--lib/Target/AMDGPU/AMDILPatterns.td504
-rw-r--r--lib/Target/AMDGPU/AMDILPeepholeOptimizer.cpp1264
-rw-r--r--lib/Target/AMDGPU/AMDILProfiles.td174
-rw-r--r--lib/Target/AMDGPU/AMDILRegisterInfo.cpp162
-rw-r--r--lib/Target/AMDGPU/AMDILRegisterInfo.h95
-rw-r--r--lib/Target/AMDGPU/AMDILRegisterInfo.td110
-rw-r--r--lib/Target/AMDGPU/AMDILSIDevice.cpp49
-rw-r--r--lib/Target/AMDGPU/AMDILSIDevice.h45
-rw-r--r--lib/Target/AMDGPU/AMDILSubtarget.cpp178
-rw-r--r--lib/Target/AMDGPU/AMDILSubtarget.h76
-rw-r--r--lib/Target/AMDGPU/AMDILTokenDesc.td120
-rw-r--r--lib/Target/AMDGPU/AMDILUtilityFunctions.h75
-rw-r--r--lib/Target/AMDGPU/AMDILVersion.td58
-rw-r--r--lib/Target/AMDGPU/CMakeLists.txt50
-rw-r--r--lib/Target/AMDGPU/GENERATED_FILES13
-rw-r--r--lib/Target/AMDGPU/LLVMBuild.txt32
-rw-r--r--lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp104
-rw-r--r--lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.h30
-rw-r--r--lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp61
-rw-r--r--lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.h35
-rw-r--r--lib/Target/AMDGPU/MCTargetDesc/CMakeLists.txt7
-rw-r--r--lib/Target/AMDGPU/MCTargetDesc/LLVMBuild.txt23
-rw-r--r--lib/Target/AMDGPU/MCTargetDesc/Makefile16
-rw-r--r--lib/Target/AMDGPU/Makefile22
-rw-r--r--lib/Target/AMDGPU/Processors.td27
-rw-r--r--lib/Target/AMDGPU/R600CodeEmitter.cpp614
-rw-r--r--lib/Target/AMDGPU/R600GenRegisterInfo.pl190
-rw-r--r--lib/Target/AMDGPU/R600HwRegInfo.include1056
-rw-r--r--lib/Target/AMDGPU/R600ISelLowering.cpp286
-rw-r--r--lib/Target/AMDGPU/R600ISelLowering.h48
-rw-r--r--lib/Target/AMDGPU/R600InstrInfo.cpp105
-rw-r--r--lib/Target/AMDGPU/R600InstrInfo.h75
-rw-r--r--lib/Target/AMDGPU/R600Instructions.td1322
-rw-r--r--lib/Target/AMDGPU/R600Intrinsics.td16
-rw-r--r--lib/Target/AMDGPU/R600KernelParameters.cpp462
-rw-r--r--lib/Target/AMDGPU/R600MachineFunctionInfo.cpp16
-rw-r--r--lib/Target/AMDGPU/R600MachineFunctionInfo.h33
-rw-r--r--lib/Target/AMDGPU/R600RegisterInfo.cpp88
-rw-r--r--lib/Target/AMDGPU/R600RegisterInfo.h54
-rw-r--r--lib/Target/AMDGPU/R600RegisterInfo.td5271
-rw-r--r--lib/Target/AMDGPU/R600Schedule.td36
-rw-r--r--lib/Target/AMDGPU/SIAssignInterpRegs.cpp117
-rw-r--r--lib/Target/AMDGPU/SICodeEmitter.cpp321
-rw-r--r--lib/Target/AMDGPU/SIGenRegisterInfo.pl224
-rw-r--r--lib/Target/AMDGPU/SIISelLowering.cpp195
-rw-r--r--lib/Target/AMDGPU/SIISelLowering.h48
-rw-r--r--lib/Target/AMDGPU/SIInstrFormats.td128
-rw-r--r--lib/Target/AMDGPU/SIInstrInfo.cpp103
-rw-r--r--lib/Target/AMDGPU/SIInstrInfo.h89
-rw-r--r--lib/Target/AMDGPU/SIInstrInfo.td477
-rw-r--r--lib/Target/AMDGPU/SIInstructions.td965
-rw-r--r--lib/Target/AMDGPU/SIIntrinsics.td35
-rw-r--r--lib/Target/AMDGPU/SIMachineFunctionInfo.cpp18
-rw-r--r--lib/Target/AMDGPU/SIMachineFunctionInfo.h37
-rw-r--r--lib/Target/AMDGPU/SIRegisterInfo.cpp51
-rw-r--r--lib/Target/AMDGPU/SIRegisterInfo.h47
-rw-r--r--lib/Target/AMDGPU/SIRegisterInfo.td886
-rw-r--r--lib/Target/AMDGPU/SISchedule.td15
-rw-r--r--lib/Target/AMDGPU/TargetInfo/AMDGPUTargetInfo.cpp26
-rw-r--r--lib/Target/AMDGPU/TargetInfo/CMakeLists.txt7
-rw-r--r--lib/Target/AMDGPU/TargetInfo/LLVMBuild.txt23
-rw-r--r--lib/Target/AMDGPU/TargetInfo/Makefile15
114 files changed, 28329 insertions, 0 deletions
diff --git a/lib/Target/AMDGPU/AMDGPU.h b/lib/Target/AMDGPU/AMDGPU.h
new file mode 100644
index 0000000000..191f495eaa
--- /dev/null
+++ b/lib/Target/AMDGPU/AMDGPU.h
@@ -0,0 +1,35 @@
+//===-- AMDGPU.h - MachineFunction passes hw codegen --------------*- C++ -*-=//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef AMDGPU_H
+#define AMDGPU_H
+
+#include "AMDGPUTargetMachine.h"
+#include "llvm/Support/TargetRegistry.h"
+#include "llvm/Target/TargetMachine.h"
+
+namespace llvm {
+
+class FunctionPass;
+class AMDGPUTargetMachine;
+
+// R600 Passes
+FunctionPass* createR600KernelParametersPass(const TargetData* TD);
+FunctionPass *createR600CodeEmitterPass(formatted_raw_ostream &OS);
+
+// SI Passes
+FunctionPass *createSIAssignInterpRegsPass(TargetMachine &tm);
+FunctionPass *createSICodeEmitterPass(formatted_raw_ostream &OS);
+
+// Passes common to R600 and SI
+FunctionPass *createAMDGPUConvertToISAPass(TargetMachine &tm);
+
+} // End namespace llvm
+
+#endif // AMDGPU_H
diff --git a/lib/Target/AMDGPU/AMDGPU.td b/lib/Target/AMDGPU/AMDGPU.td
new file mode 100644
index 0000000000..1bb5fb9757
--- /dev/null
+++ b/lib/Target/AMDGPU/AMDGPU.td
@@ -0,0 +1,21 @@
+//===-- AMDIL.td - AMDIL Tablegen files --*- tablegen -*-------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//==-----------------------------------------------------------------------===//
+
+// Include AMDIL TD files
+include "AMDILBase.td"
+include "AMDILVersion.td"
+
+// Include AMDGPU TD files
+include "R600Schedule.td"
+include "SISchedule.td"
+include "Processors.td"
+include "AMDGPUInstrInfo.td"
+include "AMDGPUIntrinsics.td"
+include "AMDGPURegisterInfo.td"
+include "AMDGPUInstructions.td"
diff --git a/lib/Target/AMDGPU/AMDGPUConvertToISA.cpp b/lib/Target/AMDGPU/AMDGPUConvertToISA.cpp
new file mode 100644
index 0000000000..5e8fe9ae21
--- /dev/null
+++ b/lib/Target/AMDGPU/AMDGPUConvertToISA.cpp
@@ -0,0 +1,63 @@
+//===-- AMDGPUConvertToISA.cpp - Lower AMDIL to HW ISA --------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This pass lowers AMDIL machine instructions to the appropriate hardware
+// instructions.
+//
+//===----------------------------------------------------------------------===//
+
+#include "AMDGPU.h"
+#include "AMDGPUInstrInfo.h"
+#include "llvm/CodeGen/MachineFunctionPass.h"
+
+#include <stdio.h>
+using namespace llvm;
+
+namespace {
+
+class AMDGPUConvertToISAPass : public MachineFunctionPass {
+
+private:
+ static char ID;
+ TargetMachine &TM;
+
+public:
+ AMDGPUConvertToISAPass(TargetMachine &tm) :
+ MachineFunctionPass(ID), TM(tm) { }
+
+ virtual bool runOnMachineFunction(MachineFunction &MF);
+
+ virtual const char *getPassName() const {return "AMDGPU Convert to ISA";}
+
+};
+
+} // End anonymous namespace
+
+char AMDGPUConvertToISAPass::ID = 0;
+
+FunctionPass *llvm::createAMDGPUConvertToISAPass(TargetMachine &tm) {
+ return new AMDGPUConvertToISAPass(tm);
+}
+
+bool AMDGPUConvertToISAPass::runOnMachineFunction(MachineFunction &MF)
+{
+ const AMDGPUInstrInfo * TII =
+ static_cast<const AMDGPUInstrInfo*>(TM.getInstrInfo());
+
+ for (MachineFunction::iterator BB = MF.begin(), BB_E = MF.end();
+ BB != BB_E; ++BB) {
+ MachineBasicBlock &MBB = *BB;
+ for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end();
+ I != E; ++I) {
+ MachineInstr &MI = *I;
+ TII->convertToISA(MI, MF, MBB.findDebugLoc(I));
+ }
+ }
+ return false;
+}
diff --git a/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
new file mode 100644
index 0000000000..b3d27f762e
--- /dev/null
+++ b/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
@@ -0,0 +1,393 @@
+//===-- AMDGPUISelLowering.cpp - AMDGPU Common DAG lowering functions -----===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This is the parent TargetLowering class for hardware code gen targets.
+//
+//===----------------------------------------------------------------------===//
+
+#include "AMDGPUISelLowering.h"
+#include "AMDILIntrinsicInfo.h"
+#include "AMDGPUUtil.h"
+#include "llvm/CodeGen/MachineRegisterInfo.h"
+
+using namespace llvm;
+
+AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
+ AMDILTargetLowering(TM)
+{
+ // We need to custom lower some of the intrinsics
+ setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom);
+
+ setOperationAction(ISD::SELECT_CC, MVT::f32, Custom);
+ setOperationAction(ISD::SELECT_CC, MVT::i32, Custom);
+
+ // Library functions. These default to Expand, but we have instructions
+ // for them.
+ setOperationAction(ISD::FCEIL, MVT::f32, Legal);
+ setOperationAction(ISD::FEXP2, MVT::f32, Legal);
+ setOperationAction(ISD::FRINT, MVT::f32, Legal);
+
+ setOperationAction(ISD::UDIV, MVT::i32, Expand);
+ setOperationAction(ISD::UDIVREM, MVT::i32, Custom);
+ setOperationAction(ISD::UREM, MVT::i32, Expand);
+}
+
+SDValue AMDGPUTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG)
+ const
+{
+ switch (Op.getOpcode()) {
+ default: return AMDILTargetLowering::LowerOperation(Op, DAG);
+ case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN(Op, DAG);
+ case ISD::SELECT_CC: return LowerSELECT_CC(Op, DAG);
+ case ISD::UDIVREM: return LowerUDIVREM(Op, DAG);
+ }
+}
+
+SDValue AMDGPUTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,