github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/test/irgen/switch.go (about) 1 // RUN: llgo -S -emit-llvm -o - %s | FileCheck %s 2 3 package 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 16 func 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 32 func 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: ] 39 func 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 49 func F4(x int64) bool { 50 return x == 0 || x == 1 || x == 2 || x == 3 51 } 52 53 // CHECK-NOT: switch double 54 func 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 }