Commit Graph

451 Commits

Author SHA1 Message Date
Jonas Maebe
ff8ccb06e5 * changed reverseparameters() from function into procedure: it does not make
sense as a function (the original input needed to be replaced by its
    result to make any sense), and someone already mistakenly used it like that
    in htypechk causing a bug/memory leak

git-svn-id: trunk@40729 -
2019-01-01 15:08:40 +00:00
Jonas Maebe
3ccc3e329b * prevent calling firstpass multiple times for a node (such as when
transforming inc/dec to an addn/subn in case of range checking) from
    triggering the transformation logic for accessing nested variables
    on LLVM/JVM multiple times
  * also prevent it from triggering errors during inlining, in case a
    parameter to a nested routine gets replaced by a local variable
    from a parent routine (in that case, it does not need to be
    accessed via the parentfpstruct, as we are being inlined in the
    parent) -> don't duplicate the check from pass_typecheck in pass_1,
    but check whether it needs to be accessed via the parentfpstruct
    by verifying that tloadnode.left is assigned (which pass_typecheck
    will ensure if needed)

git-svn-id: trunk@40630 -
2018-12-24 22:09:52 +00:00
Jonas Maebe
122d0d36d6 + volatile() expression that marks an expression as volatile
* disable matching volatile references in the assembler optimisers, so they
    can't be removed (more conservative than needed, but better than removing
    too many)
   o the CSE optimiser will ignore them by default, because they're an unknown
     inline node for it
  * also removed no longer used fpc_in_move_x and fpc_in_fillchar_x inline node
    identifiers from rtl/inc/innr.inc, and placed fpc_in_unaligned_x at the
    right place

git-svn-id: trunk@40465 -
2018-12-04 19:53:20 +00:00
pierre
796db4cef5 Implement mark_write override for tinilinenode
git-svn-id: trunk@40277 -
2018-11-08 20:18:30 +00:00
yury
4682ac269d * Further improvement for r40180:
An uninitialized function Result of a managed type needs special handling.
    When passing it as a var parameter a warning need to be emitted, since a user
    may expect Result to be empty (nil) by default as it happens with local vars
    of a managed type. But this is not true for Result and may lead to serious issues.

    The only exception is SetLength(Result, ?) for a string Result. A user always
    expects undefined contents of the string after calling SetLength(). In such
    case a hint need to be emitted.
+ Tests for this.

git-svn-id: trunk@40216 -
2018-11-04 15:37:52 +00:00
yury
4357caaad8 * Removed unused local vars.
git-svn-id: trunk@40183 -
2018-11-02 18:44:29 +00:00
yury
1b151df89f * Make SetLength() to emit hint "Local variable "s" of a managed type does not seem to be initialized" instead of the warning. This change is needed because when calling a regular procedure with a ver parameter of a managed type the hint is generated. Now SetLength() behaves the same.
git-svn-id: trunk@40180 -
2018-11-02 16:19:18 +00:00
pierre
d512d8cae1 Also fix first_abs_real like in rev 39988
git-svn-id: trunk@39997 -
2018-10-20 18:11:25 +00:00
florian
3078cc4b0d * same fix as in r39988 for fpc_first_sqrt
git-svn-id: trunk@39991 -
2018-10-20 10:18:45 +00:00
pierre
7d7f966ccb Fix wrong explicit typecast that lead to memory corruption in first_sqr_real
git-svn-id: trunk@39988 -
2018-10-19 23:04:55 +00:00
Jonas Maebe
0b246f3dbd * converted Boolean8 to an internal type, and mapped Boolean to the
new internal pasbool1(type) (part of mantis #34411)
   o apply the _Bool x86-64 parameter passing rules only to pasbool1

git-svn-id: trunk@39949 -
2018-10-16 21:14:18 +00:00
svenbarth
d5f0d8e306 * addendum for Mantis #34333: also complain about number of arguments with the maximum number of arguments for Copy ( = 3 ) is exceeded
git-svn-id: trunk@39836 -
2018-09-27 19:44:35 +00:00
svenbarth
76c45b1a72 * fix for Mantis #34333: improve error output for incorrect calls to Copy()
git-svn-id: trunk@39817 -
2018-09-26 21:33:51 +00:00
florian
a34d4e715c Merged riscv_new branch
git-svn-id: trunk@39813 -
2018-09-26 19:49:08 +00:00
svenbarth
bf91991bae * fix for Mantis #34332: allow 2 parameter form of Copy also for ShortString variables
+ added test

git-svn-id: trunk@39802 -
2018-09-25 19:10:06 +00:00
florian
4f052e4f90 o fix several issues with floating point exceptions
+ mask underflow and precision on startup
  + check for floating point exceptions after inlined float routine helpers
  - do not check for floating point exceptions after floating point moves 

git-svn-id: branches/laksen/riscv_new@39645 -
2018-08-19 15:26:00 +00:00
svenbarth
3d740f13e4 * ensure that the data of the temp node is freed correctly in case of an error (the error might be non-fatal in case of a generic passing an untyped type to Write/Read)
git-svn-id: trunk@39566 -
2018-08-04 08:37:07 +00:00
svenbarth
781303c0d8 * ensure that the file parameter for the Read/Write family of intrinsics is (and can be) freed in tinlinenode.handle_read_write()
git-svn-id: trunk@39565 -
2018-08-04 08:37:01 +00:00
florian
9af9658fa7 * first parameter of SetLength must be valid, as it is read
git-svn-id: trunk@39347 -
2018-06-30 11:25:43 +00:00
svenbarth
9b45f58c0b + add flags that allow checking for overloads with isbinaryoverloaded() and isunaryoverloaded() without modifying the passed in node or even checking for normally non-overloadable operators
git-svn-id: trunk@39258 -
2018-06-20 19:53:34 +00:00
svenbarth
0e5a598b6a * don't use a vecnode to convert a dynamic array or an array constructor to a pointer as that will lead to problems with range checking if the array should be empty; fixes run of tarray12 with -Cr
git-svn-id: trunk@38368 -
2018-02-27 21:43:21 +00:00
svenbarth
916ff0b92c + extend Concat() with support for dynamic arrays
+ added test

git-svn-id: trunk@37723 -
2017-12-12 19:54:08 +00:00
florian
194c0c7073 * compilation fixed
git-svn-id: trunk@37546 -
2017-11-01 16:54:08 +00:00
florian
4752b0ef96 + tinlinenode calls cpu specific routines for unknown inline numbers
git-svn-id: trunk@37543 -
2017-11-01 16:33:32 +00:00
svenbarth
f6a867ef04 * move handling of Concat to tinlinenode so that it can be easily extended for dynamic arrays
+ added test

git-svn-id: trunk@37429 -
2017-10-08 10:39:34 +00:00
svenbarth
b3ee9339b8 * also report the dynamic array "overloads" for the Insert() intrinsics
git-svn-id: trunk@37343 -
2017-09-27 21:18:04 +00:00
svenbarth
c5b33f51f9 * fix for Mantis #32412: correctly handle an incorrect parameter count for Delete() and Insert() intrinsics
+ added tests

git-svn-id: trunk@37342 -
2017-09-27 21:15:00 +00:00
svenbarth
0b02dab684 + new Delphi-compatible intrinsic GetTypeKind() which returns the TTypeKind of a type as a constant value (and thus can be optimized away in If- and Case-statements)
+ added test

git-svn-id: trunk@36875 -
2017-08-11 22:12:53 +00:00
svenbarth
29d9beb40c * initialize datatemp
git-svn-id: trunk@36308 -
2017-05-23 19:27:08 +00:00
svenbarth
72c595eefe + implement support for Insert() for dynamic arrays; the parameter that is inserted can be a dynamic or static array of the same type, an array constructor or a single element of the arrays type; all that is determined based on the second type
+ added test

git-svn-id: trunk@36307 -
2017-05-23 19:11:49 +00:00
nickysn
a7ca75a4b6 * use current node's localswitches field for checking whether range and overflow
checking is on, when handling the inc/dec inline nodes, instead of using
  current_settings.localswitches
* when creating inline nodes in the optloadmodifystore optimization pass, copy
  localswitches from the node, that is being replaced, because otherwise,
  localswitches is copied from current_settings.localswitches at the time the
  new node is created, and that can already be in a different state, since
  optloadmodifystore is performed in a separate pass, after the current
  procedure has already been parsed and in this moment, it reflects the state
  of localswitches after the end of the procedure.
* these two fixes fix a bug, where an internalerror 2017032701 can happen, when
  compiling with -O3 code that turns on and off range/overflow checking in the
  middle of a procedure.

git-svn-id: trunk@36195 -
2017-05-12 14:07:13 +00:00
nickysn
efc5e339d0 * use an enum instead of integer constants to represent inline numbers
* compinnr.inc include file converted to a unit
* inline number field size stored in ppu increased from byte to longint
* inlines in the parse tree (when written with the -vp option) now printed with
  their enum name, instead of number

git-svn-id: trunk@36174 -
2017-05-10 14:41:43 +00:00
florian
b1dff29cbf * removed unused units
git-svn-id: trunk@36165 -
2017-05-09 19:53:14 +00:00
nickysn
987cf2a9cf * fixed a bug in the maxqword check in the Rol/RorQWord(maxqword,x)->maxqword
optimization, which prevented the optimization from ever being performed. This
  should also fix the test failure of tbs/tb0627b.pp on all 64-bit platforms.

git-svn-id: trunk@36071 -
2017-05-03 15:32:48 +00:00
nickysn
f65f0b125a + optimize sar(0,x) to 0 and sar(-1,x) to -1
git-svn-id: trunk@36044 -
2017-05-01 19:12:04 +00:00
nickysn
c028362f31 * added the missing pop directive after the push directive in handle_const_rox
git-svn-id: trunk@36043 -
2017-05-01 18:25:01 +00:00
nickysn
855cd616f0 + optimize rol(0, x) and ror(0, x) to 0; also optimize the case with all ones,
e.g. rol32(ffffffff, x) = ffffffff, etc.

git-svn-id: trunk@36042 -
2017-05-01 18:19:49 +00:00
nickysn
29429cca3c + mask the shift/rotate count value in the rol/ror/sar inline nodes, before
checking for 0, so that things like sar(int32,32) can be optimized to int32,
  just like sar(int32,0)

git-svn-id: trunk@36031 -
2017-05-01 11:45:23 +00:00
nickysn
b17d97050f + also simplify rol(x,0) and ror(x,0) to x
git-svn-id: trunk@36024 -
2017-04-30 20:45:51 +00:00
nickysn
8ac84ce43a + simplify sar(x,0) to x
git-svn-id: trunk@36023 -
2017-04-30 20:24:44 +00:00
nickysn
d8ec0eff8e + implemented inline code generation for 64-bit sar (the SarInt64 intrinsic) on
less-than-64-bit CPUs that have a 64-bit OP_SHR/OP_SHL/OP_SAR implementation
  in their cg64 backend code generator. This is enabled only for i386 for now.

git-svn-id: trunk@36022 -
2017-04-30 16:06:34 +00:00
nickysn
5393daa994 + added compile time const evaluation for Bsf/Bsr(const) as well
git-svn-id: trunk@35941 -
2017-04-24 20:35:08 +00:00
nickysn
32395bbcbb + added compile time const evaluation optimization for PopCnt(const)
git-svn-id: trunk@35937 -
2017-04-24 16:11:43 +00:00
nickysn
d7c8a081a1 + enable using the cg64 ops OP_SHR/OP_SHL/OP_SAR on i386 for implementing the
64-bit in_sar/shl/shr_assign_x_y inline nodes

git-svn-id: trunk@35835 -
2017-04-18 14:36:41 +00:00
nickysn
b14f277e8f + use rtl helpers for 64-bit shl/shr/sar/rol/ror modify in place operations, on
platforms that don't have native 64-bit implementation of the corresponding
  64-bit shift/rotate operation

git-svn-id: trunk@35787 -
2017-04-13 15:24:32 +00:00
nickysn
f514657e45 + implemented the sar/shl/shr/rol/ror inline modify-in-place nodes; the actual
optimization of "i:=i shl/shr k", etc statements is not performed yet

git-svn-id: trunk@35780 -
2017-04-12 00:41:15 +00:00
nickysn
8d885ffde6 + write the inlinenumber of inline nodes in the node tree
git-svn-id: trunk@35764 -
2017-04-10 14:54:50 +00:00
nickysn
256dc546ac + implemented the in_neg_assign_x and in_not_assign_x inline nodes, which will
be used (TBD in a future commit) for optimizing x:=-x and x:=not x on CPUs
  that support performing these operations directly in memory (such as x86)

git-svn-id: trunk@35749 -
2017-04-07 16:02:40 +00:00
nickysn
fc59649a98 + added inline nodes for handling and/or/xor in place (i.e. x:=x op y, where
op=and/or/xor). They generate more optimal code on certain architectures
  (including x86). The new inline nodes aren't generated by the compiler yet,
  but will be used in the future, at certain optimization levels, whenever the
  pattern x:=x op y is detected by the compiler.

git-svn-id: trunk@35666 -
2017-03-26 23:16:53 +00:00
florian
6d6a45c034 * add/sub nodes with nf_internal set should not do overflow checking, resolves #30889
* do not convert succ/pred into add/sub nodes if nf_internal is set

git-svn-id: trunk@34896 -
2016-11-13 21:18:39 +00:00