Skip to content

Commit 808aa38

Browse files
authored
Unrolled build for rust-lang#126908
Rollup merge of rust-lang#126908 - GnomedDev:cow-inline-asm-temp-piece, r=compiler-errors Use Cow<'static, str> for InlineAsmTemplatePiece::String This removes a bunch of `&'static str -> String` allocations in codegen cranelift.
2 parents eb10639 + db8cdc5 commit 808aa38

File tree

4 files changed

+28
-27
lines changed

4 files changed

+28
-27
lines changed

compiler/rustc_ast/src/ast.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ use rustc_macros::{Decodable, Encodable, HashStable_Generic};
3636
use rustc_span::source_map::{respan, Spanned};
3737
use rustc_span::symbol::{kw, sym, Ident, Symbol};
3838
use rustc_span::{ErrorGuaranteed, Span, DUMMY_SP};
39+
use std::borrow::Cow;
3940
use std::cmp;
4041
use std::fmt;
4142
use std::mem;
@@ -2308,7 +2309,7 @@ impl std::fmt::Debug for InlineAsmOptions {
23082309

23092310
#[derive(Clone, PartialEq, Encodable, Decodable, Debug, Hash, HashStable_Generic)]
23102311
pub enum InlineAsmTemplatePiece {
2311-
String(String),
2312+
String(Cow<'static, str>),
23122313
Placeholder { operand_idx: usize, modifier: Option<char>, span: Span },
23132314
}
23142315

compiler/rustc_builtin_macros/src/asm.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ fn expand_preparsed_asm(
459459

460460
for (i, template_expr) in args.templates.into_iter().enumerate() {
461461
if i != 0 {
462-
template.push(ast::InlineAsmTemplatePiece::String("\n".to_string()));
462+
template.push(ast::InlineAsmTemplatePiece::String("\n".into()));
463463
}
464464

465465
let msg = "asm template must be a string literal";
@@ -527,7 +527,7 @@ fn expand_preparsed_asm(
527527

528528
// Don't treat raw asm as a format string.
529529
if args.options.contains(ast::InlineAsmOptions::RAW) {
530-
template.push(ast::InlineAsmTemplatePiece::String(template_str.to_string()));
530+
template.push(ast::InlineAsmTemplatePiece::String(template_str.to_string().into()));
531531
let template_num_lines = 1 + template_str.matches('\n').count();
532532
line_spans.extend(std::iter::repeat(template_sp).take(template_num_lines));
533533
continue;
@@ -577,7 +577,7 @@ fn expand_preparsed_asm(
577577
for piece in unverified_pieces {
578578
match piece {
579579
parse::Piece::String(s) => {
580-
template.push(ast::InlineAsmTemplatePiece::String(s.to_string()))
580+
template.push(ast::InlineAsmTemplatePiece::String(s.to_string().into()))
581581
}
582582
parse::Piece::NextArgument(arg) => {
583583
let span = arg_spans.next().unwrap_or(template_sp);

compiler/rustc_codegen_cranelift/src/inline_asm.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,7 @@ pub(crate) fn codegen_inline_asm_terminator<'tcx>(
4646
// Used by panic_abort on Windows, but uses a syntax which only happens to work with
4747
// asm!() by accident and breaks with the GNU assembler as well as global_asm!() for
4848
// the LLVM backend.
49-
if template.len() == 1
50-
&& template[0] == InlineAsmTemplatePiece::String("int $$0x29".to_string())
51-
{
49+
if template.len() == 1 && template[0] == InlineAsmTemplatePiece::String("int $$0x29".into()) {
5250
fx.bcx.ins().trap(TrapCode::User(1));
5351
return;
5452
}

compiler/rustc_codegen_cranelift/src/intrinsics/llvm_x86.rs

+22-20
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
4040
shl rdx, 32
4141
or rax, rdx
4242
"
43-
.to_string(),
43+
.into(),
4444
)],
4545
&[
4646
CInlineAsmOperand::In {
@@ -471,7 +471,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
471471
// into 0x80000000 for which Cranelift doesn't have a native instruction.
472472
codegen_inline_asm_inner(
473473
fx,
474-
&[InlineAsmTemplatePiece::String(format!("cvtps2dq xmm0, xmm0"))],
474+
&[InlineAsmTemplatePiece::String("cvtps2dq xmm0, xmm0".into())],
475475
&[CInlineAsmOperand::InOut {
476476
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
477477
_late: true,
@@ -875,7 +875,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
875875

876876
codegen_inline_asm_inner(
877877
fx,
878-
&[InlineAsmTemplatePiece::String(asm.to_string())],
878+
&[InlineAsmTemplatePiece::String(asm.into())],
879879
&[
880880
CInlineAsmOperand::InOut {
881881
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::ax)),
@@ -914,7 +914,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
914914

915915
codegen_inline_asm_inner(
916916
fx,
917-
&[InlineAsmTemplatePiece::String(format!("pcmpestri xmm0, xmm1, {imm8}"))],
917+
&[InlineAsmTemplatePiece::String(format!("pcmpestri xmm0, xmm1, {imm8}").into())],
918918
&[
919919
CInlineAsmOperand::In {
920920
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
@@ -967,7 +967,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
967967

968968
codegen_inline_asm_inner(
969969
fx,
970-
&[InlineAsmTemplatePiece::String(format!("pcmpestrm xmm0, xmm1, {imm8}"))],
970+
&[InlineAsmTemplatePiece::String(format!("pcmpestrm xmm0, xmm1, {imm8}").into())],
971971
&[
972972
CInlineAsmOperand::InOut {
973973
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
@@ -1015,7 +1015,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
10151015

10161016
codegen_inline_asm_inner(
10171017
fx,
1018-
&[InlineAsmTemplatePiece::String(format!("pclmulqdq xmm0, xmm1, {imm8}"))],
1018+
&[InlineAsmTemplatePiece::String(format!("pclmulqdq xmm0, xmm1, {imm8}").into())],
10191019
&[
10201020
CInlineAsmOperand::InOut {
10211021
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
@@ -1052,7 +1052,9 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
10521052

10531053
codegen_inline_asm_inner(
10541054
fx,
1055-
&[InlineAsmTemplatePiece::String(format!("aeskeygenassist xmm0, xmm0, {imm8}"))],
1055+
&[InlineAsmTemplatePiece::String(
1056+
format!("aeskeygenassist xmm0, xmm0, {imm8}").into(),
1057+
)],
10561058
&[CInlineAsmOperand::InOut {
10571059
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
10581060
_late: true,
@@ -1071,7 +1073,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
10711073

10721074
codegen_inline_asm_inner(
10731075
fx,
1074-
&[InlineAsmTemplatePiece::String("aesimc xmm0, xmm0".to_string())],
1076+
&[InlineAsmTemplatePiece::String("aesimc xmm0, xmm0".into())],
10751077
&[CInlineAsmOperand::InOut {
10761078
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
10771079
_late: true,
@@ -1091,7 +1093,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
10911093

10921094
codegen_inline_asm_inner(
10931095
fx,
1094-
&[InlineAsmTemplatePiece::String("aesenc xmm0, xmm1".to_string())],
1096+
&[InlineAsmTemplatePiece::String("aesenc xmm0, xmm1".into())],
10951097
&[
10961098
CInlineAsmOperand::InOut {
10971099
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
@@ -1117,7 +1119,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
11171119

11181120
codegen_inline_asm_inner(
11191121
fx,
1120-
&[InlineAsmTemplatePiece::String("aesenclast xmm0, xmm1".to_string())],
1122+
&[InlineAsmTemplatePiece::String("aesenclast xmm0, xmm1".into())],
11211123
&[
11221124
CInlineAsmOperand::InOut {
11231125
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
@@ -1143,7 +1145,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
11431145

11441146
codegen_inline_asm_inner(
11451147
fx,
1146-
&[InlineAsmTemplatePiece::String("aesdec xmm0, xmm1".to_string())],
1148+
&[InlineAsmTemplatePiece::String("aesdec xmm0, xmm1".into())],
11471149
&[
11481150
CInlineAsmOperand::InOut {
11491151
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
@@ -1169,7 +1171,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
11691171

11701172
codegen_inline_asm_inner(
11711173
fx,
1172-
&[InlineAsmTemplatePiece::String("aesdeclast xmm0, xmm1".to_string())],
1174+
&[InlineAsmTemplatePiece::String("aesdeclast xmm0, xmm1".into())],
11731175
&[
11741176
CInlineAsmOperand::InOut {
11751177
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm0)),
@@ -1207,7 +1209,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
12071209

12081210
codegen_inline_asm_inner(
12091211
fx,
1210-
&[InlineAsmTemplatePiece::String(format!("sha1rnds4 xmm1, xmm2, {func}"))],
1212+
&[InlineAsmTemplatePiece::String(format!("sha1rnds4 xmm1, xmm2, {func}").into())],
12111213
&[
12121214
CInlineAsmOperand::InOut {
12131215
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm1)),
@@ -1233,7 +1235,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
12331235

12341236
codegen_inline_asm_inner(
12351237
fx,
1236-
&[InlineAsmTemplatePiece::String("sha1msg1 xmm1, xmm2".to_string())],
1238+
&[InlineAsmTemplatePiece::String("sha1msg1 xmm1, xmm2".into())],
12371239
&[
12381240
CInlineAsmOperand::InOut {
12391241
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm1)),
@@ -1259,7 +1261,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
12591261

12601262
codegen_inline_asm_inner(
12611263
fx,
1262-
&[InlineAsmTemplatePiece::String("sha1msg2 xmm1, xmm2".to_string())],
1264+
&[InlineAsmTemplatePiece::String("sha1msg2 xmm1, xmm2".into())],
12631265
&[
12641266
CInlineAsmOperand::InOut {
12651267
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm1)),
@@ -1285,7 +1287,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
12851287

12861288
codegen_inline_asm_inner(
12871289
fx,
1288-
&[InlineAsmTemplatePiece::String("sha1nexte xmm1, xmm2".to_string())],
1290+
&[InlineAsmTemplatePiece::String("sha1nexte xmm1, xmm2".into())],
12891291
&[
12901292
CInlineAsmOperand::InOut {
12911293
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm1)),
@@ -1312,7 +1314,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
13121314

13131315
codegen_inline_asm_inner(
13141316
fx,
1315-
&[InlineAsmTemplatePiece::String("sha256rnds2 xmm1, xmm2".to_string())],
1317+
&[InlineAsmTemplatePiece::String("sha256rnds2 xmm1, xmm2".into())],
13161318
&[
13171319
CInlineAsmOperand::InOut {
13181320
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm1)),
@@ -1343,7 +1345,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
13431345

13441346
codegen_inline_asm_inner(
13451347
fx,
1346-
&[InlineAsmTemplatePiece::String("sha256msg1 xmm1, xmm2".to_string())],
1348+
&[InlineAsmTemplatePiece::String("sha256msg1 xmm1, xmm2".into())],
13471349
&[
13481350
CInlineAsmOperand::InOut {
13491351
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm1)),
@@ -1369,7 +1371,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
13691371

13701372
codegen_inline_asm_inner(
13711373
fx,
1372-
&[InlineAsmTemplatePiece::String("sha256msg2 xmm1, xmm2".to_string())],
1374+
&[InlineAsmTemplatePiece::String("sha256msg2 xmm1, xmm2".into())],
13731375
&[
13741376
CInlineAsmOperand::InOut {
13751377
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::xmm1)),
@@ -1435,7 +1437,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
14351437
let edx_place = res_place.place_field(fx, FieldIdx::new(1));
14361438
codegen_inline_asm_inner(
14371439
fx,
1438-
&[InlineAsmTemplatePiece::String("rdtsc".to_string())],
1440+
&[InlineAsmTemplatePiece::String("rdtsc".into())],
14391441
&[
14401442
CInlineAsmOperand::Out {
14411443
reg: InlineAsmRegOrRegClass::Reg(InlineAsmReg::X86(X86InlineAsmReg::ax)),

0 commit comments

Comments
 (0)