projects
/
mesa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
29a1d6a
)
r300/compiler: In the peephole optimizer, ELSE should mark the end of a
author
Tom Stellard
<tstellar@gmail.com>
Tue, 15 Jun 2010 05:30:02 +0000
(22:30 -0700)
committer
Marek Olšák
<maraeo@gmail.com>
Sat, 3 Jul 2010 02:27:09 +0000
(
04:27
+0200)
block.
src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
patch
|
blob
|
history
diff --git
a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
index 21d72108886358044a4492a47bcc0434726f0c4b..e760b59bd41432e8972040bd43b7d0e557f27c42 100644
(file)
--- a/
src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
+++ b/
src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
@@
-75,6
+75,15
@@
struct peephole_state {
int BranchDepth;
};
int BranchDepth;
};
+/**
+ * This is a callback function that is meant to be passed to
+ * rc_for_all_reads_mask. This function will be called once for each source
+ * register in inst.
+ * @param inst The instruction that the source register belongs to.
+ * @param file The register file of the source register.
+ * @param index The index of the source register.
+ * @param mask The components of the source register that are being read from.
+ */
static void peephole_scan_read(void * data, struct rc_instruction * inst,
rc_register_file file, unsigned int index, unsigned int mask)
{
static void peephole_scan_read(void * data, struct rc_instruction * inst,
rc_register_file file, unsigned int index, unsigned int mask)
{
@@
-161,7
+170,8
@@
static void peephole(struct radeon_compiler * c, struct rc_instruction * inst_mo
if (s.BranchDepth >= 0) {
if (inst->U.I.Opcode == RC_OPCODE_IF) {
s.BranchDepth++;
if (s.BranchDepth >= 0) {
if (inst->U.I.Opcode == RC_OPCODE_IF) {
s.BranchDepth++;
- } else if (inst->U.I.Opcode == RC_OPCODE_ENDIF) {
+ } else if (inst->U.I.Opcode == RC_OPCODE_ENDIF
+ || inst->U.I.Opcode == RC_OPCODE_ELSE) {
s.BranchDepth--;
if (s.BranchDepth < 0) {
s.DefinedMask &= ~s.MovMask;
s.BranchDepth--;
if (s.BranchDepth < 0) {
s.DefinedMask &= ~s.MovMask;
@@
-208,7
+218,8
@@
static void peephole(struct radeon_compiler * c, struct rc_instruction * inst_mo
if (s.BranchDepth >= 0) {
if (inst->U.I.Opcode == RC_OPCODE_IF) {
s.BranchDepth++;
if (s.BranchDepth >= 0) {
if (inst->U.I.Opcode == RC_OPCODE_IF) {
s.BranchDepth++;
- } else if (inst->U.I.Opcode == RC_OPCODE_ENDIF) {
+ } else if (inst->U.I.Opcode == RC_OPCODE_ENDIF
+ || inst->U.I.Opcode == RC_OPCODE_ELSE) {
s.BranchDepth--;
if (s.BranchDepth < 0)
break; /* no more readers after this point */
s.BranchDepth--;
if (s.BranchDepth < 0)
break; /* no more readers after this point */