forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
// RUN: llgo -S -emit-llvm -o - %s | FileCheck %s
 | 
						|
 | 
						|
package foo
 | 
						|
 | 
						|
// CHECK: switch i32
 | 
						|
// CHECK-NEXT: i32 0, label %[[L0:.*]]
 | 
						|
// CHECK-NEXT: i32 1, label %[[L1:.*]]
 | 
						|
// CHECK-NEXT: i32 2, label %[[L2:.*]]
 | 
						|
// CHECK-NEXT: ]
 | 
						|
// CHECK: [[L0]]:
 | 
						|
// CHECK-NEXT: ret i32 1
 | 
						|
// CHECK: [[L1]]:
 | 
						|
// CHECK-NEXT: ret i32 2
 | 
						|
// CHECK: [[L2]]:
 | 
						|
// CHECK-NEXT: ret i32 0
 | 
						|
func F1(x int32) int32 {
 | 
						|
	switch x {
 | 
						|
	case 0:
 | 
						|
		return 1
 | 
						|
	case 1:
 | 
						|
		return 2
 | 
						|
	case 2:
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	panic("unreachable")
 | 
						|
}
 | 
						|
 | 
						|
// CHECK: switch i64
 | 
						|
// CHECK-NEXT: i64 0
 | 
						|
// CHECK-NEXT: ]
 | 
						|
// CHECK: icmp eq i64 {{.*}}, 1
 | 
						|
func F2(x int64) bool {
 | 
						|
	return x == 0 || x == 0 || x == 1
 | 
						|
}
 | 
						|
 | 
						|
// CHECK: switch i64
 | 
						|
// CHECK-NEXT: i64 0
 | 
						|
// CHECK-NEXT: ]
 | 
						|
func F3(x int64) bool {
 | 
						|
	return x == 0 || x == 0 || x == 0
 | 
						|
}
 | 
						|
 | 
						|
// CHECK: switch i64
 | 
						|
// CHECK-NEXT: i64 0
 | 
						|
// CHECK-NEXT: i64 1
 | 
						|
// CHECK-NEXT: i64 2
 | 
						|
// CHECK-NEXT: ]
 | 
						|
// CHECK: icmp eq i64 {{.*}}, 3
 | 
						|
func F4(x int64) bool {
 | 
						|
	return x == 0 || x == 1 || x == 2 || x == 3
 | 
						|
}
 | 
						|
 | 
						|
// CHECK-NOT: switch double
 | 
						|
func F5(x float64) float64 {
 | 
						|
	switch x {
 | 
						|
	case 0:
 | 
						|
		return 1.0
 | 
						|
	case 1.0:
 | 
						|
		return 0
 | 
						|
	}
 | 
						|
	panic("unreachable")
 | 
						|
}
 |