Skip to content

Commit e6b85c3

Browse files
committed
[DAG] FoldSetCC - add missing icmp(X,undef) -> isTrueWhenEqual case (REAPPLIED)
Followup to D59363 which failed to handle the icmp(X,undef) -> isTrueWhenEqual case - similar to llvm::ConstantFoldCompareInstruction As discussed on the review, this is affecting some previously reduced test cases, but will also prevent reductions from relying on this inconsistent behaviour in the future. Reapplied after reversion at e1e3c75 with a tweak to the pseudo-probe-peep.ll test Differential Revision: https://reviews.llvm.org/D158068
1 parent 88b7e06 commit e6b85c3

File tree

14 files changed

+121
-143
lines changed

14 files changed

+121
-143
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2519,7 +2519,7 @@ SDValue SelectionDAG::FoldSetCC(EVT VT, SDValue N1, SDValue N2,
25192519

25202520
// icmp X, X -> true/false
25212521
// icmp X, undef -> true/false because undef could be X.
2522-
if (N1 == N2)
2522+
if (N1.isUndef() || N2.isUndef() || N1 == N2)
25232523
return getBoolConstant(ISD::isTrueWhenEqual(Cond), dl, VT, OpVT);
25242524
}
25252525

llvm/test/CodeGen/AArch64/pr55178.ll

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,7 @@
77
define i1 @test14(i8 %X) {
88
; CHECK-LABEL: test14:
99
; CHECK: // %bb.0:
10-
; CHECK-NEXT: mov w8, #-113
11-
; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0
12-
; CHECK-NEXT: lsl w8, w8, w0
13-
; CHECK-NEXT: sxtb w8, w8
14-
; CHECK-NEXT: cmp w8, #0
15-
; CHECK-NEXT: cset w0, gt
10+
; CHECK-NEXT: mov w0, wzr
1611
; CHECK-NEXT: ret
1712
%1 = shl i8 -113, %X
1813
%cmp = icmp slt i8 undef, %1

llvm/test/CodeGen/AMDGPU/swdev373493.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ define hidden fastcc void @bar(i32 %arg, ptr %arg1, ptr %arg2, ptr %arg3, ptr %a
1717
; CHECK-NEXT: v_mov_b32_e32 v8, v5
1818
; CHECK-NEXT: v_mov_b32_e32 v7, v4
1919
; CHECK-NEXT: v_mov_b32_e32 v6, v3
20-
; CHECK-NEXT: s_cmp_lt_i32 s4, 3
21-
; CHECK-NEXT: s_cbranch_scc0 .LBB0_3
20+
; CHECK-NEXT: s_branch .LBB0_3
2221
; CHECK-NEXT: ; %bb.1: ; %LeafBlock
2322
; CHECK-NEXT: s_cbranch_scc1 .LBB0_5
2423
; CHECK-NEXT: ; %bb.2: ; %bb7

llvm/test/CodeGen/PowerPC/p10-spill-crgt.ll

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,22 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
3333
; CHECK-NEXT: lwz r3, 0(r3)
3434
; CHECK-NEXT: std r29, 40(r1) # 8-byte Folded Spill
3535
; CHECK-NEXT: std r30, 48(r1) # 8-byte Folded Spill
36+
; CHECK-NEXT: crxor 4*cr2+eq, 4*cr2+eq, 4*cr2+eq
3637
; CHECK-NEXT: paddi r29, 0, .LJTI0_0@PCREL, 1
3738
; CHECK-NEXT: srwi r4, r3, 4
3839
; CHECK-NEXT: srwi r3, r3, 5
3940
; CHECK-NEXT: andi. r4, r4, 1
4041
; CHECK-NEXT: li r4, 0
4142
; CHECK-NEXT: crmove 4*cr2+gt, gt
4243
; CHECK-NEXT: andi. r3, r3, 1
43-
; CHECK-NEXT: crmove 4*cr2+lt, gt
44-
; CHECK-NEXT: cmplwi cr3, r3, 336
4544
; CHECK-NEXT: li r3, 0
45+
; CHECK-NEXT: crmove 4*cr2+lt, gt
4646
; CHECK-NEXT: sldi r30, r3, 2
4747
; CHECK-NEXT: b .LBB0_2
4848
; CHECK-NEXT: .LBB0_1: # %bb43
4949
; CHECK-NEXT: #
5050
; CHECK-NEXT: bl call_1@notoc
51-
; CHECK-NEXT: setnbc r3, 4*cr4+eq
51+
; CHECK-NEXT: setnbc r3, 4*cr3+eq
5252
; CHECK-NEXT: li r4, 0
5353
; CHECK-NEXT: stb r4, 0(r3)
5454
; CHECK-NEXT: li r4, 0
@@ -58,13 +58,13 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
5858
; CHECK-NEXT: bc 12, 4*cr2+gt, .LBB0_31
5959
; CHECK-NEXT: # %bb.3: # %bb10
6060
; CHECK-NEXT: #
61-
; CHECK-NEXT: bgt cr3, .LBB0_5
61+
; CHECK-NEXT: bc 12, 4*cr2+eq, .LBB0_5
6262
; CHECK-NEXT: # %bb.4: # %bb10
6363
; CHECK-NEXT: #
6464
; CHECK-NEXT: mr r3, r4
6565
; CHECK-NEXT: lwz r5, 0(r3)
6666
; CHECK-NEXT: rlwinm r4, r5, 0, 21, 22
67-
; CHECK-NEXT: cmpwi cr4, r4, 512
67+
; CHECK-NEXT: cmpwi cr3, r4, 512
6868
; CHECK-NEXT: lwax r4, r30, r29
6969
; CHECK-NEXT: add r4, r4, r29
7070
; CHECK-NEXT: mtctr r4
@@ -186,7 +186,7 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
186186
; CHECK-NEXT: mtocrf 8, r12
187187
; CHECK-NEXT: blr
188188
; CHECK-NEXT: .LBB0_32: # %bb29
189-
; CHECK-NEXT: crmove eq, 4*cr4+eq
189+
; CHECK-NEXT: crmove eq, 4*cr3+eq
190190
; CHECK-NEXT: cmpwi cr3, r5, 366
191191
; CHECK-NEXT: cmpwi cr4, r3, 0
192192
; CHECK-NEXT: li r29, 0
@@ -224,15 +224,15 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
224224
; CHECK-BE-NEXT: lwz r3, 0(r3)
225225
; CHECK-BE-NEXT: std r29, 120(r1) # 8-byte Folded Spill
226226
; CHECK-BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill
227+
; CHECK-BE-NEXT: crxor 4*cr2+eq, 4*cr2+eq, 4*cr2+eq
227228
; CHECK-BE-NEXT: srwi r4, r3, 4
228229
; CHECK-BE-NEXT: srwi r3, r3, 5
229230
; CHECK-BE-NEXT: andi. r4, r4, 1
230231
; CHECK-BE-NEXT: li r4, 0
231232
; CHECK-BE-NEXT: crmove 4*cr2+gt, gt
232233
; CHECK-BE-NEXT: andi. r3, r3, 1
233-
; CHECK-BE-NEXT: crmove 4*cr2+lt, gt
234-
; CHECK-BE-NEXT: cmplwi cr3, r3, 336
235234
; CHECK-BE-NEXT: li r3, 0
235+
; CHECK-BE-NEXT: crmove 4*cr2+lt, gt
236236
; CHECK-BE-NEXT: sldi r30, r3, 2
237237
; CHECK-BE-NEXT: addis r3, r2, .LC0@toc@ha
238238
; CHECK-BE-NEXT: ld r29, .LC0@toc@l(r3)
@@ -241,7 +241,7 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
241241
; CHECK-BE-NEXT: #
242242
; CHECK-BE-NEXT: bl call_1
243243
; CHECK-BE-NEXT: nop
244-
; CHECK-BE-NEXT: setnbc r3, 4*cr4+eq
244+
; CHECK-BE-NEXT: setnbc r3, 4*cr3+eq
245245
; CHECK-BE-NEXT: li r4, 0
246246
; CHECK-BE-NEXT: stb r4, 0(r3)
247247
; CHECK-BE-NEXT: li r4, 0
@@ -251,13 +251,13 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
251251
; CHECK-BE-NEXT: bc 12, 4*cr2+gt, .LBB0_31
252252
; CHECK-BE-NEXT: # %bb.3: # %bb10
253253
; CHECK-BE-NEXT: #
254-
; CHECK-BE-NEXT: bgt cr3, .LBB0_5
254+
; CHECK-BE-NEXT: bc 12, 4*cr2+eq, .LBB0_5
255255
; CHECK-BE-NEXT: # %bb.4: # %bb10
256256
; CHECK-BE-NEXT: #
257257
; CHECK-BE-NEXT: mr r3, r4
258258
; CHECK-BE-NEXT: lwz r5, 0(r3)
259259
; CHECK-BE-NEXT: rlwinm r4, r5, 0, 21, 22
260-
; CHECK-BE-NEXT: cmpwi cr4, r4, 512
260+
; CHECK-BE-NEXT: cmpwi cr3, r4, 512
261261
; CHECK-BE-NEXT: lwax r4, r30, r29
262262
; CHECK-BE-NEXT: add r4, r4, r29
263263
; CHECK-BE-NEXT: mtctr r4
@@ -379,7 +379,7 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
379379
; CHECK-BE-NEXT: mtocrf 8, r12
380380
; CHECK-BE-NEXT: blr
381381
; CHECK-BE-NEXT: .LBB0_32: # %bb29
382-
; CHECK-BE-NEXT: crmove eq, 4*cr4+eq
382+
; CHECK-BE-NEXT: crmove eq, 4*cr3+eq
383383
; CHECK-BE-NEXT: cmpwi cr3, r5, 366
384384
; CHECK-BE-NEXT: cmpwi cr4, r3, 0
385385
; CHECK-BE-NEXT: li r29, 0

llvm/test/CodeGen/PowerPC/pr45709.ll

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,38 +10,14 @@
1010
define dso_local void @_ZN1a1bEv(<4 x float> %in) local_unnamed_addr #0 align 2 {
1111
; CHECK-LABEL: _ZN1a1bEv:
1212
; CHECK: # %bb.0:
13-
; CHECK-NEXT: bc 12, 4*cr5+lt, .LBB0_6
13+
; CHECK-NEXT: bc 12, 4*cr5+lt, .LBB0_4
1414
; CHECK-NEXT: b .LBB0_1
1515
; CHECK-NEXT: .LBB0_1: # %.preheader
1616
; CHECK-NEXT: b .LBB0_2
1717
; CHECK-NEXT: .LBB0_2:
1818
; CHECK-NEXT: b .LBB0_3
1919
; CHECK-NEXT: .LBB0_3:
20-
; CHECK-NEXT: addis r3, r2, .LCPI0_0@toc@ha
21-
; CHECK-NEXT: addi r3, r3, .LCPI0_0@toc@l
22-
; CHECK-NEXT: lvx v3, 0, r3
23-
; CHECK-NEXT: vperm v2, v2, v2, v3
24-
; CHECK-NEXT: vxor v3, v3, v3
25-
; CHECK-NEXT: addi r3, r1, -48
26-
; CHECK-NEXT: stvx v3, 0, r3
27-
; CHECK-NEXT: addi r3, r1, -32
28-
; CHECK-NEXT: stvx v2, 0, r3
29-
; CHECK-NEXT: lwz r3, -48(r1)
30-
; CHECK-NEXT: lwz r4, -32(r1)
31-
; CHECK-NEXT: cmpw r4, r3
32-
; CHECK-NEXT: bc 12, gt, .LBB0_4
33-
; CHECK-NEXT: b .LBB0_5
3420
; CHECK-NEXT: .LBB0_4:
35-
; CHECK-NEXT: addi r3, r4, 0
36-
; CHECK-NEXT: .LBB0_5:
37-
; CHECK-NEXT: cmpw r3, r3
38-
; CHECK-NEXT: stw r3, -64(r1)
39-
; CHECK-NEXT: addi r3, r1, -64
40-
; CHECK-NEXT: lvx v2, 0, r3
41-
; CHECK-NEXT: addi r3, r1, -16
42-
; CHECK-NEXT: stvx v2, 0, r3
43-
; CHECK-NEXT: lfs f0, -16(r1)
44-
; CHECK-NEXT: .LBB0_6:
4521
; CHECK-NEXT: blr
4622
br i1 undef, label %7, label %1
4723

llvm/test/CodeGen/RISCV/pr64503.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
define i1 @f(i64 %LGV1) {
55
; CHECK-LABEL: f:
66
; CHECK: # %bb.0:
7-
; CHECK-NEXT: sltu a0, a0, a1
8-
; CHECK-NEXT: xori a0, a0, 1
7+
; CHECK-NEXT: li a0, 1
98
; CHECK-NEXT: ret
109
%B1 = xor i64 %LGV1, %LGV1
1110
%B2 = srem i64 1, %B1
@@ -17,8 +16,7 @@ define i1 @f(i64 %LGV1) {
1716
define i64 @g(ptr %A, i64 %0) {
1817
; CHECK-LABEL: g:
1918
; CHECK: # %bb.0:
20-
; CHECK-NEXT: slt a0, a0, a2
21-
; CHECK-NEXT: xori a0, a0, 1
19+
; CHECK-NEXT: li a0, 1
2220
; CHECK-NEXT: sb a0, 0(zero)
2321
; CHECK-NEXT: ret
2422
store i64 poison, ptr %A, align 4

llvm/test/CodeGen/Thumb2/ldr-str-imm12.ll

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ define ptr @Manifest(ptr %x, ptr %env, ptr %style, ptr %bthr, ptr %fthr, ptr %ta
3838
; CHECK-NEXT: popne.w {r8, r10, r11}
3939
; CHECK-NEXT: popne {r4, r5, r6, r7, pc}
4040
; CHECK-NEXT: LBB0_1: @ %bb20
41-
; CHECK-NEXT: cmp.w r0, #450
42-
; CHECK-NEXT: bge LBB0_4
41+
; CHECK-NEXT: movs r5, #1
42+
; CHECK-NEXT: cmp r5, #0
43+
; CHECK-NEXT: bne LBB0_4
4344
; CHECK-NEXT: @ %bb.2: @ %bb20
44-
; CHECK-NEXT: cmp r0, #209
45-
; CHECK-NEXT: ble LBB0_5
45+
; CHECK-NEXT: beq LBB0_5
4646
; CHECK-NEXT: @ %bb.3: @ %bb420
4747
; CHECK-NEXT: movw r5, :lower16:(L_zz_hold$non_lazy_ptr-(LPC0_0+4))
4848
; CHECK-NEXT: movt r5, :upper16:(L_zz_hold$non_lazy_ptr-(LPC0_0+4))
@@ -72,10 +72,9 @@ define ptr @Manifest(ptr %x, ptr %env, ptr %style, ptr %bthr, ptr %fthr, ptr %ta
7272
; CHECK-NEXT: bl _Manifest
7373
; CHECK-NEXT: trap
7474
; CHECK-NEXT: LBB0_4: @ %bb20
75-
; CHECK-NEXT: cmp.w r0, #560
76-
; CHECK-NEXT: itt ge
77-
; CHECK-NEXT: movge r0, #0
78-
; CHECK-NEXT: cmpge r0, #0
75+
; CHECK-NEXT: itt ne
76+
; CHECK-NEXT: movne r0, #0
77+
; CHECK-NEXT: cmpne r0, #0
7978
; CHECK-NEXT: LBB0_5: @ %bb20
8079
; CHECK-NEXT: trap
8180
entry:

llvm/test/CodeGen/WebAssembly/pr59626.ll

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ define i8 @f(ptr %0, ptr %1) {
1313
; CHECK-32-NEXT: i32.const 0
1414
; CHECK-32-NEXT: i32.store16 0
1515
; CHECK-32-NEXT: local.get 1
16-
; CHECK-32-NEXT: i32.const 0
16+
; CHECK-32-NEXT: i32.const 5
1717
; CHECK-32-NEXT: i32.store8 2
1818
; CHECK-32-NEXT: local.get 1
19-
; CHECK-32-NEXT: i32.const 0
19+
; CHECK-32-NEXT: i32.const 769
2020
; CHECK-32-NEXT: i32.store16 0
21-
; CHECK-32-NEXT: i32.const 0
21+
; CHECK-32-NEXT: i32.const 1
2222
; CHECK-32-NEXT: # fallthrough-return
2323
;
2424
; CHECK-64-LABEL: f:
@@ -31,9 +31,12 @@ define i8 @f(ptr %0, ptr %1) {
3131
; CHECK-64-NEXT: i32.const 0
3232
; CHECK-64-NEXT: i32.store16 0
3333
; CHECK-64-NEXT: local.get 1
34-
; CHECK-64-NEXT: i32.const 0
34+
; CHECK-64-NEXT: i32.const 5
35+
; CHECK-64-NEXT: i32.store8 2
36+
; CHECK-64-NEXT: local.get 1
37+
; CHECK-64-NEXT: i32.const 769
3538
; CHECK-64-NEXT: i32.store16 0
36-
; CHECK-64-NEXT: i32.const 0
39+
; CHECK-64-NEXT: i32.const 1
3740
; CHECK-64-NEXT: # fallthrough-return
3841
BB:
3942
store <3 x i8> zeroinitializer, ptr %0

llvm/test/CodeGen/X86/2012-01-10-UndefExceptionEdge.ll

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr
3434
; CHECK-NEXT: .cfi_offset %edi, -16
3535
; CHECK-NEXT: .cfi_offset %ebx, -12
3636
; CHECK-NEXT: xorl %eax, %eax
37-
; CHECK-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Spill
37+
; CHECK-NEXT: xorl %edi, %edi
3838
; CHECK-NEXT: testb %al, %al
3939
; CHECK-NEXT: Ltmp0:
4040
; CHECK-NEXT: ## implicit-def: $ebx
@@ -46,14 +46,16 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr
4646
; CHECK-NEXT: testb %al, %al
4747
; CHECK-NEXT: jne LBB0_2
4848
; CHECK-NEXT: ## %bb.7: ## %bb31
49-
; CHECK-NEXT: ## implicit-def: $edi
49+
; CHECK-NEXT: ## implicit-def: $eax
50+
; CHECK-NEXT: ## kill: killed $eax
5051
; CHECK-NEXT: LBB0_8: ## %bb38
5152
; CHECK-NEXT: ## =>This Loop Header: Depth=1
5253
; CHECK-NEXT: ## Child Loop BB0_13 Depth 2
5354
; CHECK-NEXT: ## Child Loop BB0_16 Depth 3
5455
; CHECK-NEXT: ## Child Loop BB0_21 Depth 2
55-
; CHECK-NEXT: cmpl %eax, %edi
56-
; CHECK-NEXT: jle LBB0_9
56+
; CHECK-NEXT: movb $1, %al
57+
; CHECK-NEXT: testb %al, %al
58+
; CHECK-NEXT: jne LBB0_9
5759
; CHECK-NEXT: ## %bb.10: ## %bb41
5860
; CHECK-NEXT: ## in Loop: Header=BB0_8 Depth=1
5961
; CHECK-NEXT: Ltmp2:
@@ -76,18 +78,17 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr
7678
; CHECK-NEXT: ## Parent Loop BB0_8 Depth=1
7779
; CHECK-NEXT: ## => This Loop Header: Depth=2
7880
; CHECK-NEXT: ## Child Loop BB0_16 Depth 3
79-
; CHECK-NEXT: testl %eax, %eax
80-
; CHECK-NEXT: jns LBB0_19
81-
; CHECK-NEXT: ## %bb.14: ## %bb48
82-
; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=2
8381
; CHECK-NEXT: movb $1, %cl
8482
; CHECK-NEXT: testb %cl, %cl
83+
; CHECK-NEXT: jne LBB0_19
84+
; CHECK-NEXT: ## %bb.14: ## %bb48
85+
; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=2
8586
; CHECK-NEXT: jne LBB0_17
8687
; CHECK-NEXT: ## %bb.15: ## %bb49.preheader
8788
; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=2
8889
; CHECK-NEXT: xorl %ecx, %ecx
8990
; CHECK-NEXT: movl %esi, %edx
90-
; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx ## 4-byte Reload
91+
; CHECK-NEXT: movl %edi, %ebx
9192
; CHECK-NEXT: LBB0_16: ## %bb49
9293
; CHECK-NEXT: ## Parent Loop BB0_8 Depth=1
9394
; CHECK-NEXT: ## Parent Loop BB0_13 Depth=2
@@ -112,7 +113,7 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr
112113
; CHECK-NEXT: ## %bb.20: ## %bb61.preheader
113114
; CHECK-NEXT: ## in Loop: Header=BB0_8 Depth=1
114115
; CHECK-NEXT: movl %esi, %eax
115-
; CHECK-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx ## 4-byte Reload
116+
; CHECK-NEXT: movl %edi, %ecx
116117
; CHECK-NEXT: LBB0_21: ## %bb61
117118
; CHECK-NEXT: ## Parent Loop BB0_8 Depth=1
118119
; CHECK-NEXT: ## => This Inner Loop Header: Depth=2
@@ -122,7 +123,7 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr
122123
; CHECK-NEXT: jne LBB0_21
123124
; CHECK-NEXT: LBB0_22: ## %bb67
124125
; CHECK-NEXT: ## in Loop: Header=BB0_8 Depth=1
125-
; CHECK-NEXT: decl %edi
126+
; CHECK-NEXT: decl {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Spill
126127
; CHECK-NEXT: jmp LBB0_8
127128
; CHECK-NEXT: LBB0_18: ## %bb43
128129
; CHECK-NEXT: Ltmp5:

0 commit comments

Comments
 (0)