File: mixed_mode_class_with_unimportable_fields.sil

package info (click to toggle)
swiftlang 6.1.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,791,532 kB
  • sloc: cpp: 9,901,743; ansic: 2,201,431; asm: 1,091,827; python: 308,252; objc: 82,166; f90: 80,126; lisp: 38,358; pascal: 25,559; sh: 20,429; ml: 5,058; perl: 4,745; makefile: 4,484; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (68 lines) | stat: -rw-r--r-- 3,813 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module -o %t/UsingObjCStuff.swiftmodule -module-name UsingObjCStuff -I %t -I %S/Inputs/mixed_mode -swift-version 4 %S/Inputs/mixed_mode/UsingObjCStuff.swift
// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 4 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V5 --check-prefix=CHECK-V5-%target-ptrsize  -DWORD=i%target-ptrsize
// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 5 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V5 --check-prefix=CHECK-V5-%target-ptrsize -DWORD=i%target-ptrsize

// REQUIRES: objc_interop

sil_stage canonical

import Swift
import UsingObjCStuff

class SubButtHolder: ButtHolder {
  var w: Double = 0
}

class SubSubButtHolder: SubButtHolder {
  var v: Double = 0
}

sil_vtable SubButtHolder {}
sil_vtable SubSubButtHolder {}

// CHECK-LABEL: define {{.*}} @getHolder
sil @getHolder: $@convention(thin) () -> @owned ButtHolder {
entry:

  // In Swift 4 mode, we don't know the size or alignment of ButtHolder
  // instances, so we should load the dimensions of the class instance
  // from metadata.
  //
  // In Swift 5 mode, it's okay to hardcode constants.

  // CHECK-V4: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s14UsingObjCStuff10ButtHolderCMa"([[WORD]] 0)
  // CHECK-V4: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
  // CHECK-V4-64: [[SIZE32:%.*]] = load i32
  // CHECK-V4-64: [[SIZE:%.*]] = zext i32 [[SIZE32]] to
  // CHECK-V4-32: [[SIZE:%.*]] = load i32
  // CHECK-V4: [[ALIGN16:%.*]] = load i16
  // CHECK-V4: [[ALIGN:%.*]] = zext i16 [[ALIGN16]] to [[WORD]]
  // CHECK-V4: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] [[SIZE]], [[WORD]] [[ALIGN]])

  // CHECK-V5: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s14UsingObjCStuff10ButtHolderCMa"([[WORD]] 0)
  // CHECK-V5: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
  // CHECK-V5-32: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 28, [[WORD]] 3)
  // CHECK-V5-64: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 48, [[WORD]] 7)

  %x = alloc_ref $ButtHolder
  // CHECK-V4: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s4main13SubButtHolderCMa"([[WORD]] 0)
  // CHECK-V4: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
  // CHECK-V4: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}})

  // CHECK-V5: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s4main13SubButtHolderCMa"([[WORD]] 0)
  // CHECK-V5: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
  // CHECK-V5-32: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 40, [[WORD]] 7)
  // CHECK-V5-64: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 56, [[WORD]] 7)
  %y = alloc_ref $SubButtHolder
  // CHECK-V4: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s4main03SubB10ButtHolderCMa"([[WORD]] 0)
  // CHECK-V4: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
  // CHECK-V4: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}})

  // CHECK-V5: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s4main03SubB10ButtHolderCMa"([[WORD]] 0)
  // CHECK-V5: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
  // CHECK-V5-32: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 48, [[WORD]] 7)
  // CHECK-V5-64: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 64, [[WORD]] 7)
  %z = alloc_ref $SubSubButtHolder
  return %x : $ButtHolder
}