Skip to content

Commit 6c56cf7

Browse files
committed
[DAG] FoldSetCC - add missing icmp(X,undef) -> isTrueWhenEqual case
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. Differential Revision: https://reviews.llvm.org/D158068
1 parent f8b2544 commit 6c56cf7

File tree

13 files changed

+119
-141
lines changed

13 files changed

+119
-141
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)