Mips patches for LLVM 3.5.2

Hi Tom,

I’ve got a few patches that I’d like to get into 3.5.2 if I can.

· r230235 - [mips] Honour -mno-odd-spreg for vector insert/extract when MSA is enabled.

o Fixes a failure in the test-suite when -mno-odd-spreg and -mmsa are used together.

· r227089 - [mips] Enable arithmetic and binary operations for the i128 data type.

o This fixes an instruction selection failure reported by Android and a Debian package maintainer.

· r227087 - [mips] Add tests for bitwise binary and integer arithmetic operators.

o Required to make r227089 apply cleanly.

· Testcase from r221686 - [mips] Add preliminary support for the MIPS II target.

o Only the testcase minus the MIPS-II cases should be merged.

o Required to make r227089 apply cleanly.

· r226171 - [mips] Fix a typo in the compare patterns for MIPS32r6/MIPS64r6.

o Fixes bad code generation in the test-suite for certain option combinations.

· r225529 - [mips] Add support for accessing $gp as a named register.

o Fixes bad code generation in LLVMLinux

· r224425 and r225521 - [mips] Set GCC-compatible MIPS asssembler options before inline asm blocks.

o Fixes bad code generation in LLVMLinux

o Makes our inline assembly compatible with GCC’s.

If you’re ok with these then I’ll start merging them in advance of 3.5.2-rc1.

I was considering these too but I decided against them:

· r226652 - [Mips][Disassembler]When disassembler meets load/store from coprocessor 2 instructions for mips r6 it crashes as the access to operands array is out of range. This patch adds dedicated decoder method that properly handles decoding of these instructions.

o LLVM 3.5.2 doesn’t have any of the test cases it modifies. I could merge the testcases too but I’m not aware of any downstream projects that need this fix.

· r227005 - [mips] Fix ‘jumpy’ debug line info around calls.

o The original is fairly safe, but it doesn’t apply cleanly and would need some re-work that doesn’t look trivial.

· r227430 - [Mips][Disassembler] When disassembler meets cache/pref instructions for r6 it crashes as the access to operands array is out of range. This patch adds dedicated decoder method for R6 CACHE_HINT_DESC class that properly handles decoding of these instructions.

o LLVM 3.5.2 doesn’t have any of the test cases it modifies. I could merge the testcases too but I’m not aware of any downstream projects that need this fix.

Daniel Sanders

Leading Software Design Engineer, MIPS Processor IP

Imagination Technologies Limited

www.imgtec.com

Hi Tom,

I've got a few patches that I'd like to get into 3.5.2 if I can.

* r230235 - [mips] Honour -mno-odd-spreg for vector insert/extract when MSA is enabled.

o Fixes a failure in the test-suite when -mno-odd-spreg and -mmsa are used together.

* r227089 - [mips] Enable arithmetic and binary operations for the i128 data type.

o This fixes an instruction selection failure reported by Android and a Debian package maintainer.

* r227087 - [mips] Add tests for bitwise binary and integer arithmetic operators.

o Required to make r227089 apply cleanly.

* Testcase from r221686 - [mips] Add preliminary support for the MIPS II target.

o Only the testcase minus the MIPS-II cases should be merged.

o Required to make r227089 apply cleanly.

* r226171 - [mips] Fix a typo in the compare patterns for MIPS32r6/MIPS64r6.

o Fixes bad code generation in the test-suite for certain option combinations.

* r225529 - [mips] Add support for accessing $gp as a named register.

o Fixes bad code generation in LLVMLinux

* r224425 and r225521 - [mips] Set GCC-compatible MIPS asssembler options before inline asm blocks.

o Fixes bad code generation in LLVMLinux

o Makes our inline assembly compatible with GCC's.

If you're ok with these then I'll start merging them in advance of 3.5.2-rc1.

These all LGTM, go ahead and merge. Also, you think any of these are
critical fixes, it would be good if you could update the release notes too.

-Tom

All merged except for:

* r224425 and r225521 - [mips] Set GCC-compatible MIPS asssembler options before inline asm blocks.
Fixes bad code generation in LLVMLinux
Makes our inline assembly compatible with GCC's.

It turns out that these two patches depend on:
* r217254 - [mips] Rename data members and member functions in MipsAssemblerOptions.
* r217432 - [mips] Add assembler support for .set push/pop directive.

Is it ok to merge those two too?

All merged except for:

> * r224425 and r225521 - [mips] Set GCC-compatible MIPS asssembler options before inline asm blocks.
> Fixes bad code generation in LLVMLinux
> Makes our inline assembly compatible with GCC's.

It turns out that these two patches depend on:
* r217254 - [mips] Rename data members and member functions in MipsAssemblerOptions.
* r217432 - [mips] Add assembler support for .set push/pop directive.

Is it ok to merge those two too?

Sure, LGTM.

-Tom