summaryrefslogtreecommitdiff
path: root/lib/Target/R600/R600Instructions.td
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/R600/R600Instructions.td')
-rw-r--r--lib/Target/R600/R600Instructions.td24
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/Target/R600/R600Instructions.td b/lib/Target/R600/R600Instructions.td
index 361fc9816b..e0b2a8c3ff 100644
--- a/lib/Target/R600/R600Instructions.td
+++ b/lib/Target/R600/R600Instructions.td
@@ -897,6 +897,7 @@ class CF_WORD1_EG {
bits<2> COND;
bits<6> COUNT;
bits<1> VALID_PIXEL_MODE;
+ bits<1> END_OF_PROGRAM;
bits<8> CF_INST;
bits<1> BARRIER;
@@ -919,6 +920,7 @@ ins, AsmPrint, [] >, CF_WORD0_EG, CF_WORD1_EG {
let CF_CONST = 0;
let VALID_PIXEL_MODE = 0;
let COND = 0;
+ let END_OF_PROGRAM = 0;
let Inst{31-0} = Word0;
let Inst{63-32} = Word1;
@@ -934,6 +936,10 @@ def STACK_SIZE : AMDGPUInst <(outs),
let Inst = num;
}
+def PAD : AMDGPUInst <(outs), (ins), "PAD", [] > {
+ field bits<64> Inst;
+}
+
let Predicates = [isR600toCayman] in {
//===----------------------------------------------------------------------===//
@@ -1486,6 +1492,12 @@ let Predicates = [isR600] in {
"POP @$ADDR POP:$POP_COUNT"> {
let COUNT = 0;
}
+ def CF_END_R600 : CF_CLAUSE_R600<0, (ins), "CF_END"> {
+ let COUNT = 0;
+ let POP_COUNT = 0;
+ let ADDR = 0;
+ let END_OF_PROGRAM = 1;
+ }
}
@@ -1690,7 +1702,12 @@ let hasSideEffects = 1 in {
"POP @$ADDR POP:$POP_COUNT"> {
let COUNT = 0;
}
-
+ def CF_END_EG : CF_CLAUSE_EG<0, (ins), "CF_END"> {
+ let COUNT = 0;
+ let POP_COUNT = 0;
+ let ADDR = 0;
+ let END_OF_PROGRAM = 1;
+ }
//===----------------------------------------------------------------------===//
// Memory read/write instructions
@@ -1935,6 +1952,11 @@ def : Pat <
(MOV_IMM_I32 CONST.FP_UINT_MAX_PLUS_1)))
>;
+ def CF_END_CM : CF_CLAUSE_EG<32, (ins), "CF_END"> {
+ let ADDR = 0;
+ let POP_COUNT = 0;
+ let COUNT = 0;
+ }
def : Pat<(fsqrt R600_Reg32:$src),
(MUL R600_Reg32:$src, (RECIPSQRT_CLAMPED_cm R600_Reg32:$src))>;