v0.6.4 (2020-09-06)¶
- Fixes:
- build: fix version.h dependencies
- fix and complete the evaluation of atomic builtins
- fix some testcases related to bitfield manipulation
- llvm: fix crash with llvm-11 / use real phi-nodes
- fix: OP_INLINE should not use the function symbol
- fix testing if a OP_CALL’s function is pure
- warn on all missing parameter types
- fix init_linearized_builtins()
- fix usage count in linearize_fma()
- linearize: fix a couple of ‘selfcheck’ warnings
- cfg: remove phi-sources when merging BBs
- cfg: remove phi-nodes when merging BBs
- cfg: add missing REPEAT_CFG_CLEANUP
- fix: rebuild dominance tree during CFG cleanup
- fix: drop qualifiers of casts and comma or statement expressions
- fix kill_insn(OP_SETVAL)
- fix trivial_phi() when the target is before the single value
- memops: fix wrong killing of stores partially dominated by a load
- memops: kill dead loads before phi-node conversion
- memops: kill more dead stores
- fix rem_usage() when the pseudo has a use list but is not PSEUDO_REG
- shut up a silly -Wmaybe-uninitialized warning
- fix add_join_conditional() when one of the alternative is VOID
- asm: fix killing OP_ASM
- asm: fix a test failure on 32-bit systems
- asm: output memory operands need their address as input
- asm: teach dominates() about OP_ASM
- fix the type in the assignment of 0 to a restricted variable
- fix SSA conversion of mismatched memops
- fix and improve the check that protects try_to_simplify_bb()
- fix remove_merging_phisrc() with duplicated CFG edges.
- fix null-pointer crash with with ident same as one of the attributes
- New:
- improve CFG simplification
- teach sparse about -funsigned-bitfields
- add a symbolic checker
- expand __builtin_object_size()
- let plain bitfields default to signed
- add support for __packed struct
- handle qualified anonymous structures
- move check_access() to late_warnings()
- let phi-sources to directly access to their phi-node
- small improvements to the ptrlist API
- warn when taking the address of a built-in function
- handle more graciously labels with no statement
- give an explicit type to compare’s operands
- give a type to OP_SYMADDR
- add some notes about pseudos being typeless
- shrink struct basic_block
- pre-proc: strip leading “./” from include paths
- pre-proc: do some path normalization
- linearize __builtin_isdigit()
- IR Simplifications:
- simplify: essential OP_ADD & OP_SUB simplifications
- simplify and canonicalize unsigned compares
- simplify: basic unop simplifications
- simplify SEL(SEL(…), …)
- simplify SEL(x == y, x, y) and friends
- simplify SEL(x, x, x) and SEL(x, 0, x)
- simplify & canonicalize compares
- simplify CBR-CBR on the same condition
- simplify unrestricted postop
- simplification of computed gotos with 1 or 2 targets
- simplify kill_insn() of unops and unop-ish instructions
- simplify: put PSEUDO_ARGS and PSEUDO_REGs in canonical order too
- simplify (~x {&,|,^} x) –> {0,~0,~0}
- simplify ((x cmp y) {&,|,^} (x !cmp y)) –> {0,1,1}
- simplify LSR + SEXT into ASR
- simplify and canonicalize signed compares
- simplify CMP(AND(x,M), C) and CMP(OR(x,M), C)
- simplify AND(x >= 0, x < C) –> (unsigned)x < C
- simplify TRUNC(x) {==,!=} C –> AND(x,M) {==,!=} C
- simplify of TRUNC(NOT(x)) –> NOT(TRUNC(x))
- factorize (x OP1 z) OP2 (y OP1 z) into (x OP2 y) OP1 z
- factorize SHIFT(x, s) OP SHIFT(y, s) into SHIFT((x OP y), s)
- factorize SEL(x, OP(y,z), y) into OP(SEL(x, z, 0), y)
- convert SEL(x & BIT1, BIT2, 0) into SHIFT(x & BIT1, S)
- canonicalize ((x & M) == M) –> ((x & M) != 0) when M is a power-of-2
- Testsuite:
- testsuite: add new tags: check-output-{match,returns}
- testsuite: fix parsing of tags used in the testcases
- testsuite: add option ‘-r’ to ‘test-suite format’
- Documentation:
- doc: fix: Sphinx’s option ‘:noindex:’ renamed into ‘:noindexentry:’
- doc: fix extracted autodoc when short description ends with a ‘?’
- doc: add some doc about using NULL or VOID in pointer lists
- doc: add some doc to flowgraph.h
- doc: extract doc related to simplification
- Cleanups:
- slice: small reorg of OP_SLICE in preparation for some incoming changes
- cleanup: removed an unused parameter for show_symbol_list()
- cleanup linearize_cond_branch()
- cleanup: remove unneeded REPEAT_SYMBOL_CLEANUP
- cleanup: no needs to use MARK_CURRENT_DELETED() for multi-jumps
- linearize: remove unneeded forward declarations
- linearize: only allocate call instructions when needed