Skip to content

Commit 7dd9e80

Browse files
committed
[ARM] Complete SubsumesPredicate
Many missing cases were added.
1 parent b9adc4a commit 7dd9e80

File tree

2 files changed

+120
-117
lines changed

2 files changed

+120
-117
lines changed

llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -474,13 +474,18 @@ bool ARMBaseInstrInfo::SubsumesPredicate(ArrayRef<MachineOperand> Pred1,
474474
case ARMCC::AL:
475475
return true;
476476
case ARMCC::HS:
477-
return CC2 == ARMCC::HI;
477+
return CC2 == ARMCC::HI || CC2 == ARMCC::EQ;
478478
case ARMCC::LS:
479479
return CC2 == ARMCC::LO || CC2 == ARMCC::EQ;
480480
case ARMCC::GE:
481-
return CC2 == ARMCC::GT;
481+
return CC2 == ARMCC::GT || CC2 == ARMCC::EQ;
482482
case ARMCC::LE:
483-
return CC2 == ARMCC::LT;
483+
return CC2 == ARMCC::LT || CC2 == ARMCC::EQ;
484+
case ARMCC::PL:
485+
return CC2 == ARMCC::EQ;
486+
case ARMCC::NE:
487+
return CC2 == ARMCC::HI || CC2 == ARMCC::LO || CC2 == ARMCC::GT ||
488+
CC2 == ARMCC::LT || CC2 == ARMCC::MI;
484489
}
485490
}
486491

llvm/test/CodeGen/ARM/arm-shrink-wrapping-linux.ll

Lines changed: 112 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -20,180 +20,178 @@ define fastcc ptr @wrongUseOfPostDominate(ptr readonly %s, i32 %off, ptr readnon
2020
; ENABLE-NEXT: .save {r11, lr}
2121
; ENABLE-NEXT: push {r11, lr}
2222
; ENABLE-NEXT: cmn r1, #1
23-
; ENABLE-NEXT: ble .LBB0_7
23+
; ENABLE-NEXT: ble .LBB0_3
2424
; ENABLE-NEXT: @ %bb.1: @ %while.cond.preheader
2525
; ENABLE-NEXT: cmp r1, #0
26-
; ENABLE-NEXT: beq .LBB0_6
27-
; ENABLE-NEXT: @ %bb.2: @ %while.cond.preheader
28-
; ENABLE-NEXT: cmp r0, r2
29-
; ENABLE-NEXT: pophs {r11, pc}
30-
; ENABLE-NEXT: .LBB0_3: @ %while.body.preheader
31-
; ENABLE-NEXT: movw r12, :lower16:skip
32-
; ENABLE-NEXT: sub r1, r1, #1
33-
; ENABLE-NEXT: movt r12, :upper16:skip
34-
; ENABLE-NEXT: .LBB0_4: @ %while.body
35-
; ENABLE-NEXT: @ =>This Inner Loop Header: Depth=1
36-
; ENABLE-NEXT: ldrb r3, [r0]
37-
; ENABLE-NEXT: ldrb r3, [r12, r3]
38-
; ENABLE-NEXT: add r0, r0, r3
39-
; ENABLE-NEXT: sub r3, r1, #1
40-
; ENABLE-NEXT: cmp r3, r1
41-
; ENABLE-NEXT: bhs .LBB0_6
42-
; ENABLE-NEXT: @ %bb.5: @ %while.body
43-
; ENABLE-NEXT: @ in Loop: Header=BB0_4 Depth=1
44-
; ENABLE-NEXT: mov r1, r3
45-
; ENABLE-NEXT: cmp r0, r2
46-
; ENABLE-NEXT: blo .LBB0_4
47-
; ENABLE-NEXT: .LBB0_6: @ %if.end29
26+
; ENABLE-NEXT: cmpne r0, r2
27+
; ENABLE-NEXT: blo .LBB0_15
28+
; ENABLE-NEXT: .LBB0_2: @ %if.end29
4829
; ENABLE-NEXT: pop {r11, pc}
49-
; ENABLE-NEXT: .LBB0_7: @ %while.cond2.outer
30+
; ENABLE-NEXT: .LBB0_3: @ %while.cond2.outer
5031
; ENABLE-NEXT: @ =>This Loop Header: Depth=1
51-
; ENABLE-NEXT: @ Child Loop BB0_8 Depth 2
52-
; ENABLE-NEXT: @ Child Loop BB0_15 Depth 2
32+
; ENABLE-NEXT: @ Child Loop BB0_4 Depth 2
33+
; ENABLE-NEXT: @ Child Loop BB0_11 Depth 2
5334
; ENABLE-NEXT: mov r3, r0
54-
; ENABLE-NEXT: .LBB0_8: @ %while.cond2
55-
; ENABLE-NEXT: @ Parent Loop BB0_7 Depth=1
35+
; ENABLE-NEXT: .LBB0_4: @ %while.cond2
36+
; ENABLE-NEXT: @ Parent Loop BB0_3 Depth=1
5637
; ENABLE-NEXT: @ => This Inner Loop Header: Depth=2
5738
; ENABLE-NEXT: add r1, r1, #1
5839
; ENABLE-NEXT: cmp r1, #1
59-
; ENABLE-NEXT: beq .LBB0_18
60-
; ENABLE-NEXT: @ %bb.9: @ %while.body4
61-
; ENABLE-NEXT: @ in Loop: Header=BB0_8 Depth=2
40+
; ENABLE-NEXT: beq .LBB0_14
41+
; ENABLE-NEXT: @ %bb.5: @ %while.body4
42+
; ENABLE-NEXT: @ in Loop: Header=BB0_4 Depth=2
6243
; ENABLE-NEXT: cmp r3, r2
63-
; ENABLE-NEXT: bls .LBB0_8
64-
; ENABLE-NEXT: @ %bb.10: @ %if.then7
65-
; ENABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
44+
; ENABLE-NEXT: bls .LBB0_4
45+
; ENABLE-NEXT: @ %bb.6: @ %if.then7
46+
; ENABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
6647
; ENABLE-NEXT: mov r0, r3
6748
; ENABLE-NEXT: ldrb r12, [r0, #-1]!
6849
; ENABLE-NEXT: sxtb lr, r12
6950
; ENABLE-NEXT: cmn lr, #1
70-
; ENABLE-NEXT: bgt .LBB0_7
71-
; ENABLE-NEXT: @ %bb.11: @ %if.then7
72-
; ENABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
51+
; ENABLE-NEXT: bgt .LBB0_3
52+
; ENABLE-NEXT: @ %bb.7: @ %if.then7
53+
; ENABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
7354
; ENABLE-NEXT: cmp r0, r2
74-
; ENABLE-NEXT: bls .LBB0_7
75-
; ENABLE-NEXT: @ %bb.12: @ %land.rhs14.preheader
76-
; ENABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
55+
; ENABLE-NEXT: bls .LBB0_3
56+
; ENABLE-NEXT: @ %bb.8: @ %land.rhs14.preheader
57+
; ENABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
7758
; ENABLE-NEXT: cmn lr, #1
78-
; ENABLE-NEXT: bgt .LBB0_7
79-
; ENABLE-NEXT: @ %bb.13: @ %land.rhs14.preheader
80-
; ENABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
59+
; ENABLE-NEXT: bgt .LBB0_3
60+
; ENABLE-NEXT: @ %bb.9: @ %land.rhs14.preheader
61+
; ENABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
8162
; ENABLE-NEXT: cmp r12, #191
82-
; ENABLE-NEXT: bhi .LBB0_7
83-
; ENABLE-NEXT: @ %bb.14: @ %while.body24.preheader
84-
; ENABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
63+
; ENABLE-NEXT: bhi .LBB0_3
64+
; ENABLE-NEXT: @ %bb.10: @ %while.body24.preheader
65+
; ENABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
8566
; ENABLE-NEXT: sub r3, r3, #2
86-
; ENABLE-NEXT: .LBB0_15: @ %while.body24
87-
; ENABLE-NEXT: @ Parent Loop BB0_7 Depth=1
67+
; ENABLE-NEXT: .LBB0_11: @ %while.body24
68+
; ENABLE-NEXT: @ Parent Loop BB0_3 Depth=1
8869
; ENABLE-NEXT: @ => This Inner Loop Header: Depth=2
8970
; ENABLE-NEXT: mov r0, r3
9071
; ENABLE-NEXT: cmp r3, r2
91-
; ENABLE-NEXT: bls .LBB0_7
92-
; ENABLE-NEXT: @ %bb.16: @ %while.body24.land.rhs14_crit_edge
93-
; ENABLE-NEXT: @ in Loop: Header=BB0_15 Depth=2
72+
; ENABLE-NEXT: bls .LBB0_3
73+
; ENABLE-NEXT: @ %bb.12: @ %while.body24.land.rhs14_crit_edge
74+
; ENABLE-NEXT: @ in Loop: Header=BB0_11 Depth=2
9475
; ENABLE-NEXT: mov r3, r0
9576
; ENABLE-NEXT: ldrsb lr, [r3], #-1
9677
; ENABLE-NEXT: cmn lr, #1
9778
; ENABLE-NEXT: uxtb r12, lr
98-
; ENABLE-NEXT: bgt .LBB0_7
99-
; ENABLE-NEXT: @ %bb.17: @ %while.body24.land.rhs14_crit_edge
100-
; ENABLE-NEXT: @ in Loop: Header=BB0_15 Depth=2
79+
; ENABLE-NEXT: bgt .LBB0_3
80+
; ENABLE-NEXT: @ %bb.13: @ %while.body24.land.rhs14_crit_edge
81+
; ENABLE-NEXT: @ in Loop: Header=BB0_11 Depth=2
10182
; ENABLE-NEXT: cmp r12, #192
102-
; ENABLE-NEXT: blo .LBB0_15
103-
; ENABLE-NEXT: b .LBB0_7
104-
; ENABLE-NEXT: .LBB0_18:
83+
; ENABLE-NEXT: blo .LBB0_11
84+
; ENABLE-NEXT: b .LBB0_3
85+
; ENABLE-NEXT: .LBB0_14:
10586
; ENABLE-NEXT: mov r0, r3
10687
; ENABLE-NEXT: pop {r11, pc}
88+
; ENABLE-NEXT: .LBB0_15: @ %while.body.preheader
89+
; ENABLE-NEXT: movw r12, :lower16:skip
90+
; ENABLE-NEXT: sub r1, r1, #1
91+
; ENABLE-NEXT: movt r12, :upper16:skip
92+
; ENABLE-NEXT: .LBB0_16: @ %while.body
93+
; ENABLE-NEXT: @ =>This Inner Loop Header: Depth=1
94+
; ENABLE-NEXT: ldrb r3, [r0]
95+
; ENABLE-NEXT: ldrb r3, [r12, r3]
96+
; ENABLE-NEXT: add r0, r0, r3
97+
; ENABLE-NEXT: sub r3, r1, #1
98+
; ENABLE-NEXT: cmp r3, r1
99+
; ENABLE-NEXT: bhs .LBB0_2
100+
; ENABLE-NEXT: @ %bb.17: @ %while.body
101+
; ENABLE-NEXT: @ in Loop: Header=BB0_16 Depth=1
102+
; ENABLE-NEXT: mov r1, r3
103+
; ENABLE-NEXT: cmp r0, r2
104+
; ENABLE-NEXT: blo .LBB0_16
105+
; ENABLE-NEXT: b .LBB0_2
107106
;
108107
; DISABLE-LABEL: wrongUseOfPostDominate:
109108
; DISABLE: @ %bb.0: @ %entry
110109
; DISABLE-NEXT: .save {r11, lr}
111110
; DISABLE-NEXT: push {r11, lr}
112111
; DISABLE-NEXT: cmn r1, #1
113-
; DISABLE-NEXT: ble .LBB0_7
112+
; DISABLE-NEXT: ble .LBB0_3
114113
; DISABLE-NEXT: @ %bb.1: @ %while.cond.preheader
115114
; DISABLE-NEXT: cmp r1, #0
116-
; DISABLE-NEXT: beq .LBB0_6
117-
; DISABLE-NEXT: @ %bb.2: @ %while.cond.preheader
118-
; DISABLE-NEXT: cmp r0, r2
119-
; DISABLE-NEXT: pophs {r11, pc}
120-
; DISABLE-NEXT: .LBB0_3: @ %while.body.preheader
121-
; DISABLE-NEXT: movw r12, :lower16:skip
122-
; DISABLE-NEXT: sub r1, r1, #1
123-
; DISABLE-NEXT: movt r12, :upper16:skip
124-
; DISABLE-NEXT: .LBB0_4: @ %while.body
125-
; DISABLE-NEXT: @ =>This Inner Loop Header: Depth=1
126-
; DISABLE-NEXT: ldrb r3, [r0]
127-
; DISABLE-NEXT: ldrb r3, [r12, r3]
128-
; DISABLE-NEXT: add r0, r0, r3
129-
; DISABLE-NEXT: sub r3, r1, #1
130-
; DISABLE-NEXT: cmp r3, r1
131-
; DISABLE-NEXT: bhs .LBB0_6
132-
; DISABLE-NEXT: @ %bb.5: @ %while.body
133-
; DISABLE-NEXT: @ in Loop: Header=BB0_4 Depth=1
134-
; DISABLE-NEXT: mov r1, r3
135-
; DISABLE-NEXT: cmp r0, r2
136-
; DISABLE-NEXT: blo .LBB0_4
137-
; DISABLE-NEXT: .LBB0_6: @ %if.end29
115+
; DISABLE-NEXT: cmpne r0, r2
116+
; DISABLE-NEXT: blo .LBB0_15
117+
; DISABLE-NEXT: .LBB0_2: @ %if.end29
138118
; DISABLE-NEXT: pop {r11, pc}
139-
; DISABLE-NEXT: .LBB0_7: @ %while.cond2.outer
119+
; DISABLE-NEXT: .LBB0_3: @ %while.cond2.outer
140120
; DISABLE-NEXT: @ =>This Loop Header: Depth=1
141-
; DISABLE-NEXT: @ Child Loop BB0_8 Depth 2
142-
; DISABLE-NEXT: @ Child Loop BB0_15 Depth 2
121+
; DISABLE-NEXT: @ Child Loop BB0_4 Depth 2
122+
; DISABLE-NEXT: @ Child Loop BB0_11 Depth 2
143123
; DISABLE-NEXT: mov r3, r0
144-
; DISABLE-NEXT: .LBB0_8: @ %while.cond2
145-
; DISABLE-NEXT: @ Parent Loop BB0_7 Depth=1
124+
; DISABLE-NEXT: .LBB0_4: @ %while.cond2
125+
; DISABLE-NEXT: @ Parent Loop BB0_3 Depth=1
146126
; DISABLE-NEXT: @ => This Inner Loop Header: Depth=2
147127
; DISABLE-NEXT: add r1, r1, #1
148128
; DISABLE-NEXT: cmp r1, #1
149-
; DISABLE-NEXT: beq .LBB0_18
150-
; DISABLE-NEXT: @ %bb.9: @ %while.body4
151-
; DISABLE-NEXT: @ in Loop: Header=BB0_8 Depth=2
129+
; DISABLE-NEXT: beq .LBB0_14
130+
; DISABLE-NEXT: @ %bb.5: @ %while.body4
131+
; DISABLE-NEXT: @ in Loop: Header=BB0_4 Depth=2
152132
; DISABLE-NEXT: cmp r3, r2
153-
; DISABLE-NEXT: bls .LBB0_8
154-
; DISABLE-NEXT: @ %bb.10: @ %if.then7
155-
; DISABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
133+
; DISABLE-NEXT: bls .LBB0_4
134+
; DISABLE-NEXT: @ %bb.6: @ %if.then7
135+
; DISABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
156136
; DISABLE-NEXT: mov r0, r3
157137
; DISABLE-NEXT: ldrb r12, [r0, #-1]!
158138
; DISABLE-NEXT: sxtb lr, r12
159139
; DISABLE-NEXT: cmn lr, #1
160-
; DISABLE-NEXT: bgt .LBB0_7
161-
; DISABLE-NEXT: @ %bb.11: @ %if.then7
162-
; DISABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
140+
; DISABLE-NEXT: bgt .LBB0_3
141+
; DISABLE-NEXT: @ %bb.7: @ %if.then7
142+
; DISABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
163143
; DISABLE-NEXT: cmp r0, r2
164-
; DISABLE-NEXT: bls .LBB0_7
165-
; DISABLE-NEXT: @ %bb.12: @ %land.rhs14.preheader
166-
; DISABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
144+
; DISABLE-NEXT: bls .LBB0_3
145+
; DISABLE-NEXT: @ %bb.8: @ %land.rhs14.preheader
146+
; DISABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
167147
; DISABLE-NEXT: cmn lr, #1
168-
; DISABLE-NEXT: bgt .LBB0_7
169-
; DISABLE-NEXT: @ %bb.13: @ %land.rhs14.preheader
170-
; DISABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
148+
; DISABLE-NEXT: bgt .LBB0_3
149+
; DISABLE-NEXT: @ %bb.9: @ %land.rhs14.preheader
150+
; DISABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
171151
; DISABLE-NEXT: cmp r12, #191
172-
; DISABLE-NEXT: bhi .LBB0_7
173-
; DISABLE-NEXT: @ %bb.14: @ %while.body24.preheader
174-
; DISABLE-NEXT: @ in Loop: Header=BB0_7 Depth=1
152+
; DISABLE-NEXT: bhi .LBB0_3
153+
; DISABLE-NEXT: @ %bb.10: @ %while.body24.preheader
154+
; DISABLE-NEXT: @ in Loop: Header=BB0_3 Depth=1
175155
; DISABLE-NEXT: sub r3, r3, #2
176-
; DISABLE-NEXT: .LBB0_15: @ %while.body24
177-
; DISABLE-NEXT: @ Parent Loop BB0_7 Depth=1
156+
; DISABLE-NEXT: .LBB0_11: @ %while.body24
157+
; DISABLE-NEXT: @ Parent Loop BB0_3 Depth=1
178158
; DISABLE-NEXT: @ => This Inner Loop Header: Depth=2
179159
; DISABLE-NEXT: mov r0, r3
180160
; DISABLE-NEXT: cmp r3, r2
181-
; DISABLE-NEXT: bls .LBB0_7
182-
; DISABLE-NEXT: @ %bb.16: @ %while.body24.land.rhs14_crit_edge
183-
; DISABLE-NEXT: @ in Loop: Header=BB0_15 Depth=2
161+
; DISABLE-NEXT: bls .LBB0_3
162+
; DISABLE-NEXT: @ %bb.12: @ %while.body24.land.rhs14_crit_edge
163+
; DISABLE-NEXT: @ in Loop: Header=BB0_11 Depth=2
184164
; DISABLE-NEXT: mov r3, r0
185165
; DISABLE-NEXT: ldrsb lr, [r3], #-1
186166
; DISABLE-NEXT: cmn lr, #1
187167
; DISABLE-NEXT: uxtb r12, lr
188-
; DISABLE-NEXT: bgt .LBB0_7
189-
; DISABLE-NEXT: @ %bb.17: @ %while.body24.land.rhs14_crit_edge
190-
; DISABLE-NEXT: @ in Loop: Header=BB0_15 Depth=2
168+
; DISABLE-NEXT: bgt .LBB0_3
169+
; DISABLE-NEXT: @ %bb.13: @ %while.body24.land.rhs14_crit_edge
170+
; DISABLE-NEXT: @ in Loop: Header=BB0_11 Depth=2
191171
; DISABLE-NEXT: cmp r12, #192
192-
; DISABLE-NEXT: blo .LBB0_15
193-
; DISABLE-NEXT: b .LBB0_7
194-
; DISABLE-NEXT: .LBB0_18:
172+
; DISABLE-NEXT: blo .LBB0_11
173+
; DISABLE-NEXT: b .LBB0_3
174+
; DISABLE-NEXT: .LBB0_14:
195175
; DISABLE-NEXT: mov r0, r3
196176
; DISABLE-NEXT: pop {r11, pc}
177+
; DISABLE-NEXT: .LBB0_15: @ %while.body.preheader
178+
; DISABLE-NEXT: movw r12, :lower16:skip
179+
; DISABLE-NEXT: sub r1, r1, #1
180+
; DISABLE-NEXT: movt r12, :upper16:skip
181+
; DISABLE-NEXT: .LBB0_16: @ %while.body
182+
; DISABLE-NEXT: @ =>This Inner Loop Header: Depth=1
183+
; DISABLE-NEXT: ldrb r3, [r0]
184+
; DISABLE-NEXT: ldrb r3, [r12, r3]
185+
; DISABLE-NEXT: add r0, r0, r3
186+
; DISABLE-NEXT: sub r3, r1, #1
187+
; DISABLE-NEXT: cmp r3, r1
188+
; DISABLE-NEXT: bhs .LBB0_2
189+
; DISABLE-NEXT: @ %bb.17: @ %while.body
190+
; DISABLE-NEXT: @ in Loop: Header=BB0_16 Depth=1
191+
; DISABLE-NEXT: mov r1, r3
192+
; DISABLE-NEXT: cmp r0, r2
193+
; DISABLE-NEXT: blo .LBB0_16
194+
; DISABLE-NEXT: b .LBB0_2
197195
entry:
198196
%cmp = icmp sgt i32 %off, -1
199197
br i1 %cmp, label %while.cond.preheader, label %while.cond2.outer

0 commit comments

Comments
 (0)