Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit 0a7bbd1

Browse files
committed
Cherry-pick r236569 from upstream
This fixes the ARM bugs seen in spec gcc [email protected] Review URL: https://codereview.chromium.org/1158303004
1 parent 0a42736 commit 0a7bbd1

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

lib/Target/ARM/ARMFastISel.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1672,12 +1672,12 @@ bool ARMFastISel::SelectSelect(const Instruction *I) {
16721672
if (Op2Reg == 0) return false;
16731673
}
16741674

1675-
unsigned CmpOpc = isThumb2 ? ARM::t2CMPri : ARM::CMPri;
1676-
CondReg = constrainOperandRegClass(TII.get(CmpOpc), CondReg, 0);
1675+
unsigned TstOpc = isThumb2 ? ARM::t2TSTri : ARM::TSTri;
1676+
CondReg = constrainOperandRegClass(TII.get(TstOpc), CondReg, 0);
16771677
AddOptionalDefs(
1678-
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(CmpOpc))
1678+
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(TstOpc))
16791679
.addReg(CondReg)
1680-
.addImm(0));
1680+
.addImm(1));
16811681

16821682
unsigned MovCCOpc;
16831683
const TargetRegisterClass *RC;

test/CodeGen/ARM/fast-isel-select.ll

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ define i32 @t1(i1 %c) nounwind readnone {
77
entry:
88
; ARM: t1
99
; ARM: movw r{{[1-9]}}, #10
10-
; ARM: cmp r0, #0
10+
; ARM: tst r0, #1
1111
; ARM: moveq r{{[1-9]}}, #20
1212
; ARM: mov r0, r{{[1-9]}}
1313
; THUMB: t1
1414
; THUMB: movs r{{[1-9]}}, #10
15-
; THUMB: cmp r0, #0
15+
; THUMB: tst.w r0, #1
1616
; THUMB: it eq
1717
; THUMB: moveq r{{[1-9]}}, #20
1818
; THUMB: mov r0, r{{[1-9]}}
@@ -23,11 +23,11 @@ entry:
2323
define i32 @t2(i1 %c, i32 %a) nounwind readnone {
2424
entry:
2525
; ARM: t2
26-
; ARM: cmp r0, #0
26+
; ARM: tst r0, #1
2727
; ARM: moveq r{{[1-9]}}, #20
2828
; ARM: mov r0, r{{[1-9]}}
2929
; THUMB: t2
30-
; THUMB: cmp r0, #0
30+
; THUMB: tst.w r0, #1
3131
; THUMB: it eq
3232
; THUMB: moveq r{{[1-9]}}, #20
3333
; THUMB: mov r0, r{{[1-9]}}
@@ -38,11 +38,11 @@ entry:
3838
define i32 @t3(i1 %c, i32 %a, i32 %b) nounwind readnone {
3939
entry:
4040
; ARM: t3
41-
; ARM: cmp r0, #0
41+
; ARM: tst r0, #1
4242
; ARM: movne r2, r1
4343
; ARM: add r0, r2, r1
4444
; THUMB: t3
45-
; THUMB: cmp r0, #0
45+
; THUMB: tst.w r0, #1
4646
; THUMB: it ne
4747
; THUMB: movne r2, r1
4848
; THUMB: add.w r0, r2, r1
@@ -55,12 +55,12 @@ define i32 @t4(i1 %c) nounwind readnone {
5555
entry:
5656
; ARM: t4
5757
; ARM: mvn r{{[1-9]}}, #9
58-
; ARM: cmp r0, #0
58+
; ARM: tst r0, #1
5959
; ARM: mvneq r{{[1-9]}}, #0
6060
; ARM: mov r0, r{{[1-9]}}
6161
; THUMB-LABEL: t4
6262
; THUMB: mvn [[REG:r[1-9]+]], #9
63-
; THUMB: cmp r0, #0
63+
; THUMB: tst.w r0, #1
6464
; THUMB: it eq
6565
; THUMB: mvneq [[REG]], #0
6666
; THUMB: mov r0, [[REG]]
@@ -71,11 +71,11 @@ entry:
7171
define i32 @t5(i1 %c, i32 %a) nounwind readnone {
7272
entry:
7373
; ARM: t5
74-
; ARM: cmp r0, #0
74+
; ARM: tst r0, #1
7575
; ARM: mvneq r{{[1-9]}}, #1
7676
; ARM: mov r0, r{{[1-9]}}
7777
; THUMB: t5
78-
; THUMB: cmp r0, #0
78+
; THUMB: tst.w r0, #1
7979
; THUMB: it eq
8080
; THUMB: mvneq r{{[1-9]}}, #1
8181
; THUMB: mov r0, r{{[1-9]}}
@@ -87,11 +87,11 @@ entry:
8787
define i32 @t6(i1 %c, i32 %a) nounwind readnone {
8888
entry:
8989
; ARM: t6
90-
; ARM: cmp r0, #0
90+
; ARM: tst r0, #1
9191
; ARM: mvneq r{{[1-9]}}, #978944
9292
; ARM: mov r0, r{{[1-9]}}
9393
; THUMB: t6
94-
; THUMB: cmp r0, #0
94+
; THUMB: tst.w r0, #1
9595
; THUMB: it eq
9696
; THUMB: mvneq r{{[1-9]}}, #978944
9797
; THUMB: mov r0, r{{[1-9]}}

0 commit comments

Comments
 (0)