1// 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}
63