mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
145 lines
3.4 KiB
Swift
145 lines
3.4 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift -O -module-name=test %s -o %t/a.out
|
|
// RUN: %target-build-swift -O -module-name=test %s -emit-ir | %FileCheck %s
|
|
// RUN: %target-codesign %t/a.out
|
|
// RUN: %target-run %t/a.out | %FileCheck %s --check-prefix=OUT
|
|
|
|
// REQUIRES: executable_test,optimized_stdlib
|
|
// REQUIRES: PTRSIZE=64
|
|
|
|
enum E: String {
|
|
case a, b, c, long_case_name_for_testing, d, e
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}} i1 @"$s4test9compareeqySbAA1EO_ADtF"(i8 %0, i8 %1)
|
|
// CHECK: %2 = icmp eq i8 %0, %1
|
|
// CHECK-NEXT: ret i1 %2
|
|
@inline(never)
|
|
func compareeq(_ a: E, _ b: E) -> Bool {
|
|
return a == b
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}} i1 @"$s4test9compareneySbAA1EO_ADtF"(i8 %0, i8 %1)
|
|
// CHECK: %2 = icmp ne i8 %0, %1
|
|
// CHECK-NEXT: ret i1 %2
|
|
@inline(never)
|
|
func comparene(_ a: E, _ b: E) -> Bool {
|
|
return a != b
|
|
}
|
|
|
|
enum LargeEnum: Equatable {
|
|
case a1, a2, a3, a4, a5, a6, a7, a8, a9
|
|
case b1, b2, b3, b4, b5, b6, b7, b8, b9
|
|
case c1, c2, c3, c4, c5, c6, c7, c8, c9
|
|
case d1, d2, d3, d4, d5, d6, d7, d8, d9
|
|
case e1(Int64), e2(Int64), e3(Int64), e4(Int64), e5(Int64), e6(Int64), e7(Int64), e8(Int64), e9(Int64)
|
|
case f1, f2, f3, f4, f5, f6, f7, f8, f9
|
|
case g1, g2, g3, g4, g5, g6, g7, g8, g9
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}} i1 @"$s4test8compare1ySbAA9LargeEnumOF"(i64 %0, i8 %1)
|
|
// CHECK: entry:
|
|
// CHECK-NEXT: icmp
|
|
// CHECK-NEXT: icmp
|
|
// CHECK-NEXT: {{(and|select)}}
|
|
// CHECK-NEXT: ret
|
|
@inline(never)
|
|
func compare1(_ x: LargeEnum) -> Bool {
|
|
return x == .b2
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}} i1 @"$s4test8compare2ySbAA9LargeEnumOF"(i64 %0, i8 %1)
|
|
// CHECK: entry:
|
|
// CHECK-NEXT: icmp
|
|
// CHECK-NEXT: icmp
|
|
// CHECK-NEXT: {{(and|select)}}
|
|
// CHECK-NEXT: ret
|
|
@inline(never)
|
|
func compare2(_ x: LargeEnum) -> Bool {
|
|
return .f2 == x
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}} i1 @"$s4test8compare3ySbAA9LargeEnumOF"(i64 %0, i8 %1)
|
|
// CHECK: entry:
|
|
// CHECK-NEXT: icmp
|
|
// CHECK-NEXT: icmp
|
|
// CHECK-NEXT: {{(and|select)}}
|
|
// CHECK-NEXT: ret
|
|
@inline(never)
|
|
func compare3(_ x: LargeEnum) -> Bool {
|
|
return .e2(27) == x
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}} i1 @"$s4test8compare4ySbAA9LargeEnumOF"(i64 %0, i8 %1)
|
|
// CHECK: entry:
|
|
// CHECK-NEXT: icmp
|
|
// CHECK-NEXT: icmp
|
|
// CHECK-NEXT: {{(and|select)}}
|
|
// CHECK-NEXT: ret
|
|
@inline(never)
|
|
func compare4(_ x: LargeEnum) -> Bool {
|
|
return x == .e3(28)
|
|
}
|
|
|
|
enum CustomRawValue: RawRepresentable {
|
|
case a, b, c
|
|
|
|
init(rawValue: Int) {
|
|
self = .a
|
|
}
|
|
|
|
@inline(never)
|
|
var rawValue: Int {
|
|
print(0)
|
|
return 0
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: define {{.*}} i1 @"$s4test8compare5ySbAA14CustomRawValueOF"(i8 %0)
|
|
// CHECK: entry:
|
|
// CHECK-NEXT: call
|
|
@inline(never)
|
|
func compare5(_ x: CustomRawValue) -> Bool {
|
|
return x == .b
|
|
}
|
|
|
|
// OUT: 1: false
|
|
print("1: \(compareeq(.c, .long_case_name_for_testing))")
|
|
|
|
// OUT: 2: true
|
|
print("2: \(compareeq(.c, .c))")
|
|
|
|
// OUT: 3: true
|
|
print("3: \(comparene(.c, .long_case_name_for_testing))")
|
|
|
|
// OUT: 4: false
|
|
print("4: \(comparene(.c, .c))")
|
|
|
|
// OUT: 5: false
|
|
print("5: \(compare1(.b1))")
|
|
|
|
// OUT: 6: true
|
|
print("6: \(compare1(.b2))")
|
|
|
|
// OUT: 7: false
|
|
print("7: \(compare2(.b1))")
|
|
|
|
// OUT: 8: true
|
|
print("8: \(compare2(.f2))")
|
|
|
|
// OUT: 9: true
|
|
print("9: \(compare3(.e2(27)))")
|
|
|
|
// OUT: 10: false
|
|
print("10: \(compare3(.e2(28)))")
|
|
|
|
// OUT: 11: true
|
|
print("11: \(compare4(.e3(28)))")
|
|
|
|
// OUT: 12: false
|
|
print("12: \(compare4(.e3(27)))")
|
|
|
|
// OUT: 13: true
|
|
print("13: \(compare5(.a))")
|
|
|