소스 검색

* call g_concatcopy() from a_load_ref_ref() if the size of the to be copied
data is big, because large load/store operations result in very slow code
(and takes forever to generate by llc)

git-svn-id: trunk@34135 -

Jonas Maebe 9 년 전
부모
커밋
c05fa52775
1개의 변경된 파일5개의 추가작업 그리고 0개의 파일을 삭제
  1. 5 0
      compiler/llvm/hlcgllvm.pas

+ 5 - 0
compiler/llvm/hlcgllvm.pas

@@ -810,6 +810,11 @@ implementation
           sdref:=make_simple_ref(list,dref,tosize);
           sdref:=make_simple_ref(list,dref,tosize);
           list.concat(taillvm.op_size_ref_size_ref(la_store,fromsize,sref,cpointerdef.getreusable(tosize),sdref));
           list.concat(taillvm.op_size_ref_size_ref(la_store,fromsize,sref,cpointerdef.getreusable(tosize),sdref));
         end
         end
+      else if (fromsize=tosize) and
+              not(fromsize.typ in [orddef,floatdef,enumdef]) and
+              (sref.refaddr<>addr_full) and
+              (fromsize.size>2*sizeof(aint)) then
+         g_concatcopy(list,fromsize,sref,dref)
       else
       else
         inherited
         inherited
     end;
     end;