mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Most tests were using %swift or similar substitutions, which did not include the target triple and SDK. The driver was defaulting to the host OS. Thus, we could not run the tests when the standard library was not built for OS X. Swift SVN r24504
161 lines
2.5 KiB
Swift
161 lines
2.5 KiB
Swift
// RUN: %target-swift-frontend -primary-file %s -O -disable-llvm-optzns -emit-ir | FileCheck %s
|
|
|
|
enum NoPayload {
|
|
case E0
|
|
case E1
|
|
case E2
|
|
case E3
|
|
}
|
|
|
|
// Check if the code of a select_num is a simple int cast and not a switch.
|
|
|
|
// CHECK-LABEL: define {{.*}}selectDirect
|
|
// CHECK: %1 = zext i2 %0 to i32
|
|
// CHECK: ret i32 %1
|
|
|
|
@inline(never)
|
|
func selectDirect(e: NoPayload) -> Int32 {
|
|
switch e {
|
|
case .E0:
|
|
return 0
|
|
case .E1:
|
|
return 1
|
|
case .E2:
|
|
return 2
|
|
case .E3:
|
|
return 3
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}}selectNegOffset
|
|
// CHECK: %1 = zext i2 %0 to i32
|
|
// CHECK: %2 = add i32 %1, -6
|
|
// CHECK: ret i32 %2
|
|
|
|
@inline(never)
|
|
func selectNegOffset(e: NoPayload) -> Int32 {
|
|
switch e {
|
|
case .E0:
|
|
return -6
|
|
case .E1:
|
|
return -5
|
|
case .E2:
|
|
return -4
|
|
case .E3:
|
|
return -3
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}}selectPosOffset
|
|
// CHECK: %1 = zext i2 %0 to i32
|
|
// CHECK: %2 = add i32 %1, 3
|
|
// CHECK: ret i32 %2
|
|
|
|
@inline(never)
|
|
func selectPosOffset(e: NoPayload) -> Int32 {
|
|
switch e {
|
|
case .E0:
|
|
return 3
|
|
case .E1:
|
|
return 4
|
|
case .E2:
|
|
return 5
|
|
case .E3:
|
|
return 6
|
|
}
|
|
}
|
|
|
|
// Following functions contain select_enums, which cannot be generated as a
|
|
// simple conversion.
|
|
|
|
// CHECK-LABEL: define {{.*}}selectWithDefault
|
|
// CHECK: switch i2
|
|
// CHECK: ret
|
|
|
|
@inline(never)
|
|
func selectWithDefault(e: NoPayload) -> Int32 {
|
|
switch e {
|
|
case .E0:
|
|
return 0
|
|
case .E1:
|
|
return 1
|
|
default:
|
|
return 2
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}}selectNonContiguous
|
|
// CHECK: switch i2
|
|
// CHECK: ret
|
|
|
|
@inline(never)
|
|
func selectNonContiguous(e: NoPayload) -> Int32 {
|
|
switch e {
|
|
case .E0:
|
|
return 0
|
|
case .E1:
|
|
return 1
|
|
case .E2:
|
|
return 3
|
|
case .E3:
|
|
return 4
|
|
}
|
|
}
|
|
|
|
var gg : Int32 = 10
|
|
|
|
// CHECK-LABEL: define {{.*}}selectNonConstant
|
|
// CHECK: switch i2
|
|
// CHECK: ret
|
|
|
|
@inline(never)
|
|
func selectNonConstant(e: NoPayload) -> Int32 {
|
|
switch e {
|
|
case .E0:
|
|
return 0
|
|
case .E1:
|
|
return 1
|
|
case .E2:
|
|
return gg
|
|
case .E3:
|
|
return 4
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}}selectTuple
|
|
// CHECK: switch i2
|
|
// CHECK: ret
|
|
|
|
@inline(never)
|
|
func selectTuple(e: NoPayload) -> (Int32, Int32) {
|
|
switch e {
|
|
case .E0:
|
|
return (0, 1)
|
|
case .E1:
|
|
return (1, 2)
|
|
case .E2:
|
|
return (2, 3)
|
|
case .E3:
|
|
return (3, 4)
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}}selectNonInt
|
|
// CHECK: switch i2
|
|
// CHECK: ret
|
|
|
|
@inline(never)
|
|
func selectNonInt(e: NoPayload) -> String {
|
|
switch e {
|
|
case .E0:
|
|
return "a"
|
|
case .E1:
|
|
return "ab"
|
|
case .E2:
|
|
return "abc"
|
|
case .E3:
|
|
return "abcd"
|
|
}
|
|
}
|
|
|