blob: 2dc9a7a5153cd06f0b1de098b94693a44db5a28d [file] [log] [blame]
Krzysztof Parzyszekde44c9d2017-01-18 23:12:19 +00001; RUN: llc -march=hexagon < %s | FileCheck %s
2
3; Check for a sane output. This testcase used to cause a crash.
4; CHECK: vlut16
5
6target triple = "hexagon-unknown--elf"
7
8declare void @halide_malloc() local_unnamed_addr #0
9
10declare <32 x i32> @llvm.hexagon.V6.lo.128B(<64 x i32>) #1
11declare <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32>) #1
12declare <64 x i32> @llvm.hexagon.V6.vcombine.128B(<32 x i32>, <32 x i32>) #1
13declare <32 x i32> @llvm.hexagon.V6.vmpyiewuh.128B(<32 x i32>, <32 x i32>) #1
14declare <64 x i32> @llvm.hexagon.V6.vaddw.dv.128B(<64 x i32>, <64 x i32>) #1
15declare <32 x i32> @llvm.hexagon.V6.vasrwhsat.128B(<32 x i32>, <32 x i32>, i32) #1
16declare <64 x i32> @llvm.hexagon.V6.vlutvwh.128B(<32 x i32>, <32 x i32>, i32) #1
17declare <64 x i32> @llvm.hexagon.V6.vlutvwh.oracc.128B(<64 x i32>, <32 x i32>, <32 x i32>, i32) #1
18
19define hidden void @fred() #0 {
20b0:
21 %v1 = ashr i32 undef, 7
22 %v2 = shl nsw i32 %v1, 7
23 switch i32 undef, label %b7 [
24 i32 1, label %b3
25 i32 2, label %b5
26 i32 3, label %b6
27 ]
28
29b3: ; preds = %b0
30 unreachable
31
32b4: ; preds = %b7
33 switch i32 undef, label %b9 [
34 i32 1, label %b8
35 i32 2, label %b10
36 i32 3, label %b11
37 ]
38
39b5: ; preds = %b0
40 unreachable
41
42b6: ; preds = %b0
43 unreachable
44
45b7: ; preds = %b0
46 br label %b4
47
48b8: ; preds = %b4
49 br label %b12
50
51b9: ; preds = %b4
52 br label %b12
53
54b10: ; preds = %b4
55 br label %b12
56
57b11: ; preds = %b4
58 br label %b12
59
60b12: ; preds = %b11, %b10, %b9, %b8
61 br label %b13
62
63b13: ; preds = %b14, %b12
64 br label %b14
65
66b14: ; preds = %b13
67 br i1 undef, label %b15, label %b13
68
69b15: ; preds = %b14
70 br label %b16
71
72b16: ; preds = %b15
73 br i1 undef, label %b17, label %b18
74
75b17: ; preds = %b16
76 unreachable
77
78b18: ; preds = %b16
79 tail call void @halide_malloc()
80 br label %b19
81
82b19: ; preds = %b18
83 br i1 undef, label %b20, label %b21
84
85b20: ; preds = %b19
86 br label %b32
87
88b21: ; preds = %b38, %b19
89 %v22 = zext i32 %v2 to i64
90 %v23 = lshr i64 %v22, 31
91 %v24 = shl nuw nsw i64 %v23, 1
92 %v25 = or i64 %v24, 0
93 %v26 = icmp ult i64 undef, 2147483648
94 %v27 = mul nuw nsw i64 %v25, 3
95 %v28 = add nuw nsw i64 %v27, 0
96 %v29 = and i64 %v28, 133143986176
97 %v30 = icmp eq i64 %v29, 0
98 %v31 = and i1 %v26, %v30
99 br label %b39
100
101b32: ; preds = %b20
102 %v33 = zext i32 %v2 to i64
103 %v34 = mul nuw nsw i64 %v33, 12
104 %v35 = icmp ult i64 %v34, 2147483648
105 %v36 = and i1 %v35, undef
106 br i1 %v36, label %b38, label %b37
107
108b37: ; preds = %b32
109 ret void
110
111b38: ; preds = %b32
112 tail call void @halide_malloc()
113 br label %b21
114
115b39: ; preds = %b42, %b21
116 br label %b40
117
118b40: ; preds = %b39
119 br i1 %v31, label %b42, label %b41
120
121b41: ; preds = %b40
122 unreachable
123
124b42: ; preds = %b40
125 %v43 = tail call <64 x i32> @llvm.hexagon.V6.vlutvwh.128B(<32 x i32> undef, <32 x i32> undef, i32 0)
126 %v44 = tail call <64 x i32> @llvm.hexagon.V6.vlutvwh.oracc.128B(<64 x i32> %v43, <32 x i32> undef, <32 x i32> undef, i32 1)
127 %v45 = tail call <64 x i32> @llvm.hexagon.V6.vlutvwh.oracc.128B(<64 x i32> %v44, <32 x i32> undef, <32 x i32> undef, i32 2)
128 %v46 = tail call <64 x i32> @llvm.hexagon.V6.vlutvwh.oracc.128B(<64 x i32> %v45, <32 x i32> undef, <32 x i32> undef, i32 3)
129 %v47 = tail call <64 x i32> @llvm.hexagon.V6.vlutvwh.oracc.128B(<64 x i32> %v46, <32 x i32> undef, <32 x i32> undef, i32 4)
130 %v48 = tail call <64 x i32> @llvm.hexagon.V6.vlutvwh.oracc.128B(<64 x i32> %v47, <32 x i32> undef, <32 x i32> undef, i32 5)
131 %v49 = tail call <32 x i32> @llvm.hexagon.V6.lo.128B(<64 x i32> %v48)
132 %v50 = tail call <32 x i32> @llvm.hexagon.V6.vmpyiewuh.128B(<32 x i32> undef, <32 x i32> %v49) #2
133 %v51 = tail call <64 x i32> @llvm.hexagon.V6.vcombine.128B(<32 x i32> undef, <32 x i32> %v50) #2
134 %v52 = tail call <64 x i32> @llvm.hexagon.V6.vaddw.dv.128B(<64 x i32> %v51, <64 x i32> undef) #2
135 %v53 = tail call <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32> %v52) #2
136 %v54 = tail call <32 x i32> @llvm.hexagon.V6.vasrwhsat.128B(<32 x i32> %v53, <32 x i32> undef, i32 15) #2
137 store <32 x i32> %v54, <32 x i32>* undef, align 128
138 br label %b39
139}
140
Sumanth Gundapanenie1983bc2017-10-18 18:07:07 +0000141attributes #0 = { nounwind "target-cpu"="hexagonv60" "target-features"="+hvxv60,+hvx-length128b" }
Krzysztof Parzyszekde44c9d2017-01-18 23:12:19 +0000142attributes #1 = { nounwind readnone }
143attributes #2 = { nounwind }