Skip to content

Commit 6a796d3

Browse files
committed
Use m_ReassociatableAdd now that llvm#170061 is fixed
1 parent 86db993 commit 6a796d3

File tree

3 files changed

+25
-34
lines changed

3 files changed

+25
-34
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3166,25 +3166,24 @@ SDValue DAGCombiner::foldAddToAvg(SDNode *N, const SDLoc &DL) {
31663166
EVT VT = N0.getValueType();
31673167
SDValue A, B;
31683168

3169-
// FIXME: m_ReassociatableAdd can't handle m_Value/m_Deferred mixing.
31703169
if ((!LegalOperations || hasOperation(ISD::AVGFLOORU, VT)) &&
31713170
(sd_match(N,
31723171
m_Add(m_And(m_Value(A), m_Value(B)),
31733172
m_Srl(m_Xor(m_Deferred(A), m_Deferred(B)), m_One()))) ||
3174-
sd_match(N, m_Add(m_Add(m_Srl(m_Value(A), m_One()),
3175-
m_Srl(m_Value(B), m_One())),
3176-
m_ReassociatableAnd(m_Deferred(A), m_Deferred(B),
3177-
m_One()))))) {
3173+
sd_match(N, m_ReassociatableAdd(
3174+
m_Srl(m_Value(A), m_One()), m_Srl(m_Value(B), m_One()),
3175+
m_ReassociatableAnd(m_Deferred(A), m_Deferred(B),
3176+
m_One()))))) {
31783177
return DAG.getNode(ISD::AVGFLOORU, DL, VT, A, B);
31793178
}
31803179
if ((!LegalOperations || hasOperation(ISD::AVGFLOORS, VT)) &&
31813180
(sd_match(N,
31823181
m_Add(m_And(m_Value(A), m_Value(B)),
31833182
m_Sra(m_Xor(m_Deferred(A), m_Deferred(B)), m_One()))) ||
3184-
sd_match(N, m_Add(m_Add(m_Sra(m_Value(A), m_One()),
3185-
m_Sra(m_Value(B), m_One())),
3186-
m_ReassociatableAnd(m_Deferred(A), m_Deferred(B),
3187-
m_One()))))) {
3183+
sd_match(N, m_ReassociatableAdd(
3184+
m_Sra(m_Value(A), m_One()), m_Sra(m_Value(B), m_One()),
3185+
m_ReassociatableAnd(m_Deferred(A), m_Deferred(B),
3186+
m_One()))))) {
31883187
return DAG.getNode(ISD::AVGFLOORS, DL, VT, A, B);
31893188
}
31903189

llvm/test/CodeGen/X86/avgfloors-scalar.ll

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -199,23 +199,19 @@ define i32 @test_lsb_i32(i32 %a0, i32 %a1) nounwind {
199199
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
200200
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
201201
; X86-NEXT: movl %eax, %edx
202-
; X86-NEXT: sarl %edx
203-
; X86-NEXT: andl %ecx, %eax
204-
; X86-NEXT: sarl %ecx
205-
; X86-NEXT: addl %edx, %ecx
206-
; X86-NEXT: andl $1, %eax
207-
; X86-NEXT: addl %ecx, %eax
202+
; X86-NEXT: andl %ecx, %edx
203+
; X86-NEXT: xorl %ecx, %eax
204+
; X86-NEXT: sarl %eax
205+
; X86-NEXT: addl %edx, %eax
208206
; X86-NEXT: retl
209207
;
210208
; X64-LABEL: test_lsb_i32:
211209
; X64: # %bb.0:
212-
; X64-NEXT: movl %edi, %eax
213-
; X64-NEXT: sarl %eax
214-
; X64-NEXT: andl %esi, %edi
215-
; X64-NEXT: sarl %esi
216-
; X64-NEXT: addl %esi, %eax
217-
; X64-NEXT: andl $1, %edi
218-
; X64-NEXT: addl %edi, %eax
210+
; X64-NEXT: movslq %esi, %rcx
211+
; X64-NEXT: movslq %edi, %rax
212+
; X64-NEXT: addq %rcx, %rax
213+
; X64-NEXT: shrq %rax
214+
; X64-NEXT: # kill: def $eax killed $eax killed $rax
219215
; X64-NEXT: retq
220216
%s0 = ashr i32 %a0, 1
221217
%s1 = ashr i32 %a1, 1

llvm/test/CodeGen/X86/avgflooru-scalar.ll

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -199,23 +199,19 @@ define i32 @test_lsb_i32(i32 %a0, i32 %a1) nounwind {
199199
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
200200
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
201201
; X86-NEXT: movl %eax, %edx
202-
; X86-NEXT: shrl %edx
203-
; X86-NEXT: andl %ecx, %eax
204-
; X86-NEXT: shrl %ecx
205-
; X86-NEXT: addl %edx, %ecx
206-
; X86-NEXT: andl $1, %eax
207-
; X86-NEXT: addl %ecx, %eax
202+
; X86-NEXT: andl %ecx, %edx
203+
; X86-NEXT: xorl %ecx, %eax
204+
; X86-NEXT: shrl %eax
205+
; X86-NEXT: addl %edx, %eax
208206
; X86-NEXT: retl
209207
;
210208
; X64-LABEL: test_lsb_i32:
211209
; X64: # %bb.0:
210+
; X64-NEXT: movl %esi, %ecx
212211
; X64-NEXT: movl %edi, %eax
213-
; X64-NEXT: shrl %eax
214-
; X64-NEXT: andl %esi, %edi
215-
; X64-NEXT: shrl %esi
216-
; X64-NEXT: addl %esi, %eax
217-
; X64-NEXT: andl $1, %edi
218-
; X64-NEXT: addl %edi, %eax
212+
; X64-NEXT: addq %rcx, %rax
213+
; X64-NEXT: shrq %rax
214+
; X64-NEXT: # kill: def $eax killed $eax killed $rax
219215
; X64-NEXT: retq
220216
%s0 = lshr i32 %a0, 1
221217
%s1 = lshr i32 %a1, 1

0 commit comments

Comments
 (0)