File: pr42422-phi-of-ops.ll

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (140 lines) | stat: -rw-r--r-- 5,791 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes=newgvn -S %s | FileCheck %s

define void @d() {
; CHECK-LABEL: @d(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_COND:%.*]]
; CHECK:       for.cond:
; CHECK-NEXT:    br label [[FOR_COND1:%.*]]
; CHECK:       for.cond1:
; CHECK-NEXT:    [[TMP0:%.*]] = phi i32 [ [[INC18:%.*]], [[FOR_INC17:%.*]] ], [ 0, [[FOR_COND]] ]
; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i32 [[TMP0]], 1
; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END19:%.*]]
; CHECK:       for.body:
; CHECK-NEXT:    br i1 undef, label [[FOR_BODY3:%.*]], label [[FOR_BODY_FOR_COND4_CRIT_EDGE:%.*]]
; CHECK:       for.body.for.cond4_crit_edge:
; CHECK-NEXT:    br label [[FOR_COND4:%.*]]
; CHECK:       for.body3:
; CHECK-NEXT:    br label [[CLEANUP14:%.*]]
; CHECK:       for.cond4:
; CHECK-NEXT:    br i1 undef, label [[IF_THEN:%.*]], label [[IF_END:%.*]]
; CHECK:       if.then:
; CHECK-NEXT:    br label [[CLEANUP:%.*]]
; CHECK:       if.end:
; CHECK-NEXT:    br label [[FOR_COND6:%.*]]
; CHECK:       for.cond6:
; CHECK-NEXT:    [[TMP1:%.*]] = phi i64 [ [[INC:%.*]], [[FOR_INC:%.*]] ], [ 0, [[IF_END]] ]
; CHECK-NEXT:    [[CMP7:%.*]] = icmp sle i64 [[TMP1]], 1
; CHECK-NEXT:    br i1 [[CMP7]], label [[FOR_INC]], label [[FOR_END9:%.*]]
; CHECK:       for.inc:
; CHECK-NEXT:    [[INC]] = add nsw i64 [[TMP1]], 1
; CHECK-NEXT:    br label [[FOR_COND6]]
; CHECK:       for.end9:
; CHECK-NEXT:    br i1 true, label [[IF_THEN11:%.*]], label [[IF_END12:%.*]]
; CHECK:       if.then11:
; CHECK-NEXT:    br label [[CLEANUP]]
; CHECK:       if.end12:
; CHECK-NEXT:    store i8 poison, ptr null, align 1
; CHECK-NEXT:    br label [[CLEANUP]]
; CHECK:       cleanup:
; CHECK-NEXT:    [[CLEANUP_DEST:%.*]] = phi i32 [ poison, [[IF_END12]] ], [ 1, [[IF_THEN11]] ], [ 9, [[IF_THEN]] ]
; CHECK-NEXT:    switch i32 [[CLEANUP_DEST]], label [[CLEANUP14]] [
; CHECK-NEXT:    i32 0, label [[FOR_COND4]]
; CHECK-NEXT:    i32 9, label [[FOR_END13:%.*]]
; CHECK-NEXT:    ]
; CHECK:       for.end13:
; CHECK-NEXT:    br label [[CLEANUP14]]
; CHECK:       cleanup14:
; CHECK-NEXT:    [[CLEANUP_DEST15:%.*]] = phi i32 [ 0, [[FOR_END13]] ], [ [[CLEANUP_DEST]], [[CLEANUP]] ], [ 1, [[FOR_BODY3]] ]
; CHECK-NEXT:    [[COND1:%.*]] = icmp eq i32 [[CLEANUP_DEST15]], 0
; CHECK-NEXT:    br i1 [[COND1]], label [[FOR_INC17]], label [[CLEANUP20:%.*]]
; CHECK:       for.inc17:
; CHECK-NEXT:    [[INC18]] = add nsw i32 [[TMP0]], 1
; CHECK-NEXT:    br label [[FOR_COND1]]
; CHECK:       for.end19:
; CHECK-NEXT:    br label [[CLEANUP20]]
; CHECK:       cleanup20:
; CHECK-NEXT:    [[PHIOFOPS:%.*]] = phi i1 [ true, [[FOR_END19]] ], [ [[COND1]], [[CLEANUP14]] ]
; CHECK-NEXT:    [[CLEANUP_DEST21:%.*]] = phi i32 [ [[CLEANUP_DEST15]], [[CLEANUP14]] ], [ 0, [[FOR_END19]] ]
; CHECK-NEXT:    br i1 [[PHIOFOPS]], label [[FOR_COND]], label [[CLEANUP23:%.*]]
; CHECK:       cleanup23:
; CHECK-NEXT:    ret void
;
entry:
  br label %for.cond

for.cond:                                         ; preds = %cleanup20, %entry
  br label %for.cond1

for.cond1:                                        ; preds = %for.inc17, %for.cond
  %0 = phi i32 [ %inc18, %for.inc17 ], [ 0, %for.cond ]
  %cmp = icmp sle i32 %0, 1
  br i1 %cmp, label %for.body, label %for.end19

for.body:                                         ; preds = %for.cond1
  br i1 undef, label %for.body3, label %for.body.for.cond4_crit_edge

for.body.for.cond4_crit_edge:                     ; preds = %for.body
  br label %for.cond4

for.body3:                                        ; preds = %for.body
  br label %cleanup14

for.cond4:                                        ; preds = %cleanup, %for.body.for.cond4_crit_edge
  br i1 undef, label %if.then, label %if.end

if.then:                                          ; preds = %for.cond4
  br label %cleanup

if.end:                                           ; preds = %for.cond4
  br label %for.cond6

for.cond6:                                        ; preds = %for.inc, %if.end
  %1 = phi i64 [ %inc, %for.inc ], [ 0, %if.end ]
  %cmp7 = icmp sle i64 %1, 1
  br i1 %cmp7, label %for.inc, label %for.end9

for.inc:                                          ; preds = %for.cond6
  %inc = add nsw i64 %1, 1
  br label %for.cond6

for.end9:                                         ; preds = %for.cond6
  br i1 true, label %if.then11, label %if.end12

if.then11:                                        ; preds = %for.end9
  br label %cleanup

if.end12:                                         ; preds = %for.end9
  br label %cleanup

cleanup:                                          ; preds = %if.end12, %if.then11, %if.then
  %cleanup.dest = phi i32 [ undef, %if.end12 ], [ 1, %if.then11 ], [ 9, %if.then ]
  switch i32 %cleanup.dest, label %cleanup14 [
  i32 0, label %for.cond4
  i32 9, label %for.end13
  ]

for.end13:                                        ; preds = %cleanup
  br label %cleanup14

cleanup14:                                        ; preds = %for.end13, %cleanup, %for.body3
  %cleanup.dest15 = phi i32 [ 0, %for.end13 ], [ %cleanup.dest, %cleanup ], [ 1, %for.body3 ]
  %cond1 = icmp eq i32 %cleanup.dest15, 0
  br i1 %cond1, label %for.inc17, label %cleanup20

for.inc17:                                        ; preds = %cleanup14
  %inc18 = add nsw i32 %0, 1
  br label %for.cond1

for.end19:                                        ; preds = %for.cond1
  br label %cleanup20

cleanup20:                                        ; preds = %for.end19, %cleanup14
  %cleanup.dest21 = phi i32 [ %cleanup.dest15, %cleanup14 ], [ 0, %for.end19 ]
  %cond = icmp eq i32 %cleanup.dest21, 0
  br i1 %cond, label %for.cond, label %cleanup23

cleanup23:                                        ; preds = %cleanup20
  ret void
}