nv50: cannot move from local mem to output reg directly
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sun, 12 Sep 2010 09:19:24 +0000 (11:19 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sun, 12 Sep 2010 09:41:57 +0000 (11:41 +0200)
src/gallium/drivers/nv50/nv50_pc.c
src/gallium/drivers/nv50/nv50_pc_optimize.c
src/gallium/drivers/nv50/nv50_pc_print.c

index 26ad9b4e3db9e0c063d1e03b74d170c5e72eb4e0..0511acfd5714a7a8ccfad5f0cd6a865111c07cf2 100644 (file)
@@ -57,6 +57,7 @@ nv50_indirect_opnd(struct nv_instruction *i)
    switch (i->opcode) {
    case NV_OP_MOV:
    case NV_OP_LDA:
+   case NV_OP_STA:
       return 0;
    default:
       return 1;
@@ -341,7 +342,7 @@ nv_print_program(struct nv_pc *pc)
          nv_print_function(pc->root[i]);
 }
 
-#ifdef NV50_PC_DEBUG
+#ifdef NV50PC_DEBUG
 static void
 nv_do_print_cfgraph(struct nv_pc *pc, FILE *f, struct nv_basic_block *b)
 {
index edda6c0691f7380bd5adccd58c2b977b38c39a81..8653bc6e6340053e660f64ea510d141691ebcfd2 100644 (file)
@@ -327,7 +327,8 @@ nv_pass_fold_stores(struct nv_pass *ctx, struct nv_basic_block *b)
 
       /* cannot write to $oX when using immediate */
       for (j = 0; j < 4 && nvi->src[j]; ++j)
-         if (nvi->src[j]->value->reg.file == NV_FILE_IMM)
+         if (nvi->src[j]->value->reg.file == NV_FILE_IMM ||
+             nvi->src[j]->value->reg.file == NV_FILE_MEM_L)
             break;
       if (j < 4 && nvi->src[j])
          continue;
index a71401979c364e561b333648209b489b39e7c4f6..984f6cbe172674e6a537548bc56710565694e773 100644 (file)
@@ -220,7 +220,7 @@ nv_print_value(struct nv_value *value, struct nv_value *ind, ubyte type)
       PRINT(" %s%cc%i", mgta, reg_pfx, nv_value_id(value));
       break;
    case NV_FILE_MEM_L:
-      nv_print_address('l', -1, ind, 4 * nv_value_id(value));
+      nv_print_address('l', -1, ind, nv_value_id(value));
       break;
    case NV_FILE_MEM_S:
       nv_print_address('s', -1, ind, 4 * nv_value_id(value));