[mips][mips64r6] [ls][dw][lr] are not available in MIPS32r6/MIPS64r6
authorDaniel Sanders <daniel.sanders@imgtec.com>
Fri, 23 May 2014 13:18:02 +0000 (13:18 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Fri, 23 May 2014 13:18:02 +0000 (13:18 +0000)
commit36b0fd51de0c2883e5e715287691a2f3d9623c05
treea2c6367110bbe10efdcfece0bf00d3e658833fe6
parentf2938bf8dae4dd7ef762e521c63d34767ffcd61c
[mips][mips64r6] [ls][dw][lr] are not available in MIPS32r6/MIPS64r6

Summary:
Instead the system is required to provide some means of handling unaligned
load/store without special instructions. Options include full hardware
support, full trap-and-emulate, and hybrids such as hardware support within
a cache line and trap-and-emulate for multi-line accesses.

MipsSETargetLowering::allowsUnalignedMemoryAccesses() has been configured to
assume that unaligned accesses are 'fast' on the basis that I expect few
hardware implementations will opt for pure-software handling of unaligned
accesses. The ones that do handle it purely in software can override this.

mips64-load-store-left-right.ll has been merged into load-store-left-right.ll

The stricter testing revealed a Bits!=Bytes bug in passByValArg(). This has
been fixed and the variables renamed to clarify the units they hold.

Reviewers: zoran.jovanovic, jkolek, vmedic

Reviewed By: vmedic

Differential Revision: http://reviews.llvm.org/D3872

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209512 91177308-0d34-0410-b5e6-96231b3b80d8
15 files changed:
lib/Target/Mips/Mips32r6InstrInfo.td
lib/Target/Mips/Mips64InstrInfo.td
lib/Target/Mips/Mips64r6InstrInfo.td
lib/Target/Mips/MipsISelDAGToDAG.cpp
lib/Target/Mips/MipsISelLowering.cpp
lib/Target/Mips/MipsInstrInfo.td
lib/Target/Mips/MipsSEISelLowering.cpp
lib/Target/Mips/MipsSubtarget.h
test/CodeGen/Mips/load-store-left-right.ll
test/CodeGen/Mips/mips64load-store-left-right.ll [deleted file]
test/CodeGen/Mips/unalignedload.ll
test/MC/Mips/mips32r6/invalid-mips1-wrong-error.s [new file with mode: 0644]
test/MC/Mips/mips64r6/invalid-mips1-wrong-error.s [new file with mode: 0644]
test/MC/Mips/mips64r6/invalid-mips3-wrong-error.s [new file with mode: 0644]
test/MC/Mips/mips64r6/invalid-mips3.s [new file with mode: 0644]