summaryrefslogtreecommitdiff
path: root/compiler/nadd.pas
Commit message (Collapse)AuthorAgeFilesLines
* * last commit fixed, hopefully final fixflorian2021-03-061-1/+1
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48886 3ad0048d-3df7-0310-abae-a5850022a9f2
* * improved last commit, better handling of boolean expressionsflorian2021-03-061-1/+1
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48885 3ad0048d-3df7-0310-abae-a5850022a9f2
* * do not apply the (a and b) or (c and not(b)) into c xor ((c xor a) and ↵florian2021-03-061-0/+1
| | | | | | | | b) optimziation if short boolean evaluation is used, should resolve #38576 * improved test git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48884 3ad0048d-3df7-0310-abae-a5850022a9f2
* + optimize (a and b) or (c and not(b)) into c xor ((c xor a) and b)florian2021-02-281-0/+36
| | | | | | + test git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48841 3ad0048d-3df7-0310-abae-a5850022a9f2
* + apply excess precision also to unary minus nodesflorian2021-02-281-1/+5
| | | | | | * made excess precision really working git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48840 3ad0048d-3df7-0310-abae-a5850022a9f2
* * Removed/ifdefed lots of unused variables.yury2021-01-241-2/+1
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48384 3ad0048d-3df7-0310-abae-a5850022a9f2
* * clean upflorian2021-01-031-4/+0
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48011 3ad0048d-3df7-0310-abae-a5850022a9f2
* + fold also (string const+(string const+string var))florian2021-01-021-23/+62
| | | | | | * string tree folding code moved into level 2 opt. block git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47986 3ad0048d-3df7-0310-abae-a5850022a9f2
* * properly fold string+string const+string const., resolves #38267florian2021-01-021-3/+20
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47977 3ad0048d-3df7-0310-abae-a5850022a9f2
* * refactored constant folding codeflorian2021-01-011-67/+80
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47935 3ad0048d-3df7-0310-abae-a5850022a9f2
* * first part of fixing #38267: do not bail out early during constant foldingflorian2021-01-011-20/+9
| | | | | | if the constant is 1 or -1 git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47933 3ad0048d-3df7-0310-abae-a5850022a9f2
* * don't do x*x -> optimziation for xtensa as it causes a recursive call in ↵florian2020-12-041-0/+3
| | | | | | sqr(...) git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47688 3ad0048d-3df7-0310-abae-a5850022a9f2
* * correctly simplify tree transforms of (a+c1+c2) if a is a pointer, ↵florian2020-11-161-2/+6
| | | | | | resolves #37671 git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47437 3ad0048d-3df7-0310-abae-a5850022a9f2
* * simplified and fixed code of (v1=const1) and (v2=const2) optimization, ↵florian2020-11-151-31/+21
| | | | | | resolves #38066 git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47423 3ad0048d-3df7-0310-abae-a5850022a9f2
* * excess precision should not be applied to comp or currencyflorian2020-10-281-1/+2
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47246 3ad0048d-3df7-0310-abae-a5850022a9f2
* * directly copy the result of set <op> set into the left side of an assignmentflorian2020-10-271-23/+46
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47226 3ad0048d-3df7-0310-abae-a5850022a9f2
* * try_make_mul32to64: restore original node order if transformation failedjonas2020-10-231-2/+10
| | | | | | | o this gets called by taddnode.pass_1, which caches the left/right node types/resultdefs git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47158 3ad0048d-3df7-0310-abae-a5850022a9f2
* * fix try_make_mul32to64() if it's called with a constant node on thejonas2020-10-191-5/+4
| | | | | | | left (mantis #37878) o can happen if use_generic_mul32to64 returns false git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47142 3ad0048d-3df7-0310-abae-a5850022a9f2
* * patch by Marģers to unify internal error numbers, resolves #37888florian2020-10-131-1/+1
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47103 3ad0048d-3df7-0310-abae-a5850022a9f2
* + optimize comparisons of constant pointersflorian2020-10-011-0/+28
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47031 3ad0048d-3df7-0310-abae-a5850022a9f2
* + evaluate typeinfo(<type1>)=/<>typeinfo(<type2>) at compile time, resolves ↵florian2020-09-291-1/+22
| | | | | | #30260 git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@47008 3ad0048d-3df7-0310-abae-a5850022a9f2
* * don't perform "(x=y) or (z=u)" -> "(x xor y) or (z xor u)" optimizationjonas2020-09-201-1/+1
| | | | | | if z or u may raise exceptions (mantis #37780) git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46905 3ad0048d-3df7-0310-abae-a5850022a9f2
* * In the TP mode for 16-bit CPUs uint8+uint8 is extended to sint16+sint16. ↵yury2020-08-171-0/+4
| | | | | | This is TP compatible. git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46468 3ad0048d-3df7-0310-abae-a5850022a9f2
* * do not apply range test optimization if the variable is a string being ↵florian2020-08-151-2/+4
| | | | | | compared against a char constants, resolves #37476 git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46453 3ad0048d-3df7-0310-abae-a5850022a9f2
* * insert type casts when creating new unaryminus nodes during ↵florian2020-08-071-5/+5
| | | | | | simplification, resolves #37508 git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46309 3ad0048d-3df7-0310-abae-a5850022a9f2
* * reverted r46220 as it is fixed now properlyflorian2020-08-051-2/+2
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46276 3ad0048d-3df7-0310-abae-a5850022a9f2
* * For 8/16 bit CPUs and TP mode, disable expansion to a larger integer type ↵yury2020-08-041-1/+5
| | | | | | for subtract operations on unsigned integers. This is TP7 compatible. git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46233 3ad0048d-3df7-0310-abae-a5850022a9f2
* * fix for Mantis #36775: apply patch by J. Gareth Moretonsvenbarth2020-08-031-1/+1
| | | | | | + added tests git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46220 3ad0048d-3df7-0310-abae-a5850022a9f2
* * replace explicit (sometimes incomplete) tests with calls to ↵jonas2020-08-021-63/+40
| | | | | | | | | doshortbooleval() * the c-style boolean evaluation of "and" is independent of short-circuit evaluation (you always have to consider the complete values in case the first one is <> 0) git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45990 3ad0048d-3df7-0310-abae-a5850022a9f2
* * optimize a/a and a-a if fast math is onflorian2020-06-091-2/+16
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45630 3ad0048d-3df7-0310-abae-a5850022a9f2
* + optimize real operations with 0 and 1 if fast math is turned onflorian2020-06-081-0/+67
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45627 3ad0048d-3df7-0310-abae-a5850022a9f2
* * extended r45555 to take care of chars as wellflorian2020-06-021-2/+6
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45565 3ad0048d-3df7-0310-abae-a5850022a9f2
* * a nil node is also a constant pointer nodeflorian2020-06-011-1/+70
| | | | | | + convert (v1=const1) and (v2=const2) into ((v1 xor const1) or (v2 xor const2))=0 if the expressions have no side effects git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45555 3ad0048d-3df7-0310-abae-a5850022a9f2
* * simplify constant expressions after re-ordering, resolves #37062florian2020-05-131-0/+2
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45360 3ad0048d-3df7-0310-abae-a5850022a9f2
* * cosmeticsflorian2020-05-101-4/+2
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45327 3ad0048d-3df7-0310-abae-a5850022a9f2
* * avoid unncessary conversions of constants in 64 bit ints when doing ↵florian2020-05-101-1/+14
| | | | | | constant folding git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45326 3ad0048d-3df7-0310-abae-a5850022a9f2
* * propagate forinlineflorian2020-05-091-1/+1
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45319 3ad0048d-3df7-0310-abae-a5850022a9f2
* * GetCopyAndTypeCheck forces correct typeflorian2020-05-011-1/+2
| | | | | | * propagate forinline flag through simplify git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45213 3ad0048d-3df7-0310-abae-a5850022a9f2
* + set expectloc in the first pass of the addnode for small CPUs for ↵nickysn2020-04-231-1/+4
| | | | | | procvardef comparisons git-svn-id: https://svn.freepascal.org/svn/fpc/branches/z80@45044 3ad0048d-3df7-0310-abae-a5850022a9f2
* * set expectloc correctly for procvardef comparisons with nil for small CPUsnickysn2020-04-231-1/+5
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/branches/z80@45043 3ad0048d-3df7-0310-abae-a5850022a9f2
* + set expectloc correctly for small CPUs in the first pass of the add node ↵nickysn2020-04-231-1/+4
| | | | | | for classrefdefs git-svn-id: https://svn.freepascal.org/svn/fpc/branches/z80@45042 3ad0048d-3df7-0310-abae-a5850022a9f2
* * set expectloc correctly for small CPUs for implicit pointer object types ↵nickysn2020-04-231-1/+4
| | | | | | in the first pass of the add nodes git-svn-id: https://svn.freepascal.org/svn/fpc/branches/z80@45041 3ad0048d-3df7-0310-abae-a5850022a9f2
* * set expectloc correctly for enumdef comparisons on small CPUsnickysn2020-04-231-1/+4
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/branches/z80@45040 3ad0048d-3df7-0310-abae-a5850022a9f2
* + also support the 8-bit mul helpers in the generic code of naddnickysn2020-04-221-0/+4
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/branches/z80@44990 3ad0048d-3df7-0310-abae-a5850022a9f2
* * compilation for non-Xtensa targets fixedflorian2020-04-031-0/+2
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@44543 3ad0048d-3df7-0310-abae-a5850022a9f2
* * factor out first_addfloat_softflorian2020-04-031-15/+21
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@44540 3ad0048d-3df7-0310-abae-a5850022a9f2
* * do not do full boolean evaluation on LOC_FLAGSflorian2020-03-061-1/+1
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@44270 3ad0048d-3df7-0310-abae-a5850022a9f2
* * fold also pointer additions/subtractionsflorian2020-02-161-10/+12
| | | | git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@44199 3ad0048d-3df7-0310-abae-a5850022a9f2
* * in case a 32x32 -> 64 multiplication is converted into shl, the type ↵florian2020-02-161-0/+4
| | | | | | casts need to be restored git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@44197 3ad0048d-3df7-0310-abae-a5850022a9f2
* * do not fold constants if the resulttypes do not match, improved fix for ↵florian2020-02-131-6/+8
| | | | | | #tw26587 git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@44165 3ad0048d-3df7-0310-abae-a5850022a9f2