[Sparc] Use addxcc/subxcc for adde/sube instead of addx/subx.

addx/subx does not modify conditional codes whereas addxcc/subxx does.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192053 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Venkatraman Govindaraju 2013-10-06 02:11:10 +00:00
parent 984fbe6c65
commit bb0ec9840b
2 changed files with 43 additions and 4 deletions

View File

@ -504,13 +504,13 @@ def LEA_ADDri : F3_2<2, 0b000000,
let Defs = [ICC] in
defm ADDCC : F3_12<"addcc", 0b010000, addc>;
let Uses = [ICC] in
defm ADDX : F3_12<"addx", 0b001000, adde>;
let Uses = [ICC], Defs = [ICC] in
defm ADDX : F3_12<"addxcc", 0b001000, adde>;
// Section B.15 - Subtract Instructions, p. 110
defm SUB : F3_12 <"sub" , 0b000100, sub>;
let Uses = [ICC] in
defm SUBX : F3_12 <"subx" , 0b001100, sube>;
let Uses = [ICC], Defs = [ICC] in
defm SUBX : F3_12 <"subxcc" , 0b001100, sube>;
let Defs = [ICC] in
defm SUBCC : F3_12 <"subcc", 0b010100, subc>;

View File

@ -135,3 +135,42 @@ exit.0:
exit.1:
ret i32 1
}
; V8-LABEL: test_adde_sube
; V8: addcc
; V8: addxcc
; V8: addxcc
; V8: addxcc
; V8: subcc
; V8: subxcc
; V8: subxcc
; V8: subxcc
; V9-LABEL: test_adde_sube
; V9: addcc
; V9: addxcc
; V9: addxcc
; V9: addxcc
; V9: subcc
; V9: subxcc
; V9: subxcc
; V9: subxcc
define void @test_adde_sube(i8* %a, i8* %b, i8* %sum, i8* %diff) {
entry:
%0 = bitcast i8* %a to i128*
%1 = bitcast i8* %b to i128*
%2 = load i128* %0
%3 = load i128* %1
%4 = add i128 %2, %3
%5 = bitcast i8* %sum to i128*
store i128 %4, i128* %5
tail call void asm sideeffect "", "=*m,*m"(i128 *%0, i128* %5) nounwind
%6 = load i128* %0
%7 = sub i128 %2, %6
%8 = bitcast i8* %diff to i128*
store i128 %7, i128* %8
ret void
}