Skip to content

Commit 1469d82

Browse files
authored
Remove br i1 undef from some regression tests [NFC] (#115130)
As defined in LangRef, branching on `undef` is undefined behavior. This PR aims to remove undefined behavior from tests. As UB tests break Alive2 and may be the root cause of breaking future optimizations. Here's an Alive2 proof for one of the examples: https://alive2.llvm.org/ce/z/TncxhP
1 parent ae5bfa0 commit 1469d82

File tree

90 files changed

+650
-648
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+650
-648
lines changed

llvm/test/Analysis/BasicAA/phi-values-usage.ll

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
2020
; This function is one where if we didn't free basicaa after memcpyopt then the
2121
; usage of basicaa in instcombine would cause a segfault due to stale phi-values
2222
; results being used.
23-
define void @fn(ptr %this, ptr %ptr) personality ptr @__gxx_personality_v0 {
23+
define void @fn(ptr %this, ptr %ptr, i1 %arg) personality ptr @__gxx_personality_v0 {
2424
entry:
2525
%arr = alloca [4 x i8], align 8
26-
br i1 undef, label %then, label %if
26+
br i1 %arg, label %then, label %if
2727

2828
if:
2929
br label %then
@@ -50,15 +50,15 @@ lpad:
5050
; When running instcombine after memdep, the basicaa used by instcombine uses
5151
; the phivalues that memdep used. This would then cause a segfault due to
5252
; instcombine deleting a phi whose values had been cached.
53-
define void @fn2() {
53+
define void @fn2(i1 %arg) {
5454
entry:
5555
%a = alloca i8, align 1
5656
%0 = load ptr, ptr @c, align 1
5757
br label %for.cond
5858

5959
for.cond: ; preds = %for.body, %entry
6060
%d.0 = phi ptr [ %0, %entry ], [ null, %for.body ]
61-
br i1 undef, label %for.body, label %for.cond.cleanup
61+
br i1 %arg, label %for.body, label %for.cond.cleanup
6262

6363
for.body: ; preds = %for.cond
6464
store volatile i8 undef, ptr %a, align 1

llvm/test/Analysis/BasicAA/underlying-value.ll

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33

44
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
55

6-
define void @func_20() nounwind {
6+
define void @func_20(i1 %arg) nounwind {
77
entry:
88
br label %for.cond
99

1010
for.cond: ; preds = %for.cond2, %entry
11-
br i1 undef, label %for.cond2, label %for.end22
11+
br i1 %arg, label %for.cond2, label %for.end22
1212

1313
for.cond2: ; preds = %for.body5, %for.cond
1414
br i1 false, label %for.body5, label %for.cond

llvm/test/Analysis/BlockFrequencyInfo/irreducible_loop_crash.ll

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
44
target triple = "x86_64-unknown-linux-gnu"
55

6-
define void @fn1(ptr %f) {
6+
define void @fn1(ptr %f, i1 %arg) {
77
entry:
88
%tobool7 = icmp eq i32 undef, 0
9-
br i1 undef, label %if.end.12, label %for.body.5
9+
br i1 %arg, label %if.end.12, label %for.body.5
1010

1111
for.inc:
1212
store i32 undef, ptr %f, align 4
@@ -19,7 +19,7 @@ for.inc.9: ; preds = %for.body.5
1919
br i1 %tobool7, label %for.inc.9.1, label %for.inc
2020

2121
if.end.12: ; preds = %if.end.12, %for.body
22-
br i1 undef, label %for.end.17, label %for.inc
22+
br i1 %arg, label %for.end.17, label %for.inc
2323

2424
for.end.17: ; preds = %entry
2525
ret void

llvm/test/Analysis/BranchProbabilityInfo/deopt-invoke.ll

+6-6
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ declare void @cold() cold
88

99
; Even though the likeliness of 'invoke' to throw an exception is assessed as low
1010
; all other paths are even less likely. Check that hot paths leads to excepion handler.
11-
define void @test1(i32 %0) personality ptr @"personality_function" !prof !1 {
11+
define void @test1(i32 %0, i1 %arg) personality ptr @"personality_function" !prof !1 {
1212
;CHECK: edge %entry -> %unreached probability is 0x00000001 / 0x80000000 = 0.00%
1313
;CHECK: edge %entry -> %invoke probability is 0x7fffffff / 0x80000000 = 100.00% [HOT edge]
1414
;CHECK: edge %invoke -> %invoke.cont.unreached probability is 0x00000000 / 0x80000000 = 0.00%
1515
;CHECK: edge %invoke -> %land.pad probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
1616
;CHECK: edge %land.pad -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
1717

1818
entry:
19-
br i1 undef, label %unreached, label %invoke, !prof !2
19+
br i1 %arg, label %unreached, label %invoke, !prof !2
2020
invoke:
2121
invoke void @foo(i32 %0)
2222
to label %invoke.cont.unreached unwind label %land.pad
@@ -38,15 +38,15 @@ exit:
3838
ret void
3939
}
4040

41-
define void @test2(i32 %0) personality ptr @"personality_function" {
41+
define void @test2(i32 %0, i1 %arg) personality ptr @"personality_function" {
4242
;CHECK: edge %entry -> %unreached probability is 0x00000000 / 0x80000000 = 0.00%
4343
;CHECK: edge %entry -> %invoke probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
4444
;CHECK: edge %invoke -> %invoke.cont.cold probability is 0x7fff8000 / 0x80000000 = 100.00% [HOT edge]
4545
;CHECK: edge %invoke -> %land.pad probability is 0x00008000 / 0x80000000 = 0.00%
4646
;CHECK: edge %land.pad -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
4747

4848
entry:
49-
br i1 undef, label %unreached, label %invoke
49+
br i1 %arg, label %unreached, label %invoke
5050
invoke:
5151
invoke void @foo(i32 %0)
5252
to label %invoke.cont.cold unwind label %land.pad
@@ -68,14 +68,14 @@ exit:
6868
ret void
6969
}
7070

71-
define void @test3(i32 %0) personality ptr @"personality_function" {
71+
define void @test3(i32 %0, i1 %arg) personality ptr @"personality_function" {
7272
;CHECK: edge %entry -> %unreached probability is 0x00000000 / 0x80000000 = 0.00%
7373
;CHECK: edge %entry -> %invoke probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
7474
;CHECK: edge %invoke -> %invoke.cont.cold probability is 0x7fff8000 / 0x80000000 = 100.00% [HOT edge]
7575
;CHECK: edge %invoke -> %land.pad probability is 0x00008000 / 0x80000000 = 0.00%
7676
;CHECK: edge %land.pad -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
7777
entry:
78-
br i1 undef, label %unreached, label %invoke
78+
br i1 %arg, label %unreached, label %invoke
7979
invoke:
8080
invoke void @foo(i32 %0)
8181
to label %invoke.cont.cold unwind label %land.pad

llvm/test/Analysis/BranchProbabilityInfo/loop.ll

+22-22
Original file line numberDiff line numberDiff line change
@@ -523,20 +523,20 @@ declare void @cold() cold
523523

524524
; If loop has single exit and it leads to 'cold' block then edge leading to loop enter
525525
; should be considered 'cold' as well.
526-
define void @test13() {
526+
define void @test13(i1 %arg) {
527527
; CHECK: edge %entry -> %loop probability is 0x078780e3 / 0x80000000 = 5.88%
528528
; CHECK: edge %entry -> %exit probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
529529
; CHECK: edge %loop -> %loop probability is 0x7fbe1203 / 0x80000000 = 99.80% [HOT edge]
530530
; CHECK: edge %loop -> %cold probability is 0x0041edfd / 0x80000000 = 0.20%
531531
; CHECK: edge %cold -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
532532

533533
entry:
534-
br i1 undef, label %loop, label %exit
534+
br i1 %arg, label %loop, label %exit
535535

536536
loop:
537537
%i.0 = phi i32 [ 0, %entry ], [ %inc, %loop ]
538538
%inc = add nsw i32 %i.0, 1
539-
br i1 undef, label %loop, label %cold
539+
br i1 %arg, label %loop, label %cold
540540

541541
cold:
542542
call void @cold()
@@ -547,7 +547,7 @@ exit:
547547
}
548548

549549
; This is the same case as test13 but with additional loop 'preheader' block.
550-
define void @test14() {
550+
define void @test14(i1 %arg) {
551551
; CHECK: edge %entry -> %preheader probability is 0x078780e3 / 0x80000000 = 5.88%
552552
; CHECK: edge %entry -> %exit probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
553553
; CHECK: edge %preheader -> %loop probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
@@ -556,15 +556,15 @@ define void @test14() {
556556
; CHECK: edge %cold -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
557557

558558
entry:
559-
br i1 undef, label %preheader, label %exit
559+
br i1 %arg, label %preheader, label %exit
560560

561561
preheader:
562562
br label %loop
563563

564564
loop:
565565
%i.0 = phi i32 [ 0, %preheader ], [ %inc, %loop ]
566566
%inc = add nsw i32 %i.0, 1
567-
br i1 undef, label %loop, label %cold
567+
br i1 %arg, label %loop, label %cold
568568

569569
cold:
570570
call void @cold()
@@ -576,7 +576,7 @@ exit:
576576

577577
; If loop has multiple low probability exits then edge leading to loop enter
578578
; should be considered low probable as well.
579-
define void @test15() {
579+
define void @test15(i1 %arg) {
580580
; CHECK: edge %entry -> %loop probability is 0x078780e3 / 0x80000000 = 5.88%
581581
; CHECK: edge %entry -> %exit probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
582582
; CHECK: edge %loop -> %cont probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
@@ -586,15 +586,15 @@ define void @test15() {
586586
; CHECK: edge %cold -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
587587

588588
entry:
589-
br i1 undef, label %loop, label %exit
589+
br i1 %arg, label %loop, label %exit
590590

591591
loop:
592592
%i.0 = phi i32 [ 0, %entry ], [ %inc, %cont ]
593593
%inc = add nsw i32 %i.0, 1
594-
br i1 undef, label %cont, label %unreached
594+
br i1 %arg, label %cont, label %unreached
595595

596596
cont:
597-
br i1 undef, label %loop, label %cold
597+
br i1 %arg, label %loop, label %cold
598598

599599
unreached:
600600
unreachable
@@ -609,7 +609,7 @@ exit:
609609
}
610610

611611
; This is the same case as test15 but with additional loop 'preheader' block.
612-
define void @test16() {
612+
define void @test16(i1 %arg) {
613613
; CHECK: edge %entry -> %preheader probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
614614
; CHECK: edge %preheader -> %loop probability is 0x078780e3 / 0x80000000 = 5.88%
615615
; CHECK: edge %preheader -> %exit probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
@@ -623,15 +623,15 @@ entry:
623623
br label %preheader
624624

625625
preheader:
626-
br i1 undef, label %loop, label %exit
626+
br i1 %arg, label %loop, label %exit
627627

628628
loop:
629629
%i.0 = phi i32 [ 0, %preheader ], [ %inc, %cont ]
630630
%inc = add nsw i32 %i.0, 1
631-
br i1 undef, label %cont, label %unreached
631+
br i1 %arg, label %cont, label %unreached
632632

633633
cont:
634-
br i1 undef, label %loop, label %cold
634+
br i1 %arg, label %loop, label %cold
635635

636636
unreached:
637637
unreachable
@@ -649,7 +649,7 @@ declare void @abort() noreturn
649649

650650
; Check that 'preheader' has 50/50 probability since there is one 'normal' exit.
651651
; Check that exit to 'cold' and 'noreturn' has lower probability than 'normal' exit.
652-
define void @test17() {
652+
define void @test17(i1 %arg) {
653653
; CHECK: edge %entry -> %preheader probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
654654
; CHECK: edge %preheader -> %loop probability is 0x40000000 / 0x80000000 = 50.00%
655655
; CHECK: edge %preheader -> %exit probability is 0x40000000 / 0x80000000 = 50.00%
@@ -664,18 +664,18 @@ entry:
664664
br label %preheader
665665

666666
preheader:
667-
br i1 undef, label %loop, label %exit
667+
br i1 %arg, label %loop, label %exit
668668

669669
loop:
670670
%i.0 = phi i32 [ 0, %preheader ], [ %inc, %cont2 ]
671671
%inc = add nsw i32 %i.0, 1
672-
br i1 undef, label %cont, label %noreturn
672+
br i1 %arg, label %cont, label %noreturn
673673

674674
cont:
675-
br i1 undef, label %cont2, label %cold
675+
br i1 %arg, label %cont2, label %cold
676676

677677
cont2:
678-
br i1 undef, label %loop, label %exit
678+
br i1 %arg, label %loop, label %exit
679679

680680
noreturn:
681681
call void @abort()
@@ -692,7 +692,7 @@ exit:
692692

693693
; This is case with two loops where one nested into another. Nested loop has
694694
; low probable exit what encreases robability to take exit in the top level loop.
695-
define void @test18() {
695+
define void @test18(i1 %arg) {
696696
; CHECK: edge %entry -> %top.loop probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
697697
; CHECK: edge %top.loop -> %loop probability is 0x546cd4b7 / 0x80000000 = 65.96%
698698
; CHECK: edge %top.loop -> %exit probability is 0x2b932b49 / 0x80000000 = 34.04%
@@ -705,12 +705,12 @@ entry:
705705

706706
top.loop:
707707
%j.0 = phi i32 [ 0, %entry ], [ %j.inc, %cold ]
708-
br i1 undef, label %loop, label %exit
708+
br i1 %arg, label %loop, label %exit
709709

710710
loop:
711711
%i.0 = phi i32 [ %j.0, %top.loop ], [ %inc, %loop ]
712712
%inc = add nsw i32 %i.0, 1
713-
br i1 undef, label %loop, label %cold
713+
br i1 %arg, label %loop, label %cold
714714

715715
cold:
716716
call void @cold()

0 commit comments

Comments
 (0)