diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp @@ -282,6 +282,12 @@ return; } + if (Opcode == AArch64::SPACE) { + O << '\t' << MAI.getCommentString() << " SPACE"; + printAnnotation(O, Annot); + return; + } + // Instruction TSB is specified as a one operand instruction, but 'csync' is // not encoded, so for printing it is treated as a special case here: if (Opcode == AArch64::TSB) { diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp @@ -601,8 +601,12 @@ MCFixupKind Fixup = MCFixupKind(AArch64::fixup_aarch64_tlsdesc_call); Fixups.push_back(MCFixup::create(0, MI.getOperand(0).getExpr(), Fixup)); return; - } else if (MI.getOpcode() == AArch64::CompilerBarrier) { - // This just prevents the compiler from reordering accesses, no actual code. + } + + if (MI.getOpcode() == AArch64::CompilerBarrier || + MI.getOpcode() == AArch64::SPACE) { + // CompilerBarrier just prevents the compiler from reordering accesses, and + // SPACE just increases basic block size, in both cases no actual code. return; } diff --git a/llvm/test/CodeGen/AArch64/space.ll b/llvm/test/CodeGen/AArch64/space.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/space.ll @@ -0,0 +1,16 @@ +; RUN: llc -mtriple aarch64 %s -o - | FileCheck %s +; RUN: llc -mtriple aarch64 -filetype=obj %s -o - | llvm-objdump --arch=aarch64 -d - | FileCheck %s --check-prefix=DUMP + +target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" + +define dso_local void @f(i64 %v) { +entry: + %dummy = tail call i64 @llvm.aarch64.space(i32 32684, i64 %v) + ret void +} +; CHECK: // SPACE +; CHECK-NEXT: ret +; DUMP-LABEL: f: +; DUMP-NEXT: ret + +declare dso_local i64 @llvm.aarch64.space(i32, i64) local_unnamed_addr #0