[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / condbr_switch.ll
blob079c0e2ab2026f1f07d95c22d400a3dc8956a5c0
1 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=sandybridge %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
2 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=ivybridge %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
3 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=haswell %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
4 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=broadwell %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
5 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=skylake %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
6 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=skx %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
7 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=NOTMERGE
9 @v1 = common dso_local local_unnamed_addr global i32 0, align 4
10 @v2 = common dso_local local_unnamed_addr global i32 0, align 4
11 @v3 = common dso_local local_unnamed_addr global i32 0, align 4
12 @v4 = common dso_local local_unnamed_addr global i32 0, align 4
13 @v5 = common dso_local local_unnamed_addr global i32 0, align 4
14 @v6 = common dso_local local_unnamed_addr global i32 0, align 4
15 @v7 = common dso_local local_unnamed_addr global i32 0, align 4
16 @v8 = common dso_local local_unnamed_addr global i32 0, align 4
17 @v9 = common dso_local local_unnamed_addr global i32 0, align 4
18 @v10 = common dso_local local_unnamed_addr global i32 0, align 4
19 @v11 = common dso_local local_unnamed_addr global i32 0, align 4
20 @v12 = common dso_local local_unnamed_addr global i32 0, align 4
21 @v13 = common dso_local local_unnamed_addr global i32 0, align 4
22 @v14 = common dso_local local_unnamed_addr global i32 0, align 4
23 @v15 = common dso_local local_unnamed_addr global i32 0, align 4
25 define dso_local i32 @fourcases(i32 %n) {
26 entry:
27   switch i32 %n, label %return [
28     i32 111, label %sw.bb
29     i32 222, label %sw.bb1
30     i32 3665, label %sw.bb2
31     i32 4444, label %sw.bb4
32   ]
34 sw.bb:
35   %0 = load i32, i32* @v1, align 4
36   br label %return
38 sw.bb1:
39   %1 = load i32, i32* @v2, align 4
40   %add = add nsw i32 %1, 12
41   br label %return
43 sw.bb2:
44   %2 = load i32, i32* @v3, align 4
45   %add3 = add nsw i32 %2, 13
46   br label %return
48 sw.bb4:
49   %3 = load i32, i32* @v1, align 4
50   %4 = load i32, i32* @v2, align 4
51   %add5 = add nsw i32 %4, %3
52   br label %return
54 return:
55   %retval.0 = phi i32 [ %add5, %sw.bb4 ], [ %add3, %sw.bb2 ], [ %add, %sw.bb1 ], [ %0, %sw.bb ], [ 0, %entry ]
56   ret i32 %retval.0
58 ; MERGE-LABEL: fourcases
59 ; MERGE: cmpl $3665
60 ; MERGE-NEXT: jg
61 ; MERGE-NEXT: jge
62 ; NOTMERGE: cmpl $3664
63 ; NOTMERGE-NEXT: jg
65 define dso_local i32 @fifteencases(i32) {
66   switch i32 %0, label %32 [
67     i32 -111, label %2
68     i32 -13, label %4
69     i32 25, label %6
70     i32 37, label %8
71     i32 89, label %10
72     i32 111, label %12
73     i32 213, label %14
74     i32 271, label %16
75     i32 283, label %18
76     i32 325, label %20
77     i32 327, label %22
78     i32 429, label %24
79     i32 500, label %26
80     i32 603, label %28
81     i32 605, label %30
82   ]
84 ; <label>:2
85   %3 = load i32, i32* @v1, align 4
86   br label %32
88 ; <label>:4
89   %5 = load i32, i32* @v2, align 4
90   br label %32
92 ; <label>:6
93   %7 = load i32, i32* @v3, align 4
94   br label %32
96 ; <label>:8
97   %9 = load i32, i32* @v4, align 4
98   br label %32
100 ; <label>:10
101   %11 = load i32, i32* @v5, align 4
102   br label %32
104 ; <label>:12
105   %13 = load i32, i32* @v6, align 4
106   br label %32
108 ; <label>:14
109   %15 = load i32, i32* @v7, align 4
110   br label %32
112 ; <label>:16
113   %17 = load i32, i32* @v8, align 4
114   br label %32
116 ; <label>:18
117   %19 = load i32, i32* @v9, align 4
118   br label %32
120 ; <label>:20
121   %21 = load i32, i32* @v10, align 4
122   br label %32
124 ; <label>:22
125   %23 = load i32, i32* @v11, align 4
126   br label %32
128 ; <label>:24
129   %25 = load i32, i32* @v12, align 4
130   br label %32
132 ; <label>:26
133   %27 = load i32, i32* @v13, align 4
134   br label %32
136 ; <label>:28:
137   %29 = load i32, i32* @v14, align 4
138   br label %32
140 ; <label>:30:
141   %31 = load i32, i32* @v15, align 4
142   br label %32
144 ; <label>:32:
145   %33 = phi i32 [ %31, %30 ], [ %29, %28 ], [ %27, %26 ], [ %25, %24 ], [ %23, %22 ], [ %21, %20 ], [ %19, %18 ], [ %17, %16 ], [ %15, %14 ], [ %13, %12 ], [ %11, %10 ], [ %9, %8 ], [ %7, %6 ], [ %5, %4 ], [ %3, %2 ], [ 0, %1 ]
146   ret i32 %33
148 ; MERGE-LABEL: fifteencases
149 ; MERGE: cmpl $271
150 ; MERGE-NEXT: jg
151 ; MERGE-NEXT: jge
152 ; MERGE: cmpl $37
153 ; MERGE-NEXT: jg
154 ; MERGE-NEXT: jge
155 ; MERGE: cmpl $429
156 ; MERGE-NEXT: jg
157 ; MERGE-NEXT: jge
158 ; MERGE: cmpl $325
159 ; MERGE-NEXT: jg
160 ; MERGE-NEXT: jge
161 ; MERGE: cmpl $603
162 ; MERGE-NEXT: jg
163 ; MERGE-NEXT: jge
164 ; NOTMERGE-LABEL: fifteencases
165 ; NOTMERGE: cmpl $270
166 ; NOTMERGE-NEXT: jle