blob: af05d41ffcfb5b326ed70ba59daaa83b03fc200e [file] [log] [blame]
Andrew Wilkinsf3718a92015-01-08 07:49:28 +00001// RUN: llgo -S -emit-llvm -o - %s | FileCheck %s
2
3package foo
4
5// CHECK: switch i32
6// CHECK-NEXT: i32 0, label %[[L0:.*]]
7// CHECK-NEXT: i32 1, label %[[L1:.*]]
8// CHECK-NEXT: i32 2, label %[[L2:.*]]
9// CHECK-NEXT: ]
10// CHECK: [[L0]]:
11// CHECK-NEXT: ret i32 1
12// CHECK: [[L1]]:
13// CHECK-NEXT: ret i32 2
14// CHECK: [[L2]]:
15// CHECK-NEXT: ret i32 0
16func F1(x int32) int32 {
17 switch x {
18 case 0:
19 return 1
20 case 1:
21 return 2
22 case 2:
23 return 0
24 }
25 panic("unreachable")
26}
27
28// CHECK: switch i64
29// CHECK-NEXT: i64 0
30// CHECK-NEXT: ]
31// CHECK: icmp eq i64 {{.*}}, 1
32func F2(x int64) bool {
33 return x == 0 || x == 0 || x == 1
34}
35
36// CHECK: switch i64
37// CHECK-NEXT: i64 0
38// CHECK-NEXT: ]
39func F3(x int64) bool {
40 return x == 0 || x == 0 || x == 0
41}
42
43// CHECK: switch i64
44// CHECK-NEXT: i64 0
45// CHECK-NEXT: i64 1
46// CHECK-NEXT: i64 2
47// CHECK-NEXT: ]
48// CHECK: icmp eq i64 {{.*}}, 3
49func F4(x int64) bool {
50 return x == 0 || x == 1 || x == 2 || x == 3
51}
52
53// CHECK-NOT: switch double
54func F5(x float64) float64 {
55 switch x {
56 case 0:
57 return 1.0
58 case 1.0:
59 return 0
60 }
61 panic("unreachable")
62}