Skip to content

Commit dcc2e3d

Browse files
committed
Revert "[X86] combineAdd - fold (add (sub (shl x, c), y), z) -> (sub (add (shl x, c), z), y) (llvm#142734)"
This reverts commit dba4188.
1 parent 9db7502 commit dcc2e3d

File tree

5 files changed

+33
-44
lines changed

5 files changed

+33
-44
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57984,23 +57984,6 @@ static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,
5798457984
if (SDValue V = combineToHorizontalAddSub(N, DAG, Subtarget))
5798557985
return V;
5798657986

57987-
// Canonicalize hidden LEA pattern:
57988-
// Fold (add (sub (shl x, c), y), z) -> (sub (add (shl x, c), z), y)
57989-
// iff c < 4
57990-
if (VT == MVT::i32 || VT == MVT::i64) {
57991-
SDValue Y, Z, Shift;
57992-
APInt Amt;
57993-
if (sd_match(
57994-
N, m_Add(m_OneUse(m_Sub(m_AllOf(m_Value(Shift),
57995-
m_Shl(m_Value(), m_ConstInt(Amt))),
57996-
m_Value(Y))),
57997-
m_Value(Z))) &&
57998-
Amt.ult(4) && !isa<ConstantSDNode>(Z)) {
57999-
return DAG.getNode(ISD::SUB, DL, VT,
58000-
DAG.getNode(ISD::ADD, DL, VT, Shift, Z), Y);
58001-
}
58002-
}
58003-
5800457987
// add(psadbw(X,0),psadbw(Y,0)) -> psadbw(add(X,Y),0)
5800557988
// iff X and Y won't overflow.
5800657989
if (Op0.getOpcode() == X86ISD::PSADBW && Op1.getOpcode() == X86ISD::PSADBW &&

llvm/test/CodeGen/X86/addr-mode-matcher-3.ll

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,16 @@ define i32 @PR55714_i32(i32 %n, i32 %q) {
104104
; X86: # %bb.0:
105105
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
106106
; X86-NEXT: leal (,%ecx,8), %eax
107-
; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
108107
; X86-NEXT: subl %ecx, %eax
108+
; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
109109
; X86-NEXT: retl
110110
;
111111
; X64-LABEL: PR55714_i32:
112112
; X64: # %bb.0:
113113
; X64-NEXT: # kill: def $esi killed $esi def $rsi
114-
; X64-NEXT: # kill: def $edi killed $edi def $rdi
115-
; X64-NEXT: leal (%rdi,%rsi,8), %eax
114+
; X64-NEXT: leal (,%rsi,8), %eax
116115
; X64-NEXT: subl %esi, %eax
116+
; X64-NEXT: addl %edi, %eax
117117
; X64-NEXT: retq
118118
%mul = mul i32 %q, 7
119119
%add = add i32 %mul, %n
@@ -123,19 +123,21 @@ define i32 @PR55714_i32(i32 %n, i32 %q) {
123123
define i64 @PR55714_i64(i64 %n, i64 %q) {
124124
; X86-LABEL: PR55714_i64:
125125
; X86: # %bb.0:
126-
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
126+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
127+
; X86-NEXT: leal (,%eax,8), %ecx
128+
; X86-NEXT: subl %eax, %ecx
127129
; X86-NEXT: movl $7, %eax
128130
; X86-NEXT: mull {{[0-9]+}}(%esp)
129-
; X86-NEXT: leal (%edx,%ecx,8), %edx
130-
; X86-NEXT: subl %ecx, %edx
131+
; X86-NEXT: addl %ecx, %edx
131132
; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
132133
; X86-NEXT: adcl {{[0-9]+}}(%esp), %edx
133134
; X86-NEXT: retl
134135
;
135136
; X64-LABEL: PR55714_i64:
136137
; X64: # %bb.0:
137-
; X64-NEXT: leaq (%rdi,%rsi,8), %rax
138+
; X64-NEXT: leaq (,%rsi,8), %rax
138139
; X64-NEXT: subq %rsi, %rax
140+
; X64-NEXT: addq %rdi, %rax
139141
; X64-NEXT: retq
140142
%mul = mul i64 %q, 7
141143
%add = add i64 %mul, %n

llvm/test/CodeGen/X86/apx/reloc-opt.ll

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313

1414

1515
; CHECK-LABEL: test_regclass_not_updated_by_regalloc_1
16-
; CHECK-NOT: R_X86_64_CODE_4_GOTPCRELX gvar-0x4
17-
; CHECK: movq (%rip), %rdi
18-
; CHECK-NEXT: R_X86_64_REX_GOTPCRELX gvar-0x4
16+
; APXREL: movq (%rip), %r16
17+
; APXREL-NEXT: R_X86_64_CODE_4_GOTPCRELX gvar-0x4
18+
; NOAPXREL-NOT: R_X86_64_CODE_4_GOTPCRELX gvar-0x4
19+
; NOAPXREL: movq (%rip), %rdi
20+
; NOAPXREL-NEXT: R_X86_64_REX_GOTPCRELX gvar-0x4
1921

2022
@gvar = external global [20000 x i8]
2123

llvm/test/CodeGen/X86/buildvec-widen-dotproduct.ll

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
define i32 @dot_ext_v8i8_v8i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
88
; SSE2-LABEL: dot_ext_v8i8_v8i32:
99
; SSE2: # %bb.0: # %entry
10+
; SSE2-NEXT: pushq %r14
1011
; SSE2-NEXT: pushq %rbx
1112
; SSE2-NEXT: movzbl (%rdi), %eax
1213
; SSE2-NEXT: movzbl (%rdi,%rsi), %ecx
@@ -17,9 +18,9 @@ define i32 @dot_ext_v8i8_v8i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
1718
; SSE2-NEXT: leaq (%rsi,%rsi,4), %rbx
1819
; SSE2-NEXT: movzbl (%rdi,%rbx), %ebx
1920
; SSE2-NEXT: movzbl (%rdi,%r9,2), %r9d
20-
; SSE2-NEXT: leaq (%rdi,%rsi,8), %rdi
21-
; SSE2-NEXT: subq %rsi, %rdi
22-
; SSE2-NEXT: movzbl (%rdi), %esi
21+
; SSE2-NEXT: leaq (,%rsi,8), %r14
22+
; SSE2-NEXT: subq %rsi, %r14
23+
; SSE2-NEXT: movzbl (%rdi,%r14), %esi
2324
; SSE2-NEXT: shll $16, %ecx
2425
; SSE2-NEXT: orl %eax, %ecx
2526
; SSE2-NEXT: movd %ecx, %xmm0
@@ -37,14 +38,15 @@ define i32 @dot_ext_v8i8_v8i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
3738
; SSE2-NEXT: paddd %xmm0, %xmm1
3839
; SSE2-NEXT: movd %xmm1, %eax
3940
; SSE2-NEXT: popq %rbx
41+
; SSE2-NEXT: popq %r14
4042
; SSE2-NEXT: retq
4143
;
4244
; SSE4-LABEL: dot_ext_v8i8_v8i32:
4345
; SSE4: # %bb.0: # %entry
4446
; SSE4-NEXT: movzbl (%rdi), %eax
4547
; SSE4-NEXT: leaq (%rsi,%rsi,4), %rcx
4648
; SSE4-NEXT: leaq (%rsi,%rsi,2), %r8
47-
; SSE4-NEXT: leaq (%rdi,%rsi,8), %r9
49+
; SSE4-NEXT: leaq (,%rsi,8), %r9
4850
; SSE4-NEXT: subq %rsi, %r9
4951
; SSE4-NEXT: movd %eax, %xmm0
5052
; SSE4-NEXT: pinsrb $2, (%rdi,%rsi), %xmm0
@@ -53,7 +55,7 @@ define i32 @dot_ext_v8i8_v8i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
5355
; SSE4-NEXT: pinsrb $8, (%rdi,%rsi,4), %xmm0
5456
; SSE4-NEXT: pinsrb $10, (%rdi,%rcx), %xmm0
5557
; SSE4-NEXT: pinsrb $12, (%rdi,%r8,2), %xmm0
56-
; SSE4-NEXT: pinsrb $14, (%r9), %xmm0
58+
; SSE4-NEXT: pinsrb $14, (%rdi,%r9), %xmm0
5759
; SSE4-NEXT: movdqu (%rdx), %xmm1
5860
; SSE4-NEXT: pmaddwd %xmm0, %xmm1
5961
; SSE4-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
@@ -68,7 +70,7 @@ define i32 @dot_ext_v8i8_v8i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
6870
; AVX-NEXT: movzbl (%rdi), %eax
6971
; AVX-NEXT: leaq (%rsi,%rsi,2), %rcx
7072
; AVX-NEXT: leaq (%rsi,%rsi,4), %r8
71-
; AVX-NEXT: leaq (%rdi,%rsi,8), %r9
73+
; AVX-NEXT: leaq (,%rsi,8), %r9
7274
; AVX-NEXT: subq %rsi, %r9
7375
; AVX-NEXT: vmovd %eax, %xmm0
7476
; AVX-NEXT: vpinsrb $2, (%rdi,%rsi), %xmm0, %xmm0
@@ -77,7 +79,7 @@ define i32 @dot_ext_v8i8_v8i32(ptr %a, i64 %a_stride, ptr %b) nounwind {
7779
; AVX-NEXT: vpinsrb $8, (%rdi,%rsi,4), %xmm0, %xmm0
7880
; AVX-NEXT: vpinsrb $10, (%rdi,%r8), %xmm0, %xmm0
7981
; AVX-NEXT: vpinsrb $12, (%rdi,%rcx,2), %xmm0, %xmm0
80-
; AVX-NEXT: vpinsrb $14, (%r9), %xmm0, %xmm0
82+
; AVX-NEXT: vpinsrb $14, (%rdi,%r9), %xmm0, %xmm0
8183
; AVX-NEXT: vpmaddwd (%rdx), %xmm0, %xmm0
8284
; AVX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
8385
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0

llvm/test/CodeGen/X86/mul-constant-i64.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,12 @@ define i64 @test_mul_by_6(i64 %x) {
166166
define i64 @test_mul_by_7(i64 %x) {
167167
; X86-LABEL: test_mul_by_7:
168168
; X86: # %bb.0:
169-
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
169+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
170+
; X86-NEXT: leal (,%eax,8), %ecx
171+
; X86-NEXT: subl %eax, %ecx
170172
; X86-NEXT: movl $7, %eax
171173
; X86-NEXT: mull {{[0-9]+}}(%esp)
172-
; X86-NEXT: leal (%edx,%ecx,8), %edx
173-
; X86-NEXT: subl %ecx, %edx
174+
; X86-NEXT: addl %ecx, %edx
174175
; X86-NEXT: retl
175176
;
176177
; X86-NOOPT-LABEL: test_mul_by_7:
@@ -732,17 +733,16 @@ define i64 @test_mul_by_22(i64 %x) {
732733
ret i64 %mul
733734
}
734735

735-
define i64 @test_mul_by_23(i64 %x) nounwind {
736+
define i64 @test_mul_by_23(i64 %x) {
736737
; X86-LABEL: test_mul_by_23:
737738
; X86: # %bb.0:
738-
; X86-NEXT: pushl %esi
739-
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
740-
; X86-NEXT: leal (%ecx,%ecx,2), %esi
739+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
740+
; X86-NEXT: leal (%eax,%eax,2), %ecx
741+
; X86-NEXT: shll $3, %ecx
742+
; X86-NEXT: subl %eax, %ecx
741743
; X86-NEXT: movl $23, %eax
742744
; X86-NEXT: mull {{[0-9]+}}(%esp)
743-
; X86-NEXT: leal (%edx,%esi,8), %edx
744-
; X86-NEXT: subl %ecx, %edx
745-
; X86-NEXT: popl %esi
745+
; X86-NEXT: addl %ecx, %edx
746746
; X86-NEXT: retl
747747
;
748748
; X86-NOOPT-LABEL: test_mul_by_23:

0 commit comments

Comments
 (0)