Browse Source

Fixed bug in peephole optimizer.

git-svn-id: branches/laksen/riscv_new@39486 -
Jeppe Johansen 7 years ago
parent
commit
a906feb05e
2 changed files with 9 additions and 0 deletions
  1. 8 0
      compiler/riscv/aasmcpu.pas
  2. 1 0
      compiler/riscv64/aoptcpu.pas

+ 8 - 0
compiler/riscv/aasmcpu.pas

@@ -527,6 +527,14 @@ uses cutils, cclasses;
     function taicpu.spilling_get_operation_type_ref(opnr: longint; reg: tregister): topertype;
       begin
         result := operand_read;
+        case opcode of
+{$ifdef RISCV64}
+          A_SD,
+{$endif RISCV64}
+          A_SB,A_SH,A_SW:
+            if opnr=1 then
+              result:=operand_write;
+        end;
       end;
 
 

+ 1 - 0
compiler/riscv64/aoptcpu.pas

@@ -112,6 +112,7 @@ implementation
                      (hp1.typ=ait_instruction) and         
                      (taicpu(hp1).opcode=A_ADDI) and
                      (taicpu(hp1).ops=3) and
+                     (taicpu(p).oper[0]^.reg=taicpu(hp1).oper[1]^.reg) and
                      (taicpu(p).oper[2]^.typ=top_const) and
                      is_imm12(taicpu(p).oper[2]^.val+taicpu(hp1).oper[2]^.val) and
                      (not RegModifiedBetween(taicpu(p).oper[1]^.reg, p,hp1)) and