summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2014-10-01 14:44:45 +0000
committerTom Stellard <thomas.stellard@amd.com>2014-10-01 14:44:45 +0000
commit3a35d8f4c26ea2f8527fbbe6f430fe2a7d8b6cc1 (patch)
treebafa56b935fad238f9fd32b5fef26ab2bb3ccea9
parent0c238c2fbe9afc56f342de706e0ca59f6f29a9f6 (diff)
downloadbcm5719-llvm-3a35d8f4c26ea2f8527fbbe6f430fe2a7d8b6cc1.tar.gz
bcm5719-llvm-3a35d8f4c26ea2f8527fbbe6f430fe2a7d8b6cc1.zip
R600/SI: Add a generic pseudo EXP instruction
llvm-svn: 218767
-rw-r--r--llvm/lib/Target/R600/SIInstrFormats.td8
-rw-r--r--llvm/lib/Target/R600/SIInstrInfo.td24
-rw-r--r--llvm/lib/Target/R600/SIInstructions.td6
3 files changed, 30 insertions, 8 deletions
diff --git a/llvm/lib/Target/R600/SIInstrFormats.td b/llvm/lib/Target/R600/SIInstrFormats.td
index 993b0920722..f600dbff543 100644
--- a/llvm/lib/Target/R600/SIInstrFormats.td
+++ b/llvm/lib/Target/R600/SIInstrFormats.td
@@ -589,14 +589,6 @@ class MIMG <bits<7> op, dag outs, dag ins, string asm, list<dag> pattern> :
let MIMG = 1;
}
-def EXP : InstSI<
- (outs),
- (ins i32imm:$en, i32imm:$tgt, i32imm:$compr, i32imm:$done, i32imm:$vm,
- VReg_32:$src0, VReg_32:$src1, VReg_32:$src2, VReg_32:$src3),
- "EXP $en, $tgt, $compr, $done, $vm, $src0, $src1, $src2, $src3",
- [] >, EXPe {
- let EXP_CNT = 1;
-}
} // End Uses = [EXEC]
diff --git a/llvm/lib/Target/R600/SIInstrInfo.td b/llvm/lib/Target/R600/SIInstrInfo.td
index e7c0deac7e3..831a4611252 100644
--- a/llvm/lib/Target/R600/SIInstrInfo.td
+++ b/llvm/lib/Target/R600/SIInstrInfo.td
@@ -256,6 +256,30 @@ class SIMCInstr <string pseudo, int subtarget> {
}
//===----------------------------------------------------------------------===//
+// EXP classes
+//===----------------------------------------------------------------------===//
+
+class EXPCommon : InstSI<
+ (outs),
+ (ins i32imm:$en, i32imm:$tgt, i32imm:$compr, i32imm:$done, i32imm:$vm,
+ VReg_32:$src0, VReg_32:$src1, VReg_32:$src2, VReg_32:$src3),
+ "EXP $en, $tgt, $compr, $done, $vm, $src0, $src1, $src2, $src3",
+ [] > {
+
+ let EXP_CNT = 1;
+ let Uses = [EXEC];
+}
+
+multiclass EXP_m {
+
+ let isPseudo = 1 in {
+ def "" : EXPCommon, SIMCInstr <"EXP", SISubtarget.NONE> ;
+ }
+
+ def _si : EXPCommon, SIMCInstr <"EXP", SISubtarget.SI>, EXPe;
+}
+
+//===----------------------------------------------------------------------===//
// Scalar classes
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/R600/SIInstructions.td b/llvm/lib/Target/R600/SIInstructions.td
index 943466a8d52..29ea13559c3 100644
--- a/llvm/lib/Target/R600/SIInstructions.td
+++ b/llvm/lib/Target/R600/SIInstructions.td
@@ -38,6 +38,12 @@ def WAIT_FLAG : InstFlag<"printWaitFlag">;
let SubtargetPredicate = isSI in {
//===----------------------------------------------------------------------===//
+// EXP Instructions
+//===----------------------------------------------------------------------===//
+
+defm EXP : EXP_m;
+
+//===----------------------------------------------------------------------===//
// SMRD Instructions
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud