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  }