summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Hexagon/rdf-copy-undef.ll
blob: c2b98fc21ca778426d1256ee38c19fac6f4d18dc (plain)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
; RUN: llc -march=hexagon < %s
; REQUIRES: asserts

; After a copy R20 = R29, RDF copy propagation attempted to replace R20 with
; R29. R29 did not have a reaching def at that point (which isn't unusual),
; but copy propagation tried to link the new use of R29 to the presumed
; reaching def (which was null), causing a crash.

target triple = "hexagon"

@g0 = external unnamed_addr global i1, align 4

; Function Attrs: nounwind
declare i8* @llvm.stacksave() #0

; Function Attrs: nounwind
declare void @llvm.stackrestore(i8*) #0

; Function Attrs: norecurse nounwind
declare fastcc void @f0(i16 signext, i16 signext, i16 signext, i16* nocapture readonly, i16 signext, i16* nocapture) unnamed_addr #1

; Function Attrs: norecurse nounwind
declare fastcc signext i16 @f1(i16 signext, i16 signext) unnamed_addr #1

; Function Attrs: norecurse nounwind
define fastcc i32 @f2(i16* nocapture readonly %a0, i16 signext %a1, i16 signext %a2, i16* nocapture readonly %a3, i16 signext %a4, i16* nocapture readonly %a51, i16* nocapture %a6) unnamed_addr #1 {
b0:
  %v0 = tail call i8* @llvm.stacksave()
  %v1 = tail call fastcc signext i16 @f1(i16 signext %a2, i16 signext %a1)
  br i1 undef, label %b7, label %b1

b1:                                               ; preds = %b0
  br i1 undef, label %b3, label %b2

b2:                                               ; preds = %b1
  br i1 undef, label %b4, label %b8

b3:                                               ; preds = %b1
  br i1 undef, label %b5, label %b8

b4:                                               ; preds = %b4, %b2
  br i1 undef, label %b4, label %b6, !llvm.loop !2

b5:                                               ; preds = %b5, %b3
  %v2 = phi i16 [ %v3, %b5 ], [ 0, %b3 ]
  %v3 = add i16 %v2, 1
  %v4 = icmp sgt i32 0, -1073741825
  br i1 %v4, label %b5, label %b6

b6:                                               ; preds = %b5, %b4
  %v5 = phi i16 [ %v3, %b5 ], [ undef, %b4 ]
  br label %b7

b7:                                               ; preds = %b6, %b0
  %v6 = phi i16 [ %v5, %b6 ], [ 0, %b0 ]
  br i1 undef, label %b9, label %b8

b8:                                               ; preds = %b7, %b3, %b2
  %v7 = or i32 0, undef
  br label %b9

b9:                                               ; preds = %b8, %b7
  %v8 = phi i16 [ 0, %b8 ], [ %v6, %b7 ]
  %v9 = phi i32 [ %v7, %b8 ], [ 0, %b7 ]
  %v10 = load i16, i16* undef, align 2, !tbaa !4
  %v11 = sext i16 %v10 to i32
  %v12 = zext i16 %v10 to i32
  br i1 undef, label %b10, label %b11

b10:                                              ; preds = %b9
  store i1 true, i1* @g0, align 4
  br label %b11

b11:                                              ; preds = %b10, %b9
  %v13 = load i16, i16* undef, align 2, !tbaa !4
  %v14 = sext i16 %v13 to i32
  %v15 = shl nuw i32 %v12, 16
  %v16 = and i32 %v9, 65535
  %v17 = mul nsw i32 %v11, %v16
  %v18 = sitofp i32 %v15 to double
  %v19 = fsub double %v18, undef
  %v20 = sub nsw i32 %v15, %v17
  %v21 = fptosi double %v19 to i32
  %v22 = select i1 undef, i32 %v21, i32 %v20
  %v23 = mul nsw i32 %v14, %v16
  %v24 = add nsw i32 %v23, %v22
  %v25 = add nsw i32 %v24, 32768
  %v26 = lshr i32 %v25, 16
  %v27 = xor i1 undef, true
  %v28 = and i1 %v27, undef
  br i1 %v28, label %b12, label %b13

b12:                                              ; preds = %b11
  store i1 true, i1* @g0, align 4
  br label %b13

b13:                                              ; preds = %b12, %b11
  br i1 undef, label %b14, label %b24

b14:                                              ; preds = %b13
  br label %b15

b15:                                              ; preds = %b23, %b14
  br i1 undef, label %b16, label %b17

b16:                                              ; preds = %b15
  br label %b19

b17:                                              ; preds = %b15
  %v29 = trunc i32 %v26 to i16
  %v30 = icmp eq i16 %v29, -32768
  %v31 = and i1 undef, %v30
  br i1 %v31, label %b18, label %b19

b18:                                              ; preds = %b17
  store i1 true, i1* @g0, align 4
  br label %b20

b19:                                              ; preds = %b17, %b16
  br label %b20

b20:                                              ; preds = %b19, %b18
  %v32 = phi i32 [ 2147483647, %b18 ], [ 0, %b19 ]
  %v33 = icmp eq i16 %v8, 32767
  br i1 %v33, label %b21, label %b22

b21:                                              ; preds = %b20
  store i1 true, i1* @g0, align 4
  br label %b23

b22:                                              ; preds = %b20
  br label %b23

b23:                                              ; preds = %b22, %b21
  %v34 = add nsw i32 %v32, 32768
  %v35 = lshr i32 %v34, 16
  %v36 = trunc i32 %v35 to i16
  store i16 %v36, i16* undef, align 2, !tbaa !4
  br i1 undef, label %b24, label %b15

b24:                                              ; preds = %b23, %b13
  call fastcc void @f0(i16 signext undef, i16 signext %a1, i16 signext %a2, i16* %a3, i16 signext %a4, i16* %a6)
  call void @llvm.stackrestore(i8* %v0)
  ret i32 undef
}

attributes #0 = { nounwind }
attributes #1 = { norecurse nounwind "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length64b" }

!llvm.module.flags = !{!0}

!0 = !{i32 6, !"Target Features", !1}
!1 = !{!"+hvx,+hvx-length64b"}
!2 = distinct !{!2, !3}
!3 = !{!"llvm.loop.threadify", i32 43789156}
!4 = !{!5, !5, i64 0}
!5 = !{!"short", !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
OpenPOWER on IntegriCloud