[ARC] Propagate uncached type attribute to each member of a struct.
authorClaudiu Zissulescu <claziss@gmail.com>
Mon, 27 Jan 2020 12:51:03 +0000 (14:51 +0200)
committerClaudiu Zissulescu <claziss@gmail.com>
Mon, 27 Jan 2020 12:51:03 +0000 (14:51 +0200)
commit62a715c706d8482560dadfa9ead0766f3c20e434
tree3baedb4dc834dcf675bd8f39c44eba8b6b4254fc
parent2744b8b286cbdeecbb6ab03e015dc847a2fb42a2
[ARC] Propagate uncached type attribute to each member of a struct.

Like `packed` type attribute, the ARC's `uncached` type attribute
needs to be propagated to each member of the struct where it is used,
triggering the .di flag for any access of the struct members. However,
any complex CFG manipulation may drop memory pointer type attributes,
leading to the impossibility to discriminate the direct accesses from
normal ones. To solve this issue, we will treat the direct memory
accessed specially via unspecs.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
Petro Karashchenko  <petro.karashchenko@ring.com>

* config/arc/arc.c (arc_is_uncached_mem_p): Check struct
attributes if needed.
(prepare_move_operands): Generate special
unspec instruction for direct access.
(arc_isuncached_mem_p): Propagate uncached attribute to each
structure member.
* config/arc/arc.md (VUNSPEC_ARC_LDDI): Define.
(VUNSPEC_ARC_STDI): Likewise.
(ALLI): New mode iterator.
(mALLI): New mode attribute.
(lddi): New instruction pattern.
(stdi): Likewise.
(stdidi_split): Split instruction for architectures which are not
supporting ll64 option.
(lddidi_split): Likewise.

testsuite/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
Petro Karashchenko  <petro.karashchenko@ring.com>

* gcc.target/arc/uncached-1.c: Update test.
* gcc.target/arc/uncached-2.c: Likewise.
* gcc.target/arc/uncached-3.c: New test.
* gcc.target/arc/uncached-4.c: Likewise.
* gcc.target/arc/uncached-5.c: Likewise.
* gcc.target/arc/uncached-6.c: Likewise.
* gcc.target/arc/uncached-7.c: Likewise.
* gcc.target/arc/uncached-8.c: Likewise.
* gcc.target/arc/arc.exp (ll64): New predicate.
13 files changed:
gcc/ChangeLog
gcc/config/arc/arc.c
gcc/config/arc/arc.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arc/arc.exp
gcc/testsuite/gcc.target/arc/uncached-1.c
gcc/testsuite/gcc.target/arc/uncached-2.c
gcc/testsuite/gcc.target/arc/uncached-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/uncached-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/uncached-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/uncached-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/uncached-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arc/uncached-8.c [new file with mode: 0644]