Files
swift-mirror/test/IRGen/select_enum_optimized.swift
Dmitri Hrybenko 3b04d1b013 tests: reorganize tests so that they actually use the target platform
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
2015-01-19 06:52:49 +00:00

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"
}
}