Pārlūkot izejas kodu

* 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 gadi atpakaļ
vecāks
revīzija
c05fa52775
1 mainītis faili ar 5 papildinājumiem un 0 dzēšanām
  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);
           list.concat(taillvm.op_size_ref_size_ref(la_store,fromsize,sref,cpointerdef.getreusable(tosize),sdref));
         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
         inherited
     end;