Skip to content

Commit 2420e8b

Browse files
author
Sebastian Pop
committed
Added missing CMN case in Thumb2SizeReduction pass so that LLVM emits 16-bits encoding of CMN instructions.
llvm-svn: 156195
1 parent d6c440c commit 2420e8b

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

llvm/lib/Target/ARM/Thumb2SizeReduction.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ namespace {
6767
{ ARM::t2BICrr, 0, ARM::tBIC, 0, 0, 0, 1, 0,0, 1,0 },
6868
//FIXME: Disable CMN, as CCodes are backwards from compare expectations
6969
//{ ARM::t2CMNrr, ARM::tCMN, 0, 0, 0, 1, 0, 2,0, 0,0 },
70+
{ ARM::t2CMNzrr, ARM::tCMNz, 0, 0, 0, 1, 0, 2,0, 0,0 },
7071
{ ARM::t2CMPri, ARM::tCMPi8, 0, 8, 0, 1, 0, 2,0, 0,0 },
7172
{ ARM::t2CMPrr, ARM::tCMPhir, 0, 0, 0, 0, 0, 2,0, 0,1 },
7273
{ ARM::t2EORrr, 0, ARM::tEOR, 0, 0, 0, 1, 0,0, 1,0 },

llvm/test/CodeGen/Thumb2/thumb2-cmn.ll

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,31 @@ define i1 @f1(i32 %a, i32 %b) {
99
ret i1 %tmp
1010
}
1111
; CHECK: f1:
12-
; CHECK: cmn.w r0, r1
12+
; CHECK: cmn r0, r1
1313

1414
define i1 @f2(i32 %a, i32 %b) {
1515
%nb = sub i32 0, %b
1616
%tmp = icmp ne i32 %nb, %a
1717
ret i1 %tmp
1818
}
1919
; CHECK: f2:
20-
; CHECK: cmn.w r0, r1
20+
; CHECK: cmn r0, r1
2121

2222
define i1 @f3(i32 %a, i32 %b) {
2323
%nb = sub i32 0, %b
2424
%tmp = icmp eq i32 %a, %nb
2525
ret i1 %tmp
2626
}
2727
; CHECK: f3:
28-
; CHECK: cmn.w r0, r1
28+
; CHECK: cmn r0, r1
2929

3030
define i1 @f4(i32 %a, i32 %b) {
3131
%nb = sub i32 0, %b
3232
%tmp = icmp eq i32 %nb, %a
3333
ret i1 %tmp
3434
}
3535
; CHECK: f4:
36-
; CHECK: cmn.w r0, r1
36+
; CHECK: cmn r0, r1
3737

3838
define i1 @f5(i32 %a, i32 %b) {
3939
%tmp = shl i32 %b, 5
@@ -73,3 +73,13 @@ define i1 @f8(i32 %a, i32 %b) {
7373
; CHECK: f8:
7474
; CHECK: cmn.w r0, r0, ror #8
7575

76+
77+
define void @f9(i32 %a, i32 %b) nounwind optsize {
78+
tail call void asm sideeffect "cmn.w r0, r1", ""() nounwind, !srcloc !0
79+
ret void
80+
}
81+
82+
!0 = metadata !{i32 81}
83+
84+
; CHECK: f9:
85+
; CHECK: cmn.w r0, r1

0 commit comments

Comments
 (0)