File: mixed_mode_class_with_unimportable_fields.sil

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (68 lines) | stat: -rw-r--r-- 3,813 bytes parent folder | download
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
}