Skip to content

Commit dab0d8e

Browse files
authored
Merge pull request #17589 from eeckstein/disable-static-strings-macos
Temporarily disable generation of static long Strings for macos.
2 parents 6239d7f + f051591 commit dab0d8e

File tree

2 files changed

+64
-42
lines changed

2 files changed

+64
-42
lines changed

lib/SIL/SILGlobalVariable.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ bool SILGlobalVariable::isValidStaticInitializerInst(const SILInstruction *I,
9292
// a pointer+offset relocation.
9393
// Note that StringObjectOr requires the or'd bits in the first
9494
// operand to be 0, so the operation is equivalent to an addition.
95+
96+
// Temporarily disable static long Strings for macos.
97+
// rdar://problem/41433840
98+
if (M.getASTContext().LangOpts.Target.isMacOSX())
99+
return false;
100+
95101
if (isa<IntegerLiteralInst>(bi->getArguments()[1]))
96102
return true;
97103
break;

test/SILOptimizer/static_strings.swift

Lines changed: 58 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-swift-frontend -O -emit-ir %s | %FileCheck %s
2-
// RUN: %target-swift-frontend -Osize -emit-ir %s | %FileCheck %s
1+
// RUN: %target-swift-frontend -O -emit-ir %s | %FileCheck --check-prefix=CHECK-%target-cpu %s
2+
// RUN: %target-swift-frontend -Osize -emit-ir %s | %FileCheck --check-prefix=CHECK-%target-cpu %s
33

44
// RUN: %empty-directory(%t)
55
// RUN: %target-build-swift -O -module-name=test %s -o %t/a.out
@@ -12,72 +12,88 @@
1212
// optimal code for static String variables.
1313

1414
public struct S {
15-
// CHECK: {{^@"}}[[SMALL:.*smallstr.*pZ]]" ={{.*}} global {{.*}} inttoptr
15+
// CHECK-x86_64: {{^@"}}[[SMALL:.*smallstr.*pZ]]" ={{.*}} global {{.*}} inttoptr
16+
// CHECK-arm64: {{^@"}}[[SMALL:.*smallstr.*pZ]]" ={{.*}} global {{.*}} inttoptr
1617
public static let smallstr = "abc123a"
17-
// CHECK: {{^@"}}[[LARGE:.*largestr.*pZ]]" ={{.*}} global {{.*}} inttoptr {{.*}} add
18+
// CHECK-arm64: {{^@"}}[[LARGE:.*largestr.*pZ]]" ={{.*}} global {{.*}} inttoptr {{.*}} add
1819
public static let largestr = "abc123asd3sdj3basfasdf"
19-
// CHECK: {{^@"}}[[UNICODE:.*unicodestr.*pZ]]" ={{.*}} global {{.*}} inttoptr {{.*}} add
20+
// CHECK-arm64: {{^@"}}[[UNICODE:.*unicodestr.*pZ]]" ={{.*}} global {{.*}} inttoptr {{.*}} add
2021
public static let unicodestr = "❄️gastroperiodyni"
2122
}
2223

2324
// unsafeMutableAddressor for S.smallstr
24-
// CHECK: define {{.*smallstr.*}}u"
25-
// CHECK-NEXT: entry:
26-
// CHECK-NEXT: ret {{.*}} @"[[SMALL]]"
27-
// CHECK-NEXT: }
25+
// CHECK-arm64: define {{.*smallstr.*}}u"
26+
// CHECK-arm64-NEXT: entry:
27+
// CHECK-arm64-NEXT: ret {{.*}} @"[[SMALL]]"
28+
// CHECK-arm64-NEXT: }
29+
30+
// CHECK-x86_64: define {{.*smallstr.*}}u"
31+
// CHECK-x86_64-NEXT: entry:
32+
// CHECK-x86_64-NEXT: ret {{.*}} @"[[SMALL]]"
33+
// CHECK-x86_64-NEXT: }
2834

2935
// getter for S.smallstr
30-
// CHECK: define {{.*smallstr.*}}gZ"
31-
// CHECK-NEXT: entry:
32-
// CHECK-NEXT: ret {{.*}}
33-
// CHECK-NEXT: }
36+
// CHECK-arm64: define {{.*smallstr.*}}gZ"
37+
// CHECK-arm64-NEXT: entry:
38+
// CHECK-arm64-NEXT: ret {{.*}}
39+
// CHECK-arm64-NEXT: }
40+
41+
// CHECK-x86_64: define {{.*smallstr.*}}gZ"
42+
// CHECK-x86_64-NEXT: entry:
43+
// CHECK-x86_64-NEXT: ret {{.*}}
44+
// CHECK-x86_64-NEXT: }
3445

3546
// unsafeMutableAddressor for S.largestr
36-
// CHECK: define {{.*largestr.*}}u"
37-
// CHECK-NEXT: entry:
38-
// CHECK-NEXT: ret {{.*}} @"[[LARGE]]"
39-
// CHECK-NEXT: }
47+
// CHECK-arm64: define {{.*largestr.*}}u"
48+
// CHECK-arm64-NEXT: entry:
49+
// CHECK-arm64-NEXT: ret {{.*}} @"[[LARGE]]"
50+
// CHECK-arm64-NEXT: }
4051

4152
// getter for S.largestr
42-
// CHECK: define {{.*largestr.*}}gZ"
43-
// CHECK-NEXT: entry:
44-
// CHECK-NEXT: ret {{.*}}
45-
// CHECK-NEXT: }
53+
// CHECK-arm64: define {{.*largestr.*}}gZ"
54+
// CHECK-arm64-NEXT: entry:
55+
// CHECK-arm64-NEXT: ret {{.*}}
56+
// CHECK-arm64-NEXT: }
4657

4758
// unsafeMutableAddressor for S.unicodestr
48-
// CHECK: define {{.*unicodestr.*}}u"
49-
// CHECK-NEXT: entry:
50-
// CHECK-NEXT: ret {{.*}} @"[[UNICODE]]"
51-
// CHECK-NEXT: }
59+
// CHECK-arm64: define {{.*unicodestr.*}}u"
60+
// CHECK-arm64-NEXT: entry:
61+
// CHECK-arm64-NEXT: ret {{.*}} @"[[UNICODE]]"
62+
// CHECK-arm64-NEXT: }
5263

5364
// getter for S.unicodestr
54-
// CHECK: define {{.*unicodestr.*}}gZ"
55-
// CHECK-NEXT: entry:
56-
// CHECK-NEXT: ret {{.*}}
57-
// CHECK-NEXT: }
58-
59-
// CHECK-LABEL: define {{.*}}get_smallstr
60-
// CHECK: entry:
61-
// CHECK-NEXT: ret {{.*}}
62-
// CHECK-NEXT: }
65+
// CHECK-arm64: define {{.*unicodestr.*}}gZ"
66+
// CHECK-arm64-NEXT: entry:
67+
// CHECK-arm64-NEXT: ret {{.*}}
68+
// CHECK-arm64-NEXT: }
69+
70+
// CHECK-arm64-LABEL: define {{.*}}get_smallstr
71+
// CHECK-arm64: entry:
72+
// CHECK-arm64-NEXT: ret {{.*}}
73+
// CHECK-arm64-NEXT: }
74+
75+
// CHECK-x86_64-LABEL: define {{.*}}get_smallstr
76+
// CHECK-x86_64: entry:
77+
// CHECK-x86_64-NEXT: ret {{.*}}
78+
// CHECK-x86_64-NEXT: }
6379
@inline(never)
6480
public func get_smallstr() -> String {
6581
return S.smallstr
6682
}
6783

68-
// CHECK-LABEL: define {{.*}}get_largestr
69-
// CHECK: entry:
70-
// CHECK-NEXT: ret {{.*}}
71-
// CHECK-NEXT: }
84+
// CHECK-arm64-LABEL: define {{.*}}get_largestr
85+
// CHECK-arm64: entry:
86+
// CHECK-arm64-NEXT: ret {{.*}}
87+
// CHECK-arm64-NEXT: }
7288
@inline(never)
7389
public func get_largestr() -> String {
7490
return S.largestr
7591
}
7692

77-
// CHECK-LABEL: define {{.*}}get_unicodestr
78-
// CHECK: entry:
79-
// CHECK-NEXT: ret {{.*}}
80-
// CHECK-NEXT: }
93+
// CHECK-arm64-LABEL: define {{.*}}get_unicodestr
94+
// CHECK-arm64: entry:
95+
// CHECK-arm64-NEXT: ret {{.*}}
96+
// CHECK-arm64-NEXT: }
8197
@inline(never)
8298
public func get_unicodestr() -> String {
8399
return S.unicodestr

0 commit comments

Comments
 (0)