Skip to content

Commit 793ab6a

Browse files
authored
X86: Enable terminal rule (llvm#165957)
1 parent 4ae7348 commit 793ab6a

38 files changed

+4728
-4762
lines changed

llvm/lib/Target/X86/X86Subtarget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,8 @@ class X86Subtarget final : public X86GenSubtargetInfo {
419419
/// Enable the MachineScheduler pass for all X86 subtargets.
420420
bool enableMachineScheduler() const override { return true; }
421421

422+
bool enableTerminalRule() const override { return true; }
423+
422424
bool enableEarlyIfConversion() const override;
423425

424426
void getPostRAMutations(std::vector<std::unique_ptr<ScheduleDAGMutation>>

llvm/test/CodeGen/X86/3addr-16bit.ll

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,27 @@ define zeroext i16 @test1(i16 zeroext %c, i16 zeroext %k) nounwind ssp {
1010
; X64-LABEL: test1:
1111
; X64: ## %bb.0: ## %entry
1212
; X64-NEXT: movl %esi, %eax
13-
; X64-NEXT: incl %eax
14-
; X64-NEXT: cmpw %di, %si
13+
; X64-NEXT: incl %esi
14+
; X64-NEXT: cmpw %di, %ax
1515
; X64-NEXT: jne LBB0_2
1616
; X64-NEXT: ## %bb.1: ## %bb
1717
; X64-NEXT: pushq %rbx
18-
; X64-NEXT: movzwl %ax, %ebx
18+
; X64-NEXT: movzwl %si, %ebx
1919
; X64-NEXT: movl %ebx, %edi
2020
; X64-NEXT: callq _foo
2121
; X64-NEXT: movl %ebx, %eax
2222
; X64-NEXT: popq %rbx
2323
; X64-NEXT: retq
2424
; X64-NEXT: LBB0_2: ## %bb1
25-
; X64-NEXT: movzwl %ax, %eax
25+
; X64-NEXT: movzwl %si, %eax
2626
; X64-NEXT: retq
2727
;
2828
; X86-LABEL: test1:
2929
; X86: ## %bb.0: ## %entry
3030
; X86-NEXT: pushl %esi
3131
; X86-NEXT: subl $8, %esp
32-
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
33-
; X86-NEXT: movl %ecx, %eax
32+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
33+
; X86-NEXT: movl %eax, %ecx
3434
; X86-NEXT: incl %eax
3535
; X86-NEXT: cmpw {{[0-9]+}}(%esp), %cx
3636
; X86-NEXT: jne LBB0_2
@@ -63,27 +63,27 @@ define zeroext i16 @test2(i16 zeroext %c, i16 zeroext %k) nounwind ssp {
6363
; X64-LABEL: test2:
6464
; X64: ## %bb.0: ## %entry
6565
; X64-NEXT: movl %esi, %eax
66-
; X64-NEXT: decl %eax
67-
; X64-NEXT: cmpw %di, %si
66+
; X64-NEXT: decl %esi
67+
; X64-NEXT: cmpw %di, %ax
6868
; X64-NEXT: jne LBB1_2
6969
; X64-NEXT: ## %bb.1: ## %bb
7070
; X64-NEXT: pushq %rbx
71-
; X64-NEXT: movzwl %ax, %ebx
71+
; X64-NEXT: movzwl %si, %ebx
7272
; X64-NEXT: movl %ebx, %edi
7373
; X64-NEXT: callq _foo
7474
; X64-NEXT: movl %ebx, %eax
7575
; X64-NEXT: popq %rbx
7676
; X64-NEXT: retq
7777
; X64-NEXT: LBB1_2: ## %bb1
78-
; X64-NEXT: movzwl %ax, %eax
78+
; X64-NEXT: movzwl %si, %eax
7979
; X64-NEXT: retq
8080
;
8181
; X86-LABEL: test2:
8282
; X86: ## %bb.0: ## %entry
8383
; X86-NEXT: pushl %esi
8484
; X86-NEXT: subl $8, %esp
85-
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
86-
; X86-NEXT: movl %ecx, %eax
85+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
86+
; X86-NEXT: movl %eax, %ecx
8787
; X86-NEXT: decl %eax
8888
; X86-NEXT: cmpw {{[0-9]+}}(%esp), %cx
8989
; X86-NEXT: jne LBB1_2
@@ -118,27 +118,27 @@ define zeroext i16 @test3(i16 zeroext %c, i16 zeroext %k) nounwind ssp {
118118
; X64-LABEL: test3:
119119
; X64: ## %bb.0: ## %entry
120120
; X64-NEXT: movl %esi, %eax
121-
; X64-NEXT: addl $2, %eax
122-
; X64-NEXT: cmpw %di, %si
121+
; X64-NEXT: addl $2, %esi
122+
; X64-NEXT: cmpw %di, %ax
123123
; X64-NEXT: jne LBB2_2
124124
; X64-NEXT: ## %bb.1: ## %bb
125125
; X64-NEXT: pushq %rbx
126-
; X64-NEXT: movzwl %ax, %ebx
126+
; X64-NEXT: movzwl %si, %ebx
127127
; X64-NEXT: movl %ebx, %edi
128128
; X64-NEXT: callq _foo
129129
; X64-NEXT: movl %ebx, %eax
130130
; X64-NEXT: popq %rbx
131131
; X64-NEXT: retq
132132
; X64-NEXT: LBB2_2: ## %bb1
133-
; X64-NEXT: movzwl %ax, %eax
133+
; X64-NEXT: movzwl %si, %eax
134134
; X64-NEXT: retq
135135
;
136136
; X86-LABEL: test3:
137137
; X86: ## %bb.0: ## %entry
138138
; X86-NEXT: pushl %esi
139139
; X86-NEXT: subl $8, %esp
140-
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
141-
; X86-NEXT: movl %ecx, %eax
140+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
141+
; X86-NEXT: movl %eax, %ecx
142142
; X86-NEXT: addl $2, %eax
143143
; X86-NEXT: cmpw {{[0-9]+}}(%esp), %cx
144144
; X86-NEXT: jne LBB2_2
@@ -171,28 +171,28 @@ define zeroext i16 @test4(i16 zeroext %c, i16 zeroext %k) nounwind ssp {
171171
; X64-LABEL: test4:
172172
; X64: ## %bb.0: ## %entry
173173
; X64-NEXT: movl %esi, %eax
174-
; X64-NEXT: addl %edi, %eax
175-
; X64-NEXT: cmpw %di, %si
174+
; X64-NEXT: addl %edi, %esi
175+
; X64-NEXT: cmpw %di, %ax
176176
; X64-NEXT: jne LBB3_2
177177
; X64-NEXT: ## %bb.1: ## %bb
178178
; X64-NEXT: pushq %rbx
179-
; X64-NEXT: movzwl %ax, %ebx
179+
; X64-NEXT: movzwl %si, %ebx
180180
; X64-NEXT: movl %ebx, %edi
181181
; X64-NEXT: callq _foo
182182
; X64-NEXT: movl %ebx, %eax
183183
; X64-NEXT: popq %rbx
184184
; X64-NEXT: retq
185185
; X64-NEXT: LBB3_2: ## %bb1
186-
; X64-NEXT: movzwl %ax, %eax
186+
; X64-NEXT: movzwl %si, %eax
187187
; X64-NEXT: retq
188188
;
189189
; X86-LABEL: test4:
190190
; X86: ## %bb.0: ## %entry
191191
; X86-NEXT: pushl %esi
192192
; X86-NEXT: subl $8, %esp
193193
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
194-
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
195-
; X86-NEXT: movl %edx, %eax
194+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
195+
; X86-NEXT: movl %eax, %edx
196196
; X86-NEXT: addl %ecx, %eax
197197
; X86-NEXT: cmpw %cx, %dx
198198
; X86-NEXT: jne LBB3_2

llvm/test/CodeGen/X86/atomic-rm-bit-test.ll

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2156,28 +2156,30 @@ define zeroext i16 @atomic_shl1_mask01_xor_16_gpr_brz(ptr %v, i16 zeroext %c) no
21562156
; X64-LABEL: atomic_shl1_mask01_xor_16_gpr_brz:
21572157
; X64: # %bb.0: # %entry
21582158
; X64-NEXT: movl %esi, %ecx
2159+
; X64-NEXT: movl %ecx, %edx
21592160
; X64-NEXT: andb $15, %cl
2160-
; X64-NEXT: movl $1, %edx
2161-
; X64-NEXT: shll %cl, %edx
2161+
; X64-NEXT: movl $1, %esi
2162+
; X64-NEXT: # kill: def $cl killed $cl killed $ecx
2163+
; X64-NEXT: shll %cl, %esi
21622164
; X64-NEXT: movzwl (%rdi), %eax
21632165
; X64-NEXT: .p2align 4
21642166
; X64-NEXT: .LBB34_1: # %atomicrmw.start
21652167
; X64-NEXT: # =>This Inner Loop Header: Depth=1
21662168
; X64-NEXT: movl %eax, %ecx
2167-
; X64-NEXT: xorl %edx, %ecx
2169+
; X64-NEXT: xorl %esi, %ecx
21682170
; X64-NEXT: # kill: def $ax killed $ax killed $eax
21692171
; X64-NEXT: lock cmpxchgw %cx, (%rdi)
21702172
; X64-NEXT: # kill: def $ax killed $ax def $eax
21712173
; X64-NEXT: jne .LBB34_1
21722174
; X64-NEXT: # %bb.2: # %atomicrmw.end
21732175
; X64-NEXT: movzwl %ax, %ecx
21742176
; X64-NEXT: movw $123, %ax
2175-
; X64-NEXT: testl %ecx, %edx
2177+
; X64-NEXT: testl %ecx, %esi
21762178
; X64-NEXT: je .LBB34_3
21772179
; X64-NEXT: # %bb.4: # %return
21782180
; X64-NEXT: retq
21792181
; X64-NEXT: .LBB34_3: # %if.then
2180-
; X64-NEXT: movzwl %si, %eax
2182+
; X64-NEXT: movzwl %dx, %eax
21812183
; X64-NEXT: movzwl (%rdi,%rax,2), %eax
21822184
; X64-NEXT: retq
21832185
entry:
@@ -3398,10 +3400,12 @@ define zeroext i16 @atomic_shl1_mask01_and_16_gpr_brnz(ptr %v, i16 zeroext %c) n
33983400
; X64-LABEL: atomic_shl1_mask01_and_16_gpr_brnz:
33993401
; X64: # %bb.0: # %entry
34003402
; X64-NEXT: movl %esi, %ecx
3403+
; X64-NEXT: movl %ecx, %edx
34013404
; X64-NEXT: andb $15, %cl
3402-
; X64-NEXT: movl $1, %edx
3403-
; X64-NEXT: shll %cl, %edx
3405+
; X64-NEXT: movl $1, %esi
3406+
; X64-NEXT: shll %cl, %esi
34043407
; X64-NEXT: movl $-2, %r8d
3408+
; X64-NEXT: # kill: def $cl killed $cl killed $ecx
34053409
; X64-NEXT: roll %cl, %r8d
34063410
; X64-NEXT: movzwl (%rdi), %eax
34073411
; X64-NEXT: .p2align 4
@@ -3415,10 +3419,10 @@ define zeroext i16 @atomic_shl1_mask01_and_16_gpr_brnz(ptr %v, i16 zeroext %c) n
34153419
; X64-NEXT: jne .LBB52_1
34163420
; X64-NEXT: # %bb.2: # %atomicrmw.end
34173421
; X64-NEXT: movzwl %ax, %eax
3418-
; X64-NEXT: testl %eax, %edx
3422+
; X64-NEXT: testl %eax, %esi
34193423
; X64-NEXT: je .LBB52_3
34203424
; X64-NEXT: # %bb.4: # %if.then
3421-
; X64-NEXT: movzwl %si, %eax
3425+
; X64-NEXT: movzwl %dx, %eax
34223426
; X64-NEXT: movzwl (%rdi,%rax,2), %eax
34233427
; X64-NEXT: retq
34243428
; X64-NEXT: .LBB52_3:

llvm/test/CodeGen/X86/atomicrmw-fadd-fp-vector.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ define <2 x half> @test_atomicrmw_fadd_v2f16_align4(ptr addrspace(1) %ptr, <2 x
4646
; CHECK-NEXT: orl %edx, %eax
4747
; CHECK-NEXT: lock cmpxchgl %ecx, (%rbx)
4848
; CHECK-NEXT: setne %cl
49-
; CHECK-NEXT: pinsrw $0, %eax, %xmm0
49+
; CHECK-NEXT: movl %eax, %edx
5050
; CHECK-NEXT: shrl $16, %eax
51+
; CHECK-NEXT: pinsrw $0, %edx, %xmm0
5152
; CHECK-NEXT: pinsrw $0, %eax, %xmm1
5253
; CHECK-NEXT: testb %cl, %cl
5354
; CHECK-NEXT: jne .LBB0_1

llvm/test/CodeGen/X86/bitcast-vector-bool.ll

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -216,17 +216,17 @@ define i1 @trunc_v8i16_cmp(<8 x i16> %a0) nounwind {
216216
define i8 @bitcast_v16i8_to_v2i8(<16 x i8> %a0) nounwind {
217217
; SSE-LABEL: bitcast_v16i8_to_v2i8:
218218
; SSE: # %bb.0:
219-
; SSE-NEXT: pmovmskb %xmm0, %ecx
220-
; SSE-NEXT: movl %ecx, %eax
219+
; SSE-NEXT: pmovmskb %xmm0, %eax
220+
; SSE-NEXT: movl %eax, %ecx
221221
; SSE-NEXT: shrl $8, %eax
222222
; SSE-NEXT: addb %cl, %al
223223
; SSE-NEXT: # kill: def $al killed $al killed $eax
224224
; SSE-NEXT: retq
225225
;
226226
; AVX12-LABEL: bitcast_v16i8_to_v2i8:
227227
; AVX12: # %bb.0:
228-
; AVX12-NEXT: vpmovmskb %xmm0, %ecx
229-
; AVX12-NEXT: movl %ecx, %eax
228+
; AVX12-NEXT: vpmovmskb %xmm0, %eax
229+
; AVX12-NEXT: movl %eax, %ecx
230230
; AVX12-NEXT: shrl $8, %eax
231231
; AVX12-NEXT: addb %cl, %al
232232
; AVX12-NEXT: # kill: def $al killed $al killed $eax
@@ -441,8 +441,8 @@ define i8 @bitcast_v16i16_to_v2i8(<16 x i16> %a0) nounwind {
441441
; SSE-LABEL: bitcast_v16i16_to_v2i8:
442442
; SSE: # %bb.0:
443443
; SSE-NEXT: packsswb %xmm1, %xmm0
444-
; SSE-NEXT: pmovmskb %xmm0, %ecx
445-
; SSE-NEXT: movl %ecx, %eax
444+
; SSE-NEXT: pmovmskb %xmm0, %eax
445+
; SSE-NEXT: movl %eax, %ecx
446446
; SSE-NEXT: shrl $8, %eax
447447
; SSE-NEXT: addb %cl, %al
448448
; SSE-NEXT: # kill: def $al killed $al killed $eax
@@ -452,8 +452,8 @@ define i8 @bitcast_v16i16_to_v2i8(<16 x i16> %a0) nounwind {
452452
; AVX1: # %bb.0:
453453
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
454454
; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
455-
; AVX1-NEXT: vpmovmskb %xmm0, %ecx
456-
; AVX1-NEXT: movl %ecx, %eax
455+
; AVX1-NEXT: vpmovmskb %xmm0, %eax
456+
; AVX1-NEXT: movl %eax, %ecx
457457
; AVX1-NEXT: shrl $8, %eax
458458
; AVX1-NEXT: addb %cl, %al
459459
; AVX1-NEXT: # kill: def $al killed $al killed $eax
@@ -464,8 +464,8 @@ define i8 @bitcast_v16i16_to_v2i8(<16 x i16> %a0) nounwind {
464464
; AVX2: # %bb.0:
465465
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
466466
; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
467-
; AVX2-NEXT: vpmovmskb %xmm0, %ecx
468-
; AVX2-NEXT: movl %ecx, %eax
467+
; AVX2-NEXT: vpmovmskb %xmm0, %eax
468+
; AVX2-NEXT: movl %eax, %ecx
469469
; AVX2-NEXT: shrl $8, %eax
470470
; AVX2-NEXT: addb %cl, %al
471471
; AVX2-NEXT: # kill: def $al killed $al killed $eax
@@ -762,8 +762,8 @@ define i8 @bitcast_v16i32_to_v2i8(<16 x i32> %a0) nounwind {
762762
; SSE-NEXT: packssdw %xmm3, %xmm2
763763
; SSE-NEXT: packssdw %xmm1, %xmm0
764764
; SSE-NEXT: packsswb %xmm2, %xmm0
765-
; SSE-NEXT: pmovmskb %xmm0, %ecx
766-
; SSE-NEXT: movl %ecx, %eax
765+
; SSE-NEXT: pmovmskb %xmm0, %eax
766+
; SSE-NEXT: movl %eax, %ecx
767767
; SSE-NEXT: shrl $8, %eax
768768
; SSE-NEXT: addb %cl, %al
769769
; SSE-NEXT: # kill: def $al killed $al killed $eax
@@ -776,8 +776,8 @@ define i8 @bitcast_v16i32_to_v2i8(<16 x i32> %a0) nounwind {
776776
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
777777
; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
778778
; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
779-
; AVX1-NEXT: vpmovmskb %xmm0, %ecx
780-
; AVX1-NEXT: movl %ecx, %eax
779+
; AVX1-NEXT: vpmovmskb %xmm0, %eax
780+
; AVX1-NEXT: movl %eax, %ecx
781781
; AVX1-NEXT: shrl $8, %eax
782782
; AVX1-NEXT: addb %cl, %al
783783
; AVX1-NEXT: # kill: def $al killed $al killed $eax
@@ -793,8 +793,8 @@ define i8 @bitcast_v16i32_to_v2i8(<16 x i32> %a0) nounwind {
793793
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
794794
; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
795795
; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
796-
; AVX2-NEXT: vpmovmskb %xmm0, %ecx
797-
; AVX2-NEXT: movl %ecx, %eax
796+
; AVX2-NEXT: vpmovmskb %xmm0, %eax
797+
; AVX2-NEXT: movl %eax, %ecx
798798
; AVX2-NEXT: shrl $8, %eax
799799
; AVX2-NEXT: addb %cl, %al
800800
; AVX2-NEXT: # kill: def $al killed $al killed $eax

llvm/test/CodeGen/X86/coalescer-dead-flag-verifier-error.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
define void @_ZNK4llvm5APInt21multiplicativeInverseERKS0_(ptr %r) {
88
; CHECK-LABEL: _ZNK4llvm5APInt21multiplicativeInverseERKS0_:
99
; CHECK: # %bb.0: # %entry
10-
; CHECK-NEXT: xorl %eax, %eax
1110
; CHECK-NEXT: xorl %edx, %edx
11+
; CHECK-NEXT: xorl %eax, %eax
1212
; CHECK-NEXT: xorl %ecx, %ecx
1313
; CHECK-NEXT: jmp .LBB0_1
1414
; CHECK-NEXT: .p2align 4
@@ -68,8 +68,8 @@ _ZNK4llvm5APInt13getActiveBitsEv.exit.i.i: ; preds = %for.body.i.i.i.i.i
6868
define void @_ZNK4llvm5APInt21multiplicativeInverseERKS0__assert(ptr %r) {
6969
; CHECK-LABEL: _ZNK4llvm5APInt21multiplicativeInverseERKS0__assert:
7070
; CHECK: # %bb.0: # %entry
71-
; CHECK-NEXT: xorl %eax, %eax
7271
; CHECK-NEXT: xorl %edx, %edx
72+
; CHECK-NEXT: xorl %eax, %eax
7373
; CHECK-NEXT: xorl %ecx, %ecx
7474
; CHECK-NEXT: jmp .LBB1_1
7575
; CHECK-NEXT: .p2align 4

0 commit comments

Comments
 (0)